diff options
author | Dmitry Sharshakov <sh7dm@outlook.com> | 2019-02-08 00:19:50 +0300 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-02-07 16:19:50 -0500 |
commit | 5c50d2819b7b7f43820b0f2e572dff2fc0bb8c8b (patch) | |
tree | 67474cb213c5b82873bf28d42638038c97b23fe1 | |
parent | aea7884d11b6f10e2ccc0d6a7c5c154f84472ed4 (diff) |
Add emojis to permission prompts (#1684)
-rw-r--r-- | BUILD.gn | 1 | ||||
-rw-r--r-- | Cargo.lock | 10 | ||||
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | Docs.md | 2 | ||||
-rw-r--r-- | build_extra/rust/BUILD.gn | 12 | ||||
-rw-r--r-- | src/main.rs | 3 | ||||
-rw-r--r-- | src/permissions.rs | 20 | ||||
m--------- | third_party | 0 | ||||
-rwxr-xr-x | tools/permission_prompt_test.py | 17 |
9 files changed, 45 insertions, 21 deletions
@@ -18,6 +18,7 @@ group("default") { } main_extern = [ + "$rust_build:ansi_term", "$rust_build:atty", "$rust_build:dirs", "$rust_build:flatbuffers", diff --git a/Cargo.lock b/Cargo.lock index a0ffaa3aa..134ca4387 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,4 +1,12 @@ [[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "arc-swap" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -184,6 +192,7 @@ dependencies = [ name = "deno" version = "0.2.10" dependencies = [ + "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "dirs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "flatbuffers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1310,6 +1319,7 @@ dependencies = [ ] [metadata] +"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" "checksum arc-swap 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1025aeae2b664ca0ea726a89d574fe8f4e77dd712d443236ad1de00379450cf6" "checksum argon2rs 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3f67b0b6a86dae6e67ff4ca2b6201396074996379fba2b92ff649126f37cb392" "checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" diff --git a/Cargo.toml b/Cargo.toml index 7aeff89fb..652a0d988 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ version = "0.2.10" edition = "2018" [dependencies] +ansi_term = "0.11.0" atty = "0.2.11" dirs = "1.0.4" flatbuffers = "0.5.0" @@ -200,7 +200,7 @@ the network: ``` > deno https://deno.land/x/examples/echo_server.ts -deno requests network access to "listen". Grant? [yN] y +⚠️ Deno requests network access to "listen". Grant? [yN] y listening on 0.0.0.0:8080 ``` diff --git a/build_extra/rust/BUILD.gn b/build_extra/rust/BUILD.gn index 09a32d849..ca136ed78 100644 --- a/build_extra/rust/BUILD.gn +++ b/build_extra/rust/BUILD.gn @@ -10,6 +10,18 @@ import("rust.gni") cargo_home = "//third_party/rust_crates" +rust_crate("ansi_term") { + edition = "2015" + source_root = "$cargo_home/registry/src/github.com-1ecc6299db9ec823/ansi_term-0.11.0/src/lib.rs" + args = [ + "--cap-lints", + "allow", + ] + if (is_win) { + extern = [ ":winapi" ] + } +} + rust_crate("arrayvec") { edition = "2015" source_root = "$cargo_home/registry/src/github.com-1ecc6299db9ec823/arrayvec-0.4.10/src/lib.rs" diff --git a/src/main.rs b/src/main.rs index 36a39dbf0..175464e31 100644 --- a/src/main.rs +++ b/src/main.rs @@ -61,6 +61,9 @@ fn print_err_and_exit(err: errors::RustOrJsError) { } fn main() { + #[cfg(windows)] + ansi_term::enable_ansi_support().ok(); // For Windows 10 + log::set_logger(&LOGGER).unwrap(); let args = env::args().collect(); let (mut flags, mut rest_argv, usage_string) = flags::set_flags(args) diff --git a/src/permissions.rs b/src/permissions.rs index fc14bea76..c05ea4ee5 100644 --- a/src/permissions.rs +++ b/src/permissions.rs @@ -3,6 +3,7 @@ use atty; use crate::flags::DenoFlags; +use ansi_term::Style; use crate::errors::permission_denied; use crate::errors::DenoResult; use std::io; @@ -32,7 +33,7 @@ impl DenoPermissions { return Ok(()); }; // TODO get location (where access occurred) - let r = permission_prompt("Deno requests access to run a subprocess."); + let r = permission_prompt("access to run a subprocess"); if r.is_ok() { self.allow_run.store(true, Ordering::SeqCst); } @@ -44,10 +45,7 @@ impl DenoPermissions { return Ok(()); }; // TODO get location (where access occurred) - let r = permission_prompt(&format!( - "Deno requests write access to \"{}\".", - filename - ));; + let r = permission_prompt(&format!("write access to \"{}\"", filename));; if r.is_ok() { self.allow_write.store(true, Ordering::SeqCst); } @@ -59,10 +57,8 @@ impl DenoPermissions { return Ok(()); }; // TODO get location (where access occurred) - let r = permission_prompt(&format!( - "Deno requests network access to \"{}\".", - domain_name - )); + let r = + permission_prompt(&format!("network access to \"{}\"", domain_name)); if r.is_ok() { self.allow_net.store(true, Ordering::SeqCst); } @@ -74,8 +70,7 @@ impl DenoPermissions { return Ok(()); }; // TODO get location (where access occurred) - let r = - permission_prompt(&"Deno requests access to environment variables."); + let r = permission_prompt(&"access to environment variables"); if r.is_ok() { self.allow_env.store(true, Ordering::SeqCst); } @@ -87,8 +82,9 @@ fn permission_prompt(message: &str) -> DenoResult<()> { if !atty::is(atty::Stream::Stdin) || !atty::is(atty::Stream::Stderr) { return Err(permission_denied()); }; + let msg = format!("⚠️ Deno requests {}. Grant? [yN] ", message); // print to stderr so that if deno is > to a file this is still displayed. - eprint!("{} Grant? [yN] ", message); + eprint!("{}", Style::new().bold().paint(msg)); let mut input = String::new(); let stdin = io::stdin(); let _nread = stdin.read_line(&mut input)?; diff --git a/third_party b/third_party -Subproject c8e3a6e37ff575a6f41168235651f5ef684f198 +Subproject fc22ab76b59256a3cdbfd74776460bc40b6b24f diff --git a/tools/permission_prompt_test.py b/tools/permission_prompt_test.py index 5eae5beda..e2557e841 100755 --- a/tools/permission_prompt_test.py +++ b/tools/permission_prompt_test.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +# -*- coding: utf-8 -*- # Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. import os import pty @@ -74,7 +75,7 @@ class Prompt(object): code, stdout, stderr = self.run('needsWrite', b'y\n') assert code == 0 assert stdout == b'' - assert b'Deno requests write access' in stderr + assert b'⚠️ Deno requests write access' in stderr def test_write_arg(self): code, stdout, stderr = self.run('needsWrite', b'', allow_write=True) @@ -86,13 +87,13 @@ class Prompt(object): code, _stdout, stderr = self.run('needsWrite', b'N\n') assert code == 1 assert b'PermissionDenied: permission denied' in stderr - assert b'Deno requests write access' in stderr + assert b'⚠️ Deno requests write access' in stderr def test_env_yes(self): code, stdout, stderr = self.run('needsEnv', b'y\n') assert code == 0 assert stdout == b'' - assert b'Deno requests access to environment' in stderr + assert b'⚠️ Deno requests access to environment' in stderr def test_env_arg(self): code, stdout, stderr = self.run('needsEnv', b'', allow_env=True) @@ -104,13 +105,13 @@ class Prompt(object): code, _stdout, stderr = self.run('needsEnv', b'N\n') assert code == 1 assert b'PermissionDenied: permission denied' in stderr - assert b'Deno requests access to environment' in stderr + assert b'⚠️ Deno requests access to environment' in stderr def test_net_yes(self): code, stdout, stderr = self.run('needsEnv', b'y\n') assert code == 0 assert stdout == b'' - assert b'Deno requests access to environment' in stderr + assert b'⚠️ Deno requests access to environment' in stderr def test_net_arg(self): code, stdout, stderr = self.run('needsNet', b'', allow_net=True) @@ -122,13 +123,13 @@ class Prompt(object): code, _stdout, stderr = self.run('needsNet', b'N\n') assert code == 1 assert b'PermissionDenied: permission denied' in stderr - assert b'Deno requests network access' in stderr + assert b'⚠️ Deno requests network access' in stderr def test_run_yes(self): code, stdout, stderr = self.run('needsRun', b'y\n') assert code == 0 assert stdout == b'hello' - assert b'Deno requests access to run' in stderr + assert b'⚠️ Deno requests access to run' in stderr def test_run_arg(self): code, stdout, stderr = self.run('needsRun', b'', allow_run=True) @@ -140,7 +141,7 @@ class Prompt(object): code, _stdout, stderr = self.run('needsRun', b'N\n') assert code == 1 assert b'PermissionDenied: permission denied' in stderr - assert b'Deno requests access to run' in stderr + assert b'⚠️ Deno requests access to run' in stderr def permission_prompt_test(deno_exe): |