summaryrefslogtreecommitdiff
path: root/cli/ops/permissions.rs
diff options
context:
space:
mode:
authorNayeem Rahman <muhammed.9939@gmail.com>2020-01-16 19:47:02 +0000
committerRy Dahl <ry@tinyclouds.org>2020-01-16 14:47:02 -0500
commitf8d5f5b80e27c4d5eacd667072e993ebee819ff2 (patch)
tree6af09291f623c1a04e63a38976db632f3b991314 /cli/ops/permissions.rs
parenta478fd9f028745ef22f5cb558539010c604f0a8b (diff)
fix: Resolve read/write whitelists from CWD (#3684)
Diffstat (limited to 'cli/ops/permissions.rs')
-rw-r--r--cli/ops/permissions.rs21
1 files changed, 17 insertions, 4 deletions
diff --git a/cli/ops/permissions.rs b/cli/ops/permissions.rs
index 2e282b181..6a0186acc 100644
--- a/cli/ops/permissions.rs
+++ b/cli/ops/permissions.rs
@@ -1,6 +1,7 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
use super::dispatch_json::{Deserialize, JsonOp, Value};
use crate::deno_error::type_error;
+use crate::fs as deno_fs;
use crate::ops::json_op;
use crate::state::ThreadSafeState;
use deno_core::*;
@@ -27,6 +28,15 @@ struct PermissionArgs {
path: Option<String>,
}
+fn resolve_path(path: &str) -> String {
+ deno_fs::resolve_from_cwd(path)
+ .unwrap()
+ .0
+ .to_str()
+ .unwrap()
+ .to_string()
+}
+
pub fn op_query_permission(
state: &ThreadSafeState,
args: Value,
@@ -34,10 +44,11 @@ pub fn op_query_permission(
) -> Result<JsonOp, ErrBox> {
let args: PermissionArgs = serde_json::from_value(args)?;
let permissions = state.permissions.lock().unwrap();
+ let resolved_path = args.path.as_ref().map(String::as_str).map(resolve_path);
let perm = permissions.get_permission_state(
&args.name,
&args.url.as_ref().map(String::as_str),
- &args.path.as_ref().map(String::as_str),
+ &resolved_path.as_ref().map(String::as_str),
)?;
Ok(JsonOp::Sync(json!({ "state": perm.to_string() })))
}
@@ -59,10 +70,11 @@ pub fn op_revoke_permission(
"hrtime" => permissions.allow_hrtime.revoke(),
_ => {}
};
+ let resolved_path = args.path.as_ref().map(String::as_str).map(resolve_path);
let perm = permissions.get_permission_state(
&args.name,
&args.url.as_ref().map(String::as_str),
- &args.path.as_ref().map(String::as_str),
+ &resolved_path.as_ref().map(String::as_str),
)?;
Ok(JsonOp::Sync(json!({ "state": perm.to_string() })))
}
@@ -74,13 +86,14 @@ pub fn op_request_permission(
) -> Result<JsonOp, ErrBox> {
let args: PermissionArgs = serde_json::from_value(args)?;
let mut permissions = state.permissions.lock().unwrap();
+ let resolved_path = args.path.as_ref().map(String::as_str).map(resolve_path);
let perm = match args.name.as_ref() {
"run" => Ok(permissions.request_run()),
"read" => {
- Ok(permissions.request_read(&args.path.as_ref().map(String::as_str)))
+ Ok(permissions.request_read(&resolved_path.as_ref().map(String::as_str)))
}
"write" => {
- Ok(permissions.request_write(&args.path.as_ref().map(String::as_str)))
+ Ok(permissions.request_write(&resolved_path.as_ref().map(String::as_str)))
}
"net" => permissions.request_net(&args.url.as_ref().map(String::as_str)),
"env" => Ok(permissions.request_env()),