diff options
Diffstat (limited to 'runtime/ops/permissions.rs')
-rw-r--r-- | runtime/ops/permissions.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/runtime/ops/permissions.rs b/runtime/ops/permissions.rs index ed1797701..b79330f7f 100644 --- a/runtime/ops/permissions.rs +++ b/runtime/ops/permissions.rs @@ -2,6 +2,7 @@ use crate::permissions::Permissions; use deno_core::error::custom_error; +use deno_core::error::type_error; use deno_core::error::uri_error; use deno_core::error::AnyError; use deno_core::op; @@ -27,6 +28,7 @@ pub struct PermissionArgs { path: Option<String>, host: Option<String>, variable: Option<String>, + kind: Option<String>, command: Option<String>, } @@ -48,6 +50,7 @@ pub fn op_query_permission( .as_ref(), ), "env" => permissions.env.query(args.variable.as_deref()), + "sys" => permissions.sys.query(parse_sys_kind(args.kind.as_deref())?), "run" => permissions.run.query(args.command.as_deref()), "ffi" => permissions.ffi.query(args.path.as_deref().map(Path::new)), "hrtime" => permissions.hrtime.query(), @@ -79,6 +82,9 @@ pub fn op_revoke_permission( .as_ref(), ), "env" => permissions.env.revoke(args.variable.as_deref()), + "sys" => permissions + .sys + .revoke(parse_sys_kind(args.kind.as_deref())?), "run" => permissions.run.revoke(args.command.as_deref()), "ffi" => permissions.ffi.revoke(args.path.as_deref().map(Path::new)), "hrtime" => permissions.hrtime.revoke(), @@ -110,6 +116,9 @@ pub fn op_request_permission( .as_ref(), ), "env" => permissions.env.request(args.variable.as_deref()), + "sys" => permissions + .sys + .request(parse_sys_kind(args.kind.as_deref())?), "run" => permissions.run.request(args.command.as_deref()), "ffi" => permissions.ffi.request(args.path.as_deref().map(Path::new)), "hrtime" => permissions.hrtime.request(), @@ -132,3 +141,15 @@ fn parse_host(host_str: &str) -> Result<(String, Option<u16>), AnyError> { let hostname = url.host_str().unwrap(); Ok((hostname.to_string(), url.port())) } + +fn parse_sys_kind(kind: Option<&str>) -> Result<Option<&str>, AnyError> { + if let Some(kind) = kind { + match kind { + "hostname" | "osRelease" | "loadavg" | "networkInterfaces" + | "systemMemoryInfo" | "getUid" | "getGid" => Ok(Some(kind)), + _ => Err(type_error(format!("unknown system info kind \"{}\"", kind))), + } + } else { + Ok(kind) + } +} |