aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2020-04-12 01:29:14 -0400
committerJesse Luehrs <doy@tozt.net>2020-04-12 01:37:35 -0400
commit14b647f9d6dbb76960e6cad6f51531ea6a8dbf3a (patch)
treea9d1c38e7c03f1cb8d1309a4623c46d636366367
parent236f06736e45c2a70f43589c9d447a0a3ef240b5 (diff)
downloadrbw-14b647f9d6dbb76960e6cad6f51531ea6a8dbf3a.tar.gz
rbw-14b647f9d6dbb76960e6cad6f51531ea6a8dbf3a.zip
avoid throwing errors for things we don't care about
-rw-r--r--src/bin/rbw/actions.rs30
-rw-r--r--src/bin/rbw/sock.rs11
-rw-r--r--src/db.rs8
3 files changed, 33 insertions, 16 deletions
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<String> {
- 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<Self> {
- 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<Self> {
+ 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(())
}