Skip to content

Commit 738a67b

Browse files
committed
refactor: Support deno serve TLS with new CLI parser
Updates PR for changes introduced in #35343
1 parent aa7b34b commit 738a67b

4 files changed

Lines changed: 105 additions & 3 deletions

File tree

libs/cli_parser/src/convert.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ pub fn convert(result: ParseResult) -> Result<Flags, CliError> {
123123
match result.subcommand.as_deref() {
124124
Some("run") => run_parse(&result, &mut flags, false)?,
125125
Some("watch") => run_parse(&result, &mut flags, true)?,
126-
Some("serve") => serve_parse(&result, &mut flags),
126+
Some("serve") => serve_parse(&result, &mut flags)?,
127127
Some("eval") => eval_parse(&result, &mut flags),
128128
Some("fmt") => fmt_parse(&result, &mut flags),
129129
Some("lint") => lint_parse(&result, &mut flags),
@@ -1379,7 +1379,10 @@ fn run_parse(
13791379
Ok(())
13801380
}
13811381

1382-
fn serve_parse(result: &ParseResult, flags: &mut Flags) {
1382+
fn serve_parse(
1383+
result: &ParseResult,
1384+
flags: &mut Flags,
1385+
) -> Result<(), CliError> {
13831386
let port = result
13841387
.get_one("port")
13851388
.and_then(|s| s.parse::<u16>().ok())
@@ -1393,6 +1396,14 @@ fn serve_parse(result: &ParseResult, flags: &mut Flags) {
13931396
flags.code_cache_enabled = !result.get_bool("no-code-cache");
13941397
flags.tunnel = result.get_bool("tunnel");
13951398

1399+
let tls_cert = result.get_one("tls-cert");
1400+
let tls_key = result.get_one("tls-key");
1401+
1402+
let tls_cert_and_key = match (tls_cert, tls_key) {
1403+
(Some(cert), Some(key)) => Some((cert.to_owned(), key.to_owned())),
1404+
_ => None,
1405+
};
1406+
13961407
let script = result
13971408
.get_one("script_arg")
13981409
.map(|s| s.to_string())
@@ -1408,10 +1419,11 @@ fn serve_parse(result: &ParseResult, flags: &mut Flags) {
14081419
script,
14091420
port,
14101421
host,
1411-
tls_cert_and_key: None,
1422+
tls_cert_and_key,
14121423
parallel,
14131424
open_site: result.get_bool("open"),
14141425
});
1426+
Ok(())
14151427
}
14161428

14171429
fn eval_parse(result: &ParseResult, flags: &mut Flags) {

libs/cli_parser/src/defs.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,18 @@ pub static SERVE_SUBCOMMAND: CommandDef = CommandDef {
589589
.long("host")
590590
.action(ArgAction::Set)
591591
.num_args(NumArgs::Exact(1)),
592+
ArgDef::new("tls-cert")
593+
.long("tls-cert")
594+
.action(ArgAction::Set)
595+
.num_args(NumArgs::Exact(1))
596+
.requires(&["tls-key"])
597+
.help("Load TLS certificate from PEM encoded file"),
598+
ArgDef::new("tls-key")
599+
.long("tls-key")
600+
.action(ArgAction::Set)
601+
.num_args(NumArgs::Exact(1))
602+
.requires(&["tls-cert"])
603+
.help("Load TLS private key from PEM encoded file"),
592604
ArgDef::new("open").long("open").set_true(),
593605
ArgDef::new("tunnel")
594606
.short('t')

libs/cli_parser/src/tests.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,16 @@ const SERVE_ARGS: &[ArgDef] = &[
593593
.action(ArgAction::Set)
594594
.num_args(NumArgs::Exact(1))
595595
.default_value("0.0.0.0"),
596+
ArgDef::new("tls-cert")
597+
.long("tls-cert")
598+
.action(ArgAction::Set)
599+
.num_args(NumArgs::Exact(1))
600+
.requires(&["tls-key"]),
601+
ArgDef::new("tls-key")
602+
.long("tls-key")
603+
.action(ArgAction::Set)
604+
.num_args(NumArgs::Exact(1))
605+
.requires(&["tls-cert"]),
596606
ArgDef::new("parallel").long("parallel").set_true(),
597607
ArgDef::new("watch")
598608
.long("watch")
@@ -1293,6 +1303,41 @@ fn serve_with_permissions() {
12931303
assert_eq!(r.get_one("port"), Some("8080"));
12941304
}
12951305

1306+
#[test]
1307+
fn serve_with_tls() {
1308+
let r = parse(
1309+
&TEST_ROOT,
1310+
&svec![
1311+
"deno",
1312+
"serve",
1313+
"--tls-cert",
1314+
"cert.pem",
1315+
"--tls-key",
1316+
"cert.key",
1317+
"server.ts"
1318+
],
1319+
)
1320+
.unwrap();
1321+
assert_eq!(r.get_one("tls-cert"), Some("cert.pem"));
1322+
assert_eq!(r.get_one("tls-key"), Some("cert.key"));
1323+
1324+
let err = parse(
1325+
&TEST_ROOT,
1326+
&svec!["deno", "serve", "--tls-cert", "cert.pem", "server.ts"],
1327+
)
1328+
.unwrap_err();
1329+
assert_eq!(err.kind, CliErrorKind::MissingRequired);
1330+
assert!(err.message.contains("--tls-key"));
1331+
1332+
let err = parse(
1333+
&TEST_ROOT,
1334+
&svec!["deno", "serve", "--tls-key", "cert.key", "server.ts"],
1335+
)
1336+
.unwrap_err();
1337+
assert_eq!(err.kind, CliErrorKind::MissingRequired);
1338+
assert!(err.message.contains("--tls-cert"));
1339+
}
1340+
12961341
#[test]
12971342
fn run_inspect() {
12981343
let r =

libs/cli_parser/src/tests_full.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,39 @@ fn serve_flags() {
717717
..Flags::default()
718718
}
719719
);
720+
let r = flags_from_vec(svec![
721+
"deno",
722+
"serve",
723+
"--tls-cert",
724+
"cert.pem",
725+
"--tls-key",
726+
"cert.key",
727+
"main.ts"
728+
]);
729+
assert_eq!(
730+
r.unwrap(),
731+
Flags {
732+
subcommand: DenoSubcommand::Serve(ServeFlags {
733+
tls_cert_and_key: Some((
734+
"cert.pem".to_string(),
735+
"cert.key".to_string()
736+
)),
737+
..ServeFlags::new_default("main.ts".to_string(), 8000, "0.0.0.0")
738+
}),
739+
permissions: PermissionFlags {
740+
allow_net: None,
741+
..Default::default()
742+
},
743+
code_cache_enabled: true,
744+
..Flags::default()
745+
}
746+
);
747+
let r =
748+
flags_from_vec(svec!["deno", "serve", "--tls-cert", "cert.pem", "main.ts"]);
749+
assert!(r.is_err());
750+
let r =
751+
flags_from_vec(svec!["deno", "serve", "--tls-key", "cert.key", "main.ts"]);
752+
assert!(r.is_err());
720753
}
721754

722755
#[test]

0 commit comments

Comments
 (0)