diff options
Diffstat (limited to 'cli/ops/permissions.rs')
| -rw-r--r-- | cli/ops/permissions.rs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/cli/ops/permissions.rs b/cli/ops/permissions.rs new file mode 100644 index 000000000..47a9cf871 --- /dev/null +++ b/cli/ops/permissions.rs @@ -0,0 +1,60 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +use crate::msg; +use crate::ops::empty_buf; +use crate::ops::ok_buf; +use crate::ops::serialize_response; +use crate::ops::CliOpResult; +use crate::state::ThreadSafeState; +use deno::*; +use flatbuffers::FlatBufferBuilder; + +pub fn op_permissions( + state: &ThreadSafeState, + base: &msg::Base<'_>, + data: Option<PinnedBuf>, +) -> CliOpResult { + assert!(data.is_none()); + let cmd_id = base.cmd_id(); + let builder = &mut FlatBufferBuilder::new(); + let inner = msg::PermissionsRes::create( + builder, + &msg::PermissionsResArgs { + 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(), + }, + ); + let response_buf = serialize_response( + cmd_id, + builder, + msg::BaseArgs { + inner: Some(inner.as_union_value()), + inner_type: msg::Any::PermissionsRes, + ..Default::default() + }, + ); + ok_buf(response_buf) +} + +pub fn op_revoke_permission( + state: &ThreadSafeState, + base: &msg::Base<'_>, + data: Option<PinnedBuf>, +) -> CliOpResult { + assert!(data.is_none()); + let inner = base.inner_as_permission_revoke().unwrap(); + let permission = inner.permission().unwrap(); + 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_buf(empty_buf()) +} |
