From 14b647f9d6dbb76960e6cad6f51531ea6a8dbf3a Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 12 Apr 2020 01:29:14 -0400 Subject: avoid throwing errors for things we don't care about --- src/bin/rbw/actions.rs | 30 ++++++++++++++++++++++-------- src/bin/rbw/sock.rs | 11 ++++------- src/db.rs | 8 +++++++- 3 files changed, 33 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/bin/rbw/actions.rs b/src/bin/rbw/actions.rs index 0844696..87ecbc8 100644 --- a/src/bin/rbw/actions.rs +++ b/src/bin/rbw/actions.rs @@ -1,3 +1,5 @@ +use anyhow::Context as _; + pub fn login() -> anyhow::Result<()> { simple_action(rbw::agent::Action::Login, "login") } @@ -15,16 +17,27 @@ pub fn lock() -> anyhow::Result<()> { } pub fn quit() -> anyhow::Result<()> { - let mut sock = crate::sock::Sock::connect()?; - sock.send(&rbw::agent::Request { - tty: std::env::var("TTY").ok(), - action: rbw::agent::Action::Quit, - })?; - Ok(()) + match crate::sock::Sock::connect() { + Ok(mut sock) => { + sock.send(&rbw::agent::Request { + tty: std::env::var("TTY").ok(), + action: rbw::agent::Action::Quit, + })?; + Ok(()) + } + Err(e) => { + if e.kind() == std::io::ErrorKind::ConnectionRefused { + Ok(()) + } else { + Err(e.into()) + } + } + } } pub fn decrypt(cipherstring: &str) -> anyhow::Result { - let mut sock = crate::sock::Sock::connect()?; + let mut sock = crate::sock::Sock::connect() + .context("failed to connect to rbw-agent")?; sock.send(&rbw::agent::Request { tty: std::env::var("TTY").ok(), action: rbw::agent::Action::Decrypt { @@ -46,7 +59,8 @@ fn simple_action( action: rbw::agent::Action, desc: &str, ) -> anyhow::Result<()> { - let mut sock = crate::sock::Sock::connect()?; + let mut sock = crate::sock::Sock::connect() + .context("failed to connect to rbw-agent")?; sock.send(&rbw::agent::Request { tty: std::env::var("TTY").ok(), diff --git a/src/bin/rbw/sock.rs b/src/bin/rbw/sock.rs index 4534e5e..8dca169 100644 --- a/src/bin/rbw/sock.rs +++ b/src/bin/rbw/sock.rs @@ -4,13 +4,10 @@ use std::io::{BufRead as _, Write as _}; pub struct Sock(std::os::unix::net::UnixStream); impl Sock { - pub fn connect() -> anyhow::Result { - Ok(Self( - std::os::unix::net::UnixStream::connect( - rbw::dirs::runtime_dir().join("socket"), - ) - .context("failed to connect to rbw-agent")?, - )) + pub fn connect() -> std::io::Result { + Ok(Self(std::os::unix::net::UnixStream::connect( + rbw::dirs::runtime_dir().join("socket"), + )?)) } pub fn send(&mut self, msg: &rbw::agent::Request) -> anyhow::Result<()> { diff --git a/src/db.rs b/src/db.rs index a750693..95da739 100644 --- a/src/db.rs +++ b/src/db.rs @@ -83,7 +83,13 @@ impl Db { pub fn remove(email: &str) -> Result<()> { let filename = Self::filename(email); - std::fs::remove_file(filename).context(crate::error::RemoveDb)?; + let res = std::fs::remove_file(filename); + if let Err(e) = &res { + if e.kind() == std::io::ErrorKind::NotFound { + return Ok(()); + } + } + res.context(crate::error::RemoveDb)?; Ok(()) } -- cgit v1.2.3-54-g00ecf