mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -05:00
stabilize Deno.cwd and require --allow-read (#5068)
This commit is contained in:
parent
191c59a591
commit
6c02b061ce
8 changed files with 23 additions and 59 deletions
|
@ -19,7 +19,7 @@ export {
|
||||||
DiagnosticItem,
|
DiagnosticItem,
|
||||||
DiagnosticMessageChain,
|
DiagnosticMessageChain,
|
||||||
} from "./diagnostics.ts";
|
} from "./diagnostics.ts";
|
||||||
export { chdir } from "./ops/fs/dir.ts";
|
export { chdir, cwd } from "./ops/fs/dir.ts";
|
||||||
export { errors } from "./errors.ts";
|
export { errors } from "./errors.ts";
|
||||||
export {
|
export {
|
||||||
File,
|
File,
|
||||||
|
|
|
@ -14,7 +14,6 @@ export { setRaw } from "./ops/tty.ts";
|
||||||
export { utimeSync, utime } from "./ops/fs/utime.ts";
|
export { utimeSync, utime } from "./ops/fs/utime.ts";
|
||||||
export { ShutdownMode, shutdown } from "./net.ts";
|
export { ShutdownMode, shutdown } from "./net.ts";
|
||||||
export { listen, listenDatagram, connect } from "./net_unstable.ts";
|
export { listen, listenDatagram, connect } from "./net_unstable.ts";
|
||||||
export { cwd } from "./ops/fs/dir.ts";
|
|
||||||
export { startTls } from "./tls.ts";
|
export { startTls } from "./tls.ts";
|
||||||
export { kill } from "./ops/process.ts";
|
export { kill } from "./ops/process.ts";
|
||||||
export {
|
export {
|
||||||
|
|
14
cli/js/lib.deno.ns.d.ts
vendored
14
cli/js/lib.deno.ns.d.ts
vendored
|
@ -144,6 +144,20 @@ declare namespace Deno {
|
||||||
*/
|
*/
|
||||||
export function chdir(directory: string): void;
|
export function chdir(directory: string): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a string representing the current working directory.
|
||||||
|
*
|
||||||
|
* If the current directory can be reached via multiple paths (due to symbolic
|
||||||
|
* links), `cwd()` may return any one of them.
|
||||||
|
*
|
||||||
|
* const currentWorkingDirectory = Deno.cwd();
|
||||||
|
*
|
||||||
|
* Throws `Deno.errors.NotFound` if directory not available.
|
||||||
|
*
|
||||||
|
* Requires --allow-read
|
||||||
|
*/
|
||||||
|
export function cwd(): string;
|
||||||
|
|
||||||
export enum SeekMode {
|
export enum SeekMode {
|
||||||
Start = 0,
|
Start = 0,
|
||||||
Current = 1,
|
Current = 1,
|
||||||
|
|
15
cli/js/lib.deno.unstable.d.ts
vendored
15
cli/js/lib.deno.unstable.d.ts
vendored
|
@ -1024,21 +1024,6 @@ declare namespace Deno {
|
||||||
options: ConnectOptions | UnixConnectOptions
|
options: ConnectOptions | UnixConnectOptions
|
||||||
): Promise<Conn>;
|
): Promise<Conn>;
|
||||||
|
|
||||||
/**
|
|
||||||
* **UNSTABLE**: Currently under evaluation to decide if explicit permission is
|
|
||||||
* required to get the value of the current working directory.
|
|
||||||
*
|
|
||||||
* Return a string representing the current working directory.
|
|
||||||
*
|
|
||||||
* If the current directory can be reached via multiple paths (due to symbolic
|
|
||||||
* links), `cwd()` may return any one of them.
|
|
||||||
*
|
|
||||||
* const currentWorkingDirectory = Deno.cwd();
|
|
||||||
*
|
|
||||||
* Throws `Deno.errors.NotFound` if directory not available.
|
|
||||||
*/
|
|
||||||
export function cwd(): string;
|
|
||||||
|
|
||||||
export interface StartTlsOptions {
|
export interface StartTlsOptions {
|
||||||
/** A literal IP address or host name that can be resolved to an IP address.
|
/** A literal IP address or host name that can be resolved to an IP address.
|
||||||
* If not specified, defaults to `127.0.0.1`. */
|
* If not specified, defaults to `127.0.0.1`. */
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||||
import { unitTest, assert, assertEquals } from "./test_util.ts";
|
import { unitTest, assert, assertEquals } from "./test_util.ts";
|
||||||
|
|
||||||
unitTest(function dirCwdNotNull(): void {
|
unitTest({ perms: { read: true } }, function dirCwdNotNull(): void {
|
||||||
assert(Deno.cwd() != null);
|
assert(Deno.cwd() != null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -905,11 +905,12 @@ fn op_utime(
|
||||||
}
|
}
|
||||||
|
|
||||||
fn op_cwd(
|
fn op_cwd(
|
||||||
_state: &State,
|
state: &State,
|
||||||
_args: Value,
|
_args: Value,
|
||||||
_zero_copy: Option<ZeroCopyBuf>,
|
_zero_copy: Option<ZeroCopyBuf>,
|
||||||
) -> Result<JsonOp, OpError> {
|
) -> Result<JsonOp, OpError> {
|
||||||
let path = current_dir()?;
|
let path = current_dir()?;
|
||||||
|
state.check_read(&path)?;
|
||||||
let path_str = into_string(path.into_os_string())?;
|
let path_str = into_string(path.into_os_string())?;
|
||||||
Ok(JsonOp::Sync(json!(path_str)))
|
Ok(JsonOp::Sync(json!(path_str)))
|
||||||
}
|
}
|
||||||
|
|
|
@ -1146,10 +1146,9 @@ itest!(_055_import_wasm_via_network {
|
||||||
http_server: true,
|
http_server: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO(lucacasonato): remove --unstable when cwd goes stable
|
|
||||||
itest!(_056_make_temp_file_write_perm {
|
itest!(_056_make_temp_file_write_perm {
|
||||||
args:
|
args:
|
||||||
"run --allow-write=./subdir/ --unstable 056_make_temp_file_write_perm.ts",
|
"run --allow-read --allow-write=./subdir/ 056_make_temp_file_write_perm.ts",
|
||||||
output: "056_make_temp_file_write_perm.out",
|
output: "056_make_temp_file_write_perm.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||||
import { assert, assertEquals, assertStrContains } from "../testing/asserts.ts";
|
import { assert, assertEquals } from "../testing/asserts.ts";
|
||||||
import { BufReader } from "../io/bufio.ts";
|
import { BufReader } from "../io/bufio.ts";
|
||||||
import { TextProtoReader } from "../textproto/mod.ts";
|
import { TextProtoReader } from "../textproto/mod.ts";
|
||||||
import { ServerRequest } from "./server.ts";
|
import { ServerRequest } from "./server.ts";
|
||||||
|
@ -12,7 +12,6 @@ async function startFileServer(): Promise<void> {
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
"run",
|
"run",
|
||||||
"--unstable",
|
|
||||||
"--allow-read",
|
"--allow-read",
|
||||||
"--allow-net",
|
"--allow-net",
|
||||||
"http/file_server.ts",
|
"http/file_server.ts",
|
||||||
|
@ -104,47 +103,14 @@ test("serveWithUnorthodoxFilename", async function (): Promise<void> {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test("servePermissionDenied", async function (): Promise<void> {
|
|
||||||
const deniedServer = Deno.run({
|
|
||||||
// TODO(lucacasonato): remove unstable when stabilized
|
|
||||||
cmd: [
|
|
||||||
Deno.execPath(),
|
|
||||||
"run",
|
|
||||||
"--unstable",
|
|
||||||
"--allow-net",
|
|
||||||
"http/file_server.ts",
|
|
||||||
],
|
|
||||||
stdout: "piped",
|
|
||||||
stderr: "piped",
|
|
||||||
});
|
|
||||||
assert(deniedServer.stdout != null);
|
|
||||||
const reader = new TextProtoReader(new BufReader(deniedServer.stdout));
|
|
||||||
assert(deniedServer.stderr != null);
|
|
||||||
const errReader = new TextProtoReader(new BufReader(deniedServer.stderr));
|
|
||||||
const s = await reader.readLine();
|
|
||||||
assert(s !== null && s.includes("server listening"));
|
|
||||||
|
|
||||||
try {
|
|
||||||
const res = await fetch("http://localhost:4500/");
|
|
||||||
const _ = await res.text();
|
|
||||||
assertStrContains(
|
|
||||||
(await errReader.readLine()) as string,
|
|
||||||
"run again with the --allow-read flag"
|
|
||||||
);
|
|
||||||
} finally {
|
|
||||||
deniedServer.close();
|
|
||||||
deniedServer.stdout.close();
|
|
||||||
deniedServer.stderr.close();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
test("printHelp", async function (): Promise<void> {
|
test("printHelp", async function (): Promise<void> {
|
||||||
const helpProcess = Deno.run({
|
const helpProcess = Deno.run({
|
||||||
// TODO(lucacasonato): remove unstable when stabilized
|
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
"run",
|
"run",
|
||||||
"--unstable",
|
// TODO(ry) It ought to be possible to get the help output without
|
||||||
|
// --allow-read.
|
||||||
|
"--allow-read",
|
||||||
"http/file_server.ts",
|
"http/file_server.ts",
|
||||||
"--help",
|
"--help",
|
||||||
],
|
],
|
||||||
|
|
Loading…
Reference in a new issue