Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
node: Some small UX fixes
Alexis Sellier committed 2 years ago
commit 693f0a2c440d966b0d57841d1ae0a9247c443001
parent 62aaec5f53bd41c69a7051929f2c732b682d842e
3 files changed +15 -6
modified radicle-cli/src/commands/node/control.rs
@@ -81,14 +81,14 @@ pub fn logs(lines: usize, follow: Option<time::Duration>, profile: &Profile) ->
    let logs = profile.home.node().join("node.log");

    let mut file = BufReader::new(File::open(logs)?);
-
    file.seek(SeekFrom::End(-1))?;
+
    file.seek(SeekFrom::End(0))?;

    let mut tail = Vec::new();
    let mut nlines = 0;

-
    for i in (0..=file.stream_position()?).rev() {
+
    for i in (1..=file.stream_position()?).rev() {
        let mut buf = [0; 1];
-
        file.seek(SeekFrom::Start(i))?;
+
        file.seek(SeekFrom::Start(i - 1))?;
        file.read_exact(&mut buf)?;

        if buf[0] == b'\n' {
modified radicle-crypto/src/ssh/keystore.rs
@@ -153,6 +153,8 @@ pub enum MemorySignerError {
    Keystore(#[from] Error),
    #[error("key not found in '{0}'")]
    NotFound(PathBuf),
+
    #[error("invalid passphrase")]
+
    InvalidPassphrase,
}

/// An in-memory signer that keeps its secret key internally
@@ -217,7 +219,14 @@ impl MemorySigner {
            .public_key()?
            .ok_or_else(|| MemorySignerError::NotFound(keystore.path().to_path_buf()))?;
        let secret = keystore
-
            .secret_key(passphrase)?
+
            .secret_key(passphrase)
+
            .map_err(|e| {
+
                if e.is_crypto_err() {
+
                    MemorySignerError::InvalidPassphrase
+
                } else {
+
                    e.into()
+
                }
+
            })?
            .ok_or_else(|| MemorySignerError::NotFound(keystore.path().to_path_buf()))?;

        Ok(Self { public, secret })
modified radicle-node/src/main.rs
@@ -1,7 +1,7 @@
use std::io;
use std::{env, fs, net, process};

-
use anyhow::anyhow;
+
use anyhow::{anyhow, Context};
use crossbeam_channel as chan;
use cyphernet::addr::PeerAddr;
use localtime::LocalDuration;
@@ -142,7 +142,7 @@ fn execute() -> anyhow::Result<()> {

    let passphrase = profile::env::passphrase();
    let keystore = Keystore::new(&home.keys());
-
    let signer = MemorySigner::load(&keystore, passphrase)?;
+
    let signer = MemorySigner::load(&keystore, passphrase).context("couldn't load secret key")?;

    log::info!(target: "node", "Node ID is {}", signer.public_key());