From 59c7c079ca9452da0992159b2a85f2734f71ecdd Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 10 Apr 2020 03:39:44 -0400 Subject: implement locking --- src/agent.rs | 1 + src/bin/agent.rs | 12 ++++++++++++ src/bin/rbw.rs | 20 +++++++++++++++++++- 3 files changed, 32 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/agent.rs b/src/agent.rs index 1aec70c..8d7cd69 100644 --- a/src/agent.rs +++ b/src/agent.rs @@ -9,6 +9,7 @@ pub struct Request { pub enum Action { Login, Unlock, + Lock, Sync, Decrypt { cipherstring: String }, // add diff --git a/src/bin/agent.rs b/src/bin/agent.rs index ddcc9fc..1c06912 100644 --- a/src/bin/agent.rs +++ b/src/bin/agent.rs @@ -79,6 +79,17 @@ async fn unlock( send_response(sock, &rbw::agent::Response::Ack).await; } +async fn lock( + sock: &mut tokio::net::UnixStream, + state: std::sync::Arc>, +) { + let mut state = state.write().await; + + state.priv_key = None; + + send_response(sock, &rbw::agent::Response::Ack).await; +} + async fn sync(sock: &mut tokio::net::UnixStream) { let email = config_email().await; let mut db = rbw::db::Db::load_async(&email) @@ -127,6 +138,7 @@ async fn handle_sock( rbw::agent::Action::Unlock => { unlock(&mut sock, state.clone(), msg.tty.as_deref()).await } + rbw::agent::Action::Lock => lock(&mut sock, state.clone()).await, rbw::agent::Action::Sync => sync(&mut sock).await, rbw::agent::Action::Decrypt { cipherstring } => { decrypt(&mut sock, state.clone(), &cipherstring).await diff --git a/src/bin/rbw.rs b/src/bin/rbw.rs index bcdae01..02655a3 100644 --- a/src/bin/rbw.rs +++ b/src/bin/rbw.rs @@ -184,7 +184,25 @@ fn remove() { } fn lock() { - todo!() + ensure_agent(); + + let mut sock = connect(); + send( + &mut sock, + &rbw::agent::Request { + tty: std::env::var("TTY").ok(), + action: rbw::agent::Action::Lock, + }, + ); + + let res = recv(&mut sock); + match res { + rbw::agent::Response::Ack => (), + rbw::agent::Response::Error { error } => { + panic!("failed to lock: {}", error) + } + _ => panic!("unexpected message: {:?}", res), + } } fn purge() { -- cgit v1.2.3-54-g00ecf