diff options
author | andy finch <andyfinch7@gmail.com> | 2019-05-08 19:20:30 -0400 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-05-08 19:20:30 -0400 |
commit | 2edee3367dc9003b721cf87ca57e820c7acf7b25 (patch) | |
tree | 4bc91161188344d61b7e20107701c7e2af6b4ae1 /cli/deno_dir.rs | |
parent | ac8c6fec5bb2be97c8dbdb2286d2688575a593f2 (diff) |
First pass at permissions whitelist (#2129)
Diffstat (limited to 'cli/deno_dir.rs')
-rw-r--r-- | cli/deno_dir.rs | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/cli/deno_dir.rs b/cli/deno_dir.rs index c58a252cb..4bca1117a 100644 --- a/cli/deno_dir.rs +++ b/cli/deno_dir.rs @@ -291,36 +291,14 @@ impl DenoDir { referrer: &str, ) -> Result<Url, url::ParseError> { let specifier = self.src_file_to_url(specifier); - let mut referrer = self.src_file_to_url(referrer); + let referrer = self.src_file_to_url(referrer); debug!( "resolve_module specifier {} referrer {}", specifier, referrer ); - if referrer.starts_with('.') { - let cwd = std::env::current_dir().unwrap(); - let referrer_path = cwd.join(referrer); - referrer = referrer_path.to_str().unwrap().to_string() + "/"; - } - - let j = if is_remote(&specifier) - || (Path::new(&specifier).is_absolute() && !is_remote(&referrer)) - { - parse_local_or_remote(&specifier)? - } else if referrer.ends_with('/') { - let r = Url::from_directory_path(&referrer); - // TODO(ry) Properly handle error. - if r.is_err() { - error!("Url::from_directory_path error {}", referrer); - } - let base = r.unwrap(); - base.join(specifier.as_ref())? - } else { - let base = parse_local_or_remote(&referrer)?; - base.join(specifier.as_ref())? - }; - Ok(j) + resolve_file_url(specifier, referrer) } /// Returns (module name, local filename) @@ -889,6 +867,35 @@ fn save_source_code_headers( } } +pub fn resolve_file_url( + specifier: String, + mut referrer: String, +) -> Result<Url, url::ParseError> { + if referrer.starts_with('.') { + let cwd = std::env::current_dir().unwrap(); + let referrer_path = cwd.join(referrer); + referrer = referrer_path.to_str().unwrap().to_string() + "/"; + } + + let j = if is_remote(&specifier) + || (Path::new(&specifier).is_absolute() && !is_remote(&referrer)) + { + parse_local_or_remote(&specifier)? + } else if referrer.ends_with('/') { + let r = Url::from_directory_path(&referrer); + // TODO(ry) Properly handle error. + if r.is_err() { + error!("Url::from_directory_path error {}", referrer); + } + let base = r.unwrap(); + base.join(specifier.as_ref())? + } else { + let base = parse_local_or_remote(&referrer)?; + base.join(specifier.as_ref())? + }; + Ok(j) +} + #[cfg(test)] mod tests { use super::*; |