diff options
Diffstat (limited to 'cli/flags.rs')
-rw-r--r-- | cli/flags.rs | 69 |
1 files changed, 36 insertions, 33 deletions
diff --git a/cli/flags.rs b/cli/flags.rs index 8093f55c6..4226bb5c5 100644 --- a/cli/flags.rs +++ b/cli/flags.rs @@ -1,5 +1,4 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -use crate::resolve_hosts::resolve_hosts; use clap::App; use clap::AppSettings; use clap::Arg; @@ -1054,7 +1053,7 @@ Grant permission to read from disk and listen to network: Grant permission to read allow-listed files from disk: deno run --allow-read=/etc https://deno.land/std/http/file_server.ts - + Deno allows specifying the filename '-' to read the file from stdin. curl https://deno.land/std/examples/welcome.ts | target/debug/deno run -", ) @@ -1376,6 +1375,41 @@ pub fn resolve_urls(urls: Vec<String>) -> Vec<String> { out } +/// Expands "bare port" paths (eg. ":8080") into full paths with hosts. It +/// expands to such paths into 3 paths with following hosts: `0.0.0.0:port`, +/// `127.0.0.1:port` and `localhost:port`. +fn resolve_hosts(paths: Vec<String>) -> Vec<String> { + let mut out: Vec<String> = vec![]; + for host_and_port in paths.iter() { + let parts = host_and_port.split(':').collect::<Vec<&str>>(); + + match parts.len() { + // host only + 1 => { + out.push(host_and_port.to_owned()); + } + // host and port (NOTE: host might be empty string) + 2 => { + let host = parts[0]; + let port = parts[1]; + + if !host.is_empty() { + out.push(host_and_port.to_owned()); + continue; + } + + // we got bare port, let's add default hosts + for host in ["0.0.0.0", "127.0.0.1", "localhost"].iter() { + out.push(format!("{}:{}", host, port)); + } + } + _ => panic!("Bad host:port pair: {}", host_and_port), + } + } + + out +} + #[cfg(test)] mod tests { use super::*; @@ -2448,37 +2482,6 @@ mod tests { } #[test] - fn allow_net_allowlist_with_ipv6_address() { - let r = flags_from_vec_safe(svec![ - "deno", - "run", - "--allow-net=deno.land,deno.land:80,::,127.0.0.1,[::1],1.2.3.4:5678,:5678,[::1]:8080", - "script.ts" - ]); - assert_eq!( - r.unwrap(), - Flags { - subcommand: DenoSubcommand::Run { - script: "script.ts".to_string(), - }, - net_allowlist: svec![ - "deno.land", - "deno.land:80", - "::", - "127.0.0.1", - "[::1]", - "1.2.3.4:5678", - "0.0.0.0:5678", - "127.0.0.1:5678", - "localhost:5678", - "[::1]:8080" - ], - ..Flags::default() - } - ); - } - - #[test] fn lock_write() { let r = flags_from_vec_safe(svec![ "deno", |