mirror of
https://github.com/denoland/deno.git
synced 2024-11-22 04:51:22 +00:00
feat(unstable): add Deno.getUid (#13496)
This commit is contained in:
parent
245f69256b
commit
49a0db0d2a
12
cli/dts/lib.deno.unstable.d.ts
vendored
12
cli/dts/lib.deno.unstable.d.ts
vendored
@ -133,6 +133,18 @@ declare namespace Deno {
|
||||
*/
|
||||
export function networkInterfaces(): NetworkInterfaceInfo[];
|
||||
|
||||
/** **Unstable** new API. yet to be vetted.
|
||||
*
|
||||
* Returns the user id of the process on POSIX platforms. Returns null on windows.
|
||||
*
|
||||
* ```ts
|
||||
* console.log(Deno.getUid());
|
||||
* ```
|
||||
*
|
||||
* Requires `allow-env` permission.
|
||||
*/
|
||||
export function getUid(): number | null;
|
||||
|
||||
/** All possible types for interfacing with foreign functions */
|
||||
export type NativeType =
|
||||
| "void"
|
||||
|
@ -202,3 +202,13 @@ Deno.test({ permissions: { env: true } }, function systemMemoryInfo() {
|
||||
assert(info.swapTotal >= 0);
|
||||
assert(info.swapFree >= 0);
|
||||
});
|
||||
|
||||
Deno.test({ permissions: { env: true } }, function getUid() {
|
||||
if (Deno.build.os === "windows") {
|
||||
assertEquals(Deno.getUid(), null);
|
||||
} else {
|
||||
const uid = Deno.getUid();
|
||||
assert(typeof uid === "number");
|
||||
assert(uid > 0);
|
||||
}
|
||||
});
|
||||
|
@ -28,6 +28,10 @@
|
||||
return core.opSync("op_network_interfaces");
|
||||
}
|
||||
|
||||
function getUid() {
|
||||
return core.opSync("op_getuid");
|
||||
}
|
||||
|
||||
// This is an internal only method used by the test harness to override the
|
||||
// behavior of exit when the exit sanitizer is enabled.
|
||||
let exitHandler = null;
|
||||
@ -87,12 +91,13 @@
|
||||
window.__bootstrap.os = {
|
||||
env,
|
||||
execPath,
|
||||
setExitHandler,
|
||||
exit,
|
||||
osRelease,
|
||||
systemMemoryInfo,
|
||||
getUid,
|
||||
hostname,
|
||||
loadavg,
|
||||
networkInterfaces,
|
||||
osRelease,
|
||||
setExitHandler,
|
||||
systemMemoryInfo,
|
||||
};
|
||||
})(this);
|
||||
|
@ -122,6 +122,7 @@
|
||||
osRelease: __bootstrap.os.osRelease,
|
||||
systemMemoryInfo: __bootstrap.os.systemMemoryInfo,
|
||||
networkInterfaces: __bootstrap.os.networkInterfaces,
|
||||
getUid: __bootstrap.os.getUid,
|
||||
applySourceMap: __bootstrap.errorStack.opApplySourceMap,
|
||||
formatDiagnostics: __bootstrap.errorStack.opFormatDiagnostics,
|
||||
sleepSync: __bootstrap.timers.sleepSync,
|
||||
|
@ -17,16 +17,17 @@ use std::sync::Arc;
|
||||
pub fn init(maybe_exit_code: Option<Arc<AtomicI32>>) -> Extension {
|
||||
Extension::builder()
|
||||
.ops(vec![
|
||||
("op_exit", op_sync(op_exit)),
|
||||
("op_env", op_sync(op_env)),
|
||||
("op_exec_path", op_sync(op_exec_path)),
|
||||
("op_set_env", op_sync(op_set_env)),
|
||||
("op_get_env", op_sync(op_get_env)),
|
||||
("op_exit", op_sync(op_exit)),
|
||||
("op_delete_env", op_sync(op_delete_env)),
|
||||
("op_get_env", op_sync(op_get_env)),
|
||||
("op_getuid", op_sync(op_getuid)),
|
||||
("op_hostname", op_sync(op_hostname)),
|
||||
("op_loadavg", op_sync(op_loadavg)),
|
||||
("op_network_interfaces", op_sync(op_network_interfaces)),
|
||||
("op_os_release", op_sync(op_os_release)),
|
||||
("op_set_env", op_sync(op_set_env)),
|
||||
("op_set_exit_code", op_sync(op_set_exit_code)),
|
||||
("op_system_memory_info", op_sync(op_system_memory_info)),
|
||||
])
|
||||
@ -237,3 +238,25 @@ fn op_system_memory_info(
|
||||
Err(_) => Ok(None),
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(windows))]
|
||||
fn op_getuid(
|
||||
state: &mut OpState,
|
||||
_: (),
|
||||
_: (),
|
||||
) -> Result<Option<u32>, AnyError> {
|
||||
super::check_unstable(state, "Deno.getUid");
|
||||
state.borrow_mut::<Permissions>().env.check_all()?;
|
||||
unsafe { Ok(Some(libc::getuid())) }
|
||||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
fn op_getuid(
|
||||
state: &mut OpState,
|
||||
_: (),
|
||||
_: (),
|
||||
) -> Result<Option<u32>, AnyError> {
|
||||
super::check_unstable(state, "Deno.getUid");
|
||||
state.borrow_mut::<Permissions>().env.check_all()?;
|
||||
Ok(None)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user