diff options
Diffstat (limited to 'cli/ops')
-rw-r--r-- | cli/ops/permissions.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/cli/ops/permissions.rs b/cli/ops/permissions.rs index 823ab678b..0f40b642c 100644 --- a/cli/ops/permissions.rs +++ b/cli/ops/permissions.rs @@ -1,5 +1,6 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. use super::dispatch_json::{Deserialize, JsonOp, Value}; +use crate::deno_error::type_error; use crate::ops::json_op; use crate::state::ThreadSafeState; use deno::*; @@ -13,6 +14,10 @@ pub fn init(i: &mut Isolate, s: &ThreadSafeState) { "revoke_permission", s.core_op(json_op(s.stateful_op(op_revoke_permission))), ); + i.register_op( + "request_permission", + s.core_op(json_op(s.stateful_op(op_request_permission))), + ); } #[derive(Deserialize)] @@ -58,3 +63,31 @@ pub fn op_revoke_permission( )?; Ok(JsonOp::Sync(json!({ "state": perm.to_string() }))) } + +pub fn op_request_permission( + state: &ThreadSafeState, + args: Value, + _zero_copy: Option<PinnedBuf>, +) -> Result<JsonOp, ErrBox> { + let args: PermissionArgs = serde_json::from_value(args)?; + let perm = match args.name.as_ref() { + "run" => Ok(state.permissions.request_run()), + "read" => Ok( + state + .permissions + .request_read(&args.path.as_ref().map(String::as_str)), + ), + "write" => Ok( + state + .permissions + .request_write(&args.path.as_ref().map(String::as_str)), + ), + "net" => state + .permissions + .request_net(&args.url.as_ref().map(String::as_str)), + "env" => Ok(state.permissions.request_env()), + "hrtime" => Ok(state.permissions.request_hrtime()), + n => Err(type_error(format!("No such permission name: {}", n))), + }?; + Ok(JsonOp::Sync(json!({ "state": perm.to_string() }))) +} |