fix #6052. honor --no-color for signer command (#6100)

* fix #6052. honor --no-color for signer command

* replace call to paint closure with the body, apply to generate_new_token too
This commit is contained in:
Nicolas Ochem 2017-07-28 10:07:38 -07:00 committed by Gav Wood
parent b5f1524e78
commit f212ae6322
4 changed files with 33 additions and 21 deletions

View File

@ -57,7 +57,7 @@ pub enum Cmd {
Account(AccountCmd), Account(AccountCmd),
ImportPresaleWallet(ImportWallet), ImportPresaleWallet(ImportWallet),
Blockchain(BlockchainCmd), Blockchain(BlockchainCmd),
SignerToken(WsConfiguration, UiConfiguration), SignerToken(WsConfiguration, UiConfiguration, LogConfig),
SignerSign { SignerSign {
id: Option<usize>, id: Option<usize>,
pwfile: Option<PathBuf>, pwfile: Option<PathBuf>,
@ -149,7 +149,7 @@ impl Configuration {
let authfile = ::signer::codes_path(&ws_conf.signer_path); let authfile = ::signer::codes_path(&ws_conf.signer_path);
if self.args.cmd_new_token { if self.args.cmd_new_token {
Cmd::SignerToken(ws_conf, ui_conf) Cmd::SignerToken(ws_conf, ui_conf, logger_config.clone())
} else if self.args.cmd_sign { } else if self.args.cmd_sign {
let pwfile = self.args.flag_password.get(0).map(|pwfile| { let pwfile = self.args.flag_password.get(0).map(|pwfile| {
PathBuf::from(pwfile) PathBuf::from(pwfile)
@ -1285,7 +1285,11 @@ mod tests {
interface: "127.0.0.1".into(), interface: "127.0.0.1".into(),
port: 8180, port: 8180,
hosts: Some(vec![]), hosts: Some(vec![]),
})); }, LogConfig {
color: true,
mode: None,
file: None,
} ));
} }
#[test] #[test]

View File

@ -164,7 +164,7 @@ fn execute(command: Execute, can_restart: bool) -> Result<PostExecutionAction, S
Cmd::Account(account_cmd) => account::execute(account_cmd).map(|s| PostExecutionAction::Print(s)), Cmd::Account(account_cmd) => account::execute(account_cmd).map(|s| PostExecutionAction::Print(s)),
Cmd::ImportPresaleWallet(presale_cmd) => presale::execute(presale_cmd).map(|s| PostExecutionAction::Print(s)), Cmd::ImportPresaleWallet(presale_cmd) => presale::execute(presale_cmd).map(|s| PostExecutionAction::Print(s)),
Cmd::Blockchain(blockchain_cmd) => blockchain::execute(blockchain_cmd).map(|_| PostExecutionAction::Quit), Cmd::Blockchain(blockchain_cmd) => blockchain::execute(blockchain_cmd).map(|_| PostExecutionAction::Quit),
Cmd::SignerToken(ws_conf, ui_conf) => signer::execute(ws_conf, ui_conf).map(|s| PostExecutionAction::Print(s)), Cmd::SignerToken(ws_conf, ui_conf, logger_config) => signer::execute(ws_conf, ui_conf, logger_config).map(|s| PostExecutionAction::Print(s)),
Cmd::SignerSign { id, pwfile, port, authfile } => rpc_cli::signer_sign(id, pwfile, port, authfile).map(|s| PostExecutionAction::Print(s)), Cmd::SignerSign { id, pwfile, port, authfile } => rpc_cli::signer_sign(id, pwfile, port, authfile).map(|s| PostExecutionAction::Print(s)),
Cmd::SignerList { port, authfile } => rpc_cli::signer_list(port, authfile).map(|s| PostExecutionAction::Print(s)), Cmd::SignerList { port, authfile } => rpc_cli::signer_list(port, authfile).map(|s| PostExecutionAction::Print(s)),
Cmd::SignerReject { id, port, authfile } => rpc_cli::signer_reject(id, port, authfile).map(|s| PostExecutionAction::Print(s)), Cmd::SignerReject { id, port, authfile } => rpc_cli::signer_reject(id, port, authfile).map(|s| PostExecutionAction::Print(s)),

View File

@ -118,12 +118,12 @@ pub struct RunCmd {
pub whisper: ::whisper::Config pub whisper: ::whisper::Config
} }
pub fn open_ui(ws_conf: &rpc::WsConfiguration, ui_conf: &rpc::UiConfiguration) -> Result<(), String> { pub fn open_ui(ws_conf: &rpc::WsConfiguration, ui_conf: &rpc::UiConfiguration, logger_config: &LogConfig) -> Result<(), String> {
if !ui_conf.enabled { if !ui_conf.enabled {
return Err("Cannot use UI command with UI turned off.".into()) return Err("Cannot use UI command with UI turned off.".into())
} }
let token = signer::generate_token_and_url(ws_conf, ui_conf)?; let token = signer::generate_token_and_url(ws_conf, ui_conf, logger_config)?;
// Open a browser // Open a browser
url::open(&token.url); url::open(&token.url);
// Print a message // Print a message
@ -282,7 +282,7 @@ fn execute_light(cmd: RunCmd, can_restart: bool, logger: Arc<RotatingLogger>) ->
let rpc_stats = Arc::new(informant::RpcStats::default()); let rpc_stats = Arc::new(informant::RpcStats::default());
// the dapps server // the dapps server
let signer_service = Arc::new(signer::new_service(&cmd.ws_conf, &cmd.ui_conf)); let signer_service = Arc::new(signer::new_service(&cmd.ws_conf, &cmd.ui_conf, &cmd.logger_config));
let dapps_deps = { let dapps_deps = {
let contract_client = Arc::new(::dapps::LightRegistrar { let contract_client = Arc::new(::dapps::LightRegistrar {
client: service.client().clone(), client: service.client().clone(),
@ -378,7 +378,7 @@ pub fn execute(cmd: RunCmd, can_restart: bool, logger: Arc<RotatingLogger>) -> R
// Check if Parity is already running // Check if Parity is already running
let addr = format!("{}:{}", cmd.ui_conf.interface, cmd.ui_conf.port); let addr = format!("{}:{}", cmd.ui_conf.interface, cmd.ui_conf.port);
if !TcpListener::bind(&addr as &str).is_ok() { if !TcpListener::bind(&addr as &str).is_ok() {
return open_ui(&cmd.ws_conf, &cmd.ui_conf).map(|_| (false, None)); return open_ui(&cmd.ws_conf, &cmd.ui_conf, &cmd.logger_config).map(|_| (false, None));
} }
} }
@ -658,7 +658,7 @@ pub fn execute(cmd: RunCmd, can_restart: bool, logger: Arc<RotatingLogger>) -> R
false => Some(account_provider.clone()) false => Some(account_provider.clone())
}; };
let signer_service = Arc::new(signer::new_service(&cmd.ws_conf, &cmd.ui_conf)); let signer_service = Arc::new(signer::new_service(&cmd.ws_conf, &cmd.ui_conf, &cmd.logger_config));
// the dapps server // the dapps server
let dapps_deps = { let dapps_deps = {
@ -791,7 +791,7 @@ pub fn execute(cmd: RunCmd, can_restart: bool, logger: Arc<RotatingLogger>) -> R
// start ui // start ui
if cmd.ui { if cmd.ui {
open_ui(&cmd.ws_conf, &cmd.ui_conf)?; open_ui(&cmd.ws_conf, &cmd.ui_conf, &cmd.logger_config)?;
} }
if let Some(dapp) = cmd.dapp { if let Some(dapp) = cmd.dapp {

View File

@ -17,13 +17,13 @@
use std::io; use std::io;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use ansi_term::Colour; use ansi_term::Colour::White;
use ethcore_logger::Config as LogConfig;
use rpc; use rpc;
use rpc_apis; use rpc_apis;
use parity_rpc; use parity_rpc;
use path::restrict_permissions_owner; use path::restrict_permissions_owner;
pub const CODES_FILENAME: &'static str = "authcodes"; pub const CODES_FILENAME: &'static str = "authcodes";
pub struct NewToken { pub struct NewToken {
@ -32,12 +32,13 @@ pub struct NewToken {
pub message: String, pub message: String,
} }
pub fn new_service(ws_conf: &rpc::WsConfiguration, ui_conf: &rpc::UiConfiguration) -> rpc_apis::SignerService { pub fn new_service(ws_conf: &rpc::WsConfiguration, ui_conf: &rpc::UiConfiguration, logger_config: &LogConfig) -> rpc_apis::SignerService {
let signer_path = ws_conf.signer_path.clone(); let signer_path = ws_conf.signer_path.clone();
let logger_config_color = logger_config.color;
let signer_enabled = ui_conf.enabled; let signer_enabled = ui_conf.enabled;
rpc_apis::SignerService::new(move || { rpc_apis::SignerService::new(move || {
generate_new_token(&signer_path).map_err(|e| format!("{:?}", e)) generate_new_token(&signer_path, logger_config_color).map_err(|e| format!("{:?}", e))
}, signer_enabled) }, signer_enabled)
} }
@ -48,13 +49,14 @@ pub fn codes_path(path: &Path) -> PathBuf {
p p
} }
pub fn execute(ws_conf: rpc::WsConfiguration, ui_conf: rpc::UiConfiguration) -> Result<String, String> { pub fn execute(ws_conf: rpc::WsConfiguration, ui_conf: rpc::UiConfiguration, logger_config: LogConfig) -> Result<String, String> {
Ok(generate_token_and_url(&ws_conf, &ui_conf)?.message) Ok(generate_token_and_url(&ws_conf, &ui_conf, &logger_config)?.message)
} }
pub fn generate_token_and_url(ws_conf: &rpc::WsConfiguration, ui_conf: &rpc::UiConfiguration) -> Result<NewToken, String> { pub fn generate_token_and_url(ws_conf: &rpc::WsConfiguration, ui_conf: &rpc::UiConfiguration, logger_config: &LogConfig) -> Result<NewToken, String> {
let code = generate_new_token(&ws_conf.signer_path).map_err(|err| format!("Error generating token: {:?}", err))?; let code = generate_new_token(&ws_conf.signer_path, logger_config.color).map_err(|err| format!("Error generating token: {:?}", err))?;
let auth_url = format!("http://{}:{}/#/auth?token={}", ui_conf.interface, ui_conf.port, code); let auth_url = format!("http://{}:{}/#/auth?token={}", ui_conf.interface, ui_conf.port, code);
// And print in to the console // And print in to the console
Ok(NewToken { Ok(NewToken {
token: code.clone(), token: code.clone(),
@ -65,18 +67,24 @@ Open: {}
to authorize your browser. to authorize your browser.
Or use the generated token: Or use the generated token:
{}"#, {}"#,
Colour::White.bold().paint(auth_url), match logger_config.color {
true => format!("{}", White.bold().paint(auth_url)),
false => auth_url
},
code code
) )
}) })
} }
fn generate_new_token(path: &Path) -> io::Result<String> { fn generate_new_token(path: &Path, logger_config_color: bool) -> io::Result<String> {
let path = codes_path(path); let path = codes_path(path);
let mut codes = parity_rpc::AuthCodes::from_file(&path)?; let mut codes = parity_rpc::AuthCodes::from_file(&path)?;
codes.clear_garbage(); codes.clear_garbage();
let code = codes.generate_new()?; let code = codes.generate_new()?;
codes.to_file(&path)?; codes.to_file(&path)?;
trace!("New key code created: {}", Colour::White.bold().paint(&code[..])); trace!("New key code created: {}", match logger_config_color {
true => format!("{}", White.bold().paint(&code[..])),
false => format!("{}", &code[..])
});
Ok(code) Ok(code)
} }