summaryrefslogtreecommitdiff
path: root/cli/ops
diff options
context:
space:
mode:
Diffstat (limited to 'cli/ops')
-rw-r--r--cli/ops/permissions.rs33
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() })))
+}