summaryrefslogtreecommitdiff
path: root/runtime/ops/permissions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/ops/permissions.rs')
-rw-r--r--runtime/ops/permissions.rs33
1 files changed, 27 insertions, 6 deletions
diff --git a/runtime/ops/permissions.rs b/runtime/ops/permissions.rs
index 663b1d240..e5c55076c 100644
--- a/runtime/ops/permissions.rs
+++ b/runtime/ops/permissions.rs
@@ -1,6 +1,7 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
use crate::permissions::parse_sys_kind;
+use crate::permissions::PermissionState;
use crate::permissions::PermissionsContainer;
use deno_core::error::custom_error;
use deno_core::error::uri_error;
@@ -9,6 +10,7 @@ use deno_core::op;
use deno_core::url;
use deno_core::OpState;
use serde::Deserialize;
+use serde::Serialize;
use std::path::Path;
deno_core::extension!(
@@ -30,11 +32,30 @@ pub struct PermissionArgs {
command: Option<String>,
}
+#[derive(Serialize)]
+pub struct PermissionStatus {
+ state: String,
+ partial: bool,
+}
+
+impl From<PermissionState> for PermissionStatus {
+ fn from(state: PermissionState) -> Self {
+ PermissionStatus {
+ state: if state == PermissionState::GrantedPartial {
+ PermissionState::Granted.to_string()
+ } else {
+ state.to_string()
+ },
+ partial: state == PermissionState::GrantedPartial,
+ }
+ }
+}
+
#[op]
pub fn op_query_permission(
state: &mut OpState,
args: PermissionArgs,
-) -> Result<String, AnyError> {
+) -> Result<PermissionStatus, AnyError> {
let permissions = state.borrow::<PermissionsContainer>().0.lock();
let path = args.path.as_deref();
let perm = match args.name.as_ref() {
@@ -61,14 +82,14 @@ pub fn op_query_permission(
))
}
};
- Ok(perm.to_string())
+ Ok(PermissionStatus::from(perm))
}
#[op]
pub fn op_revoke_permission(
state: &mut OpState,
args: PermissionArgs,
-) -> Result<String, AnyError> {
+) -> Result<PermissionStatus, AnyError> {
let mut permissions = state.borrow_mut::<PermissionsContainer>().0.lock();
let path = args.path.as_deref();
let perm = match args.name.as_ref() {
@@ -95,14 +116,14 @@ pub fn op_revoke_permission(
))
}
};
- Ok(perm.to_string())
+ Ok(PermissionStatus::from(perm))
}
#[op]
pub fn op_request_permission(
state: &mut OpState,
args: PermissionArgs,
-) -> Result<String, AnyError> {
+) -> Result<PermissionStatus, AnyError> {
let mut permissions = state.borrow_mut::<PermissionsContainer>().0.lock();
let path = args.path.as_deref();
let perm = match args.name.as_ref() {
@@ -129,7 +150,7 @@ pub fn op_request_permission(
))
}
};
- Ok(perm.to_string())
+ Ok(PermissionStatus::from(perm))
}
fn parse_host(host_str: &str) -> Result<(String, Option<u16>), AnyError> {