diff options
Diffstat (limited to 'src/bin/rbw.rs')
-rw-r--r-- | src/bin/rbw.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/bin/rbw.rs b/src/bin/rbw.rs index 910350b..a110176 100644 --- a/src/bin/rbw.rs +++ b/src/bin/rbw.rs @@ -1,5 +1,21 @@ use std::io::Write as _; +fn ensure_agent() { + let agent_path = std::env::var("RBW_AGENT"); + let agent_path = agent_path + .as_ref() + .map(|s| s.as_str()) + .unwrap_or("rbw-agent"); + let status = std::process::Command::new(agent_path).status().unwrap(); + if !status.success() { + if let Some(code) = status.code() { + if code != 23 { + panic!("failed to run agent: {}", status); + } + } + } +} + fn send(msg: &rbw::agent::Message) { let mut sock = std::os::unix::net::UnixStream::connect( rbw::dirs::runtime_dir().join("socket"), @@ -80,6 +96,8 @@ fn main() { .subcommand(clap::SubCommand::with_name("purge")) .get_matches(); + ensure_agent(); + match matches.subcommand() { ("login", Some(_)) => login(), ("unlock", Some(_)) => unlock(), |