From 793c0850941fef7f8b48d9b70ed59281fb3f69ff Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Thu, 2 Mar 2023 18:37:56 +0100 Subject: [PATCH] node: Don't force use of RAD_PASSPHRASE If it isn't set, prompt the user. --- Cargo.lock | 1 + radicle-node/Cargo.toml | 4 ++++ radicle-node/src/main.rs | 22 +++++++++++++++------- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c2a8260a..93e8df67 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1996,6 +1996,7 @@ dependencies = [ "qcheck-macros", "radicle", "radicle-crypto", + "radicle-term", "scrypt", "serde", "serde_json", diff --git a/radicle-node/Cargo.toml b/radicle-node/Cargo.toml index cf2f7e64..615a0b63 100644 --- a/radicle-node/Cargo.toml +++ b/radicle-node/Cargo.toml @@ -41,6 +41,10 @@ path = "../radicle" version = "0.2.0" features = ["sql"] +[dependencies.radicle-term] +path = "../radicle-term" +version = "0" + [dev-dependencies] radicle = { path = "../radicle", version = "*", features = ["test"] } radicle-crypto = { path = "../radicle-crypto", version = "*", features = ["test", "cyphernet"] } diff --git a/radicle-node/src/main.rs b/radicle-node/src/main.rs index ce695f4a..a57bf258 100644 --- a/radicle-node/src/main.rs +++ b/radicle-node/src/main.rs @@ -1,7 +1,6 @@ -use std::{env, net, process}; +use std::{net, process}; -use anyhow::anyhow; -use anyhow::Context as _; +use anyhow::{anyhow, Context as _}; use crossbeam_channel as chan; use cyphernet::addr::PeerAddr; use localtime::LocalDuration; @@ -12,6 +11,7 @@ use radicle_node::prelude::{Address, NodeId}; use radicle_node::service::tracking::Policy; use radicle_node::Runtime; use radicle_node::{logger, service, signals}; +use radicle_term as term; pub const HELP_MSG: &str = r#" Usage @@ -112,11 +112,15 @@ impl Options { fn execute() -> anyhow::Result<()> { logger::init(log::Level::Debug)?; + log::info!("Starting node.."); + let options = Options::from_env()?; let home = profile::home()?; - let passphrase = env::var(profile::env::RAD_PASSPHRASE) - .context("`RAD_PASSPHRASE` is required to be set for the node to establish connections")? - .into(); + + log::info!("Unlocking node keystore.."); + + let passphrase = term::io::passphrase(profile::env::RAD_PASSPHRASE) + .context(format!("`{}` must be set", profile::env::RAD_PASSPHRASE))?; let keystore = Keystore::new(&home.keys()); let signer = MemorySigner::load(&keystore, passphrase)?; let config = service::Config { @@ -141,7 +145,11 @@ fn execute() -> anyhow::Result<()> { fn main() { if let Err(err) = execute() { - log::error!(target: "node", "Fatal: {}", err); + if let Some(src) = err.source() { + log::error!(target: "node", "Fatal: {err}: {src}"); + } else { + log::error!(target: "node", "Fatal: {err}"); + } process::exit(1); } }