diff options
author | Yoshiya Hinosawa <stibium121@gmail.com> | 2019-10-28 00:22:53 +0900 |
---|---|---|
committer | Ry Dahl <ry@tinyclouds.org> | 2019-10-27 11:22:53 -0400 |
commit | efd7e78af3fc086dfdec51738905665d38d08eb4 (patch) | |
tree | bb921f7d960f33c6d4d13c043a7a45ebe74290ba /cli/ops/permissions.rs | |
parent | 2598f9c68d8983934c73c135c9d277b33c98e333 (diff) |
Use web standard Permissions API (#3200)
Diffstat (limited to 'cli/ops/permissions.rs')
-rw-r--r-- | cli/ops/permissions.rs | 64 |
1 files changed, 34 insertions, 30 deletions
diff --git a/cli/ops/permissions.rs b/cli/ops/permissions.rs index 8303aa9cf..823ab678b 100644 --- a/cli/ops/permissions.rs +++ b/cli/ops/permissions.rs @@ -6,8 +6,8 @@ use deno::*; pub fn init(i: &mut Isolate, s: &ThreadSafeState) { i.register_op( - "permissions", - s.core_op(json_op(s.stateful_op(op_permissions))), + "query_permission", + s.core_op(json_op(s.stateful_op(op_query_permission))), ); i.register_op( "revoke_permission", @@ -15,24 +15,25 @@ pub fn init(i: &mut Isolate, s: &ThreadSafeState) { ); } -pub fn op_permissions( +#[derive(Deserialize)] +struct PermissionArgs { + name: String, + url: Option<String>, + path: Option<String>, +} + +pub fn op_query_permission( state: &ThreadSafeState, - _args: Value, + args: Value, _zero_copy: Option<PinnedBuf>, ) -> Result<JsonOp, ErrBox> { - Ok(JsonOp::Sync(json!({ - "run": state.permissions.allows_run(), - "read": state.permissions.allows_read(), - "write": state.permissions.allows_write(), - "net": state.permissions.allows_net(), - "env": state.permissions.allows_env(), - "hrtime": state.permissions.allows_hrtime(), - }))) -} - -#[derive(Deserialize)] -struct RevokePermissionArgs { - permission: String, + let args: PermissionArgs = serde_json::from_value(args)?; + let perm = state.permissions.get_permission_state( + &args.name, + &args.url.as_ref().map(String::as_str), + &args.path.as_ref().map(String::as_str), + )?; + Ok(JsonOp::Sync(json!({ "state": perm.to_string() }))) } pub fn op_revoke_permission( @@ -40,17 +41,20 @@ pub fn op_revoke_permission( args: Value, _zero_copy: Option<PinnedBuf>, ) -> Result<JsonOp, ErrBox> { - let args: RevokePermissionArgs = serde_json::from_value(args)?; - let permission = args.permission.as_ref(); - match permission { - "run" => state.permissions.revoke_run(), - "read" => state.permissions.revoke_read(), - "write" => state.permissions.revoke_write(), - "net" => state.permissions.revoke_net(), - "env" => state.permissions.revoke_env(), - "hrtime" => state.permissions.revoke_hrtime(), - _ => Ok(()), - }?; - - Ok(JsonOp::Sync(json!({}))) + let args: PermissionArgs = serde_json::from_value(args)?; + match args.name.as_ref() { + "run" => state.permissions.allow_run.revoke(), + "read" => state.permissions.allow_read.revoke(), + "write" => state.permissions.allow_write.revoke(), + "net" => state.permissions.allow_net.revoke(), + "env" => state.permissions.allow_env.revoke(), + "hrtime" => state.permissions.allow_hrtime.revoke(), + _ => {} + }; + let perm = state.permissions.get_permission_state( + &args.name, + &args.url.as_ref().map(String::as_str), + &args.path.as_ref().map(String::as_str), + )?; + Ok(JsonOp::Sync(json!({ "state": perm.to_string() }))) } |