From f65b65bb24960a75cf1f900819c4005e7729e834 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 11 Apr 2020 18:53:45 -0400 Subject: refactor client code --- src/bin/rbw/actions.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/bin/rbw/actions.rs (limited to 'src/bin/rbw/actions.rs') diff --git a/src/bin/rbw/actions.rs b/src/bin/rbw/actions.rs new file mode 100644 index 0000000..cca2cf1 --- /dev/null +++ b/src/bin/rbw/actions.rs @@ -0,0 +1,60 @@ +pub fn login() { + simple_action(rbw::agent::Action::Login, "login"); +} + +pub fn unlock() { + simple_action(rbw::agent::Action::Unlock, "unlock"); +} + +pub fn sync() { + simple_action(rbw::agent::Action::Sync, "sync"); +} + +pub fn lock() { + simple_action(rbw::agent::Action::Lock, "lock"); +} + +pub fn quit() { + let mut sock = crate::sock::Sock::connect(); + sock.send(&rbw::agent::Request { + tty: std::env::var("TTY").ok(), + action: rbw::agent::Action::Quit, + }); +} + +pub fn decrypt(cipherstring: &str) -> String { + let mut sock = crate::sock::Sock::connect(); + sock.send(&rbw::agent::Request { + tty: std::env::var("TTY").ok(), + action: rbw::agent::Action::Decrypt { + cipherstring: cipherstring.to_string(), + }, + }); + + let res = sock.recv(); + match res { + rbw::agent::Response::Decrypt { plaintext } => plaintext, + rbw::agent::Response::Error { error } => { + panic!("failed to decrypt: {}", error) + } + _ => panic!("unexpected message: {:?}", res), + } +} + +fn simple_action(action: rbw::agent::Action, desc: &str) { + let mut sock = crate::sock::Sock::connect(); + + sock.send(&rbw::agent::Request { + tty: std::env::var("TTY").ok(), + action, + }); + + let res = sock.recv(); + match res { + rbw::agent::Response::Ack => (), + rbw::agent::Response::Error { error } => { + panic!("failed to {}: {}", desc, error) + } + _ => panic!("unexpected message: {:?}", res), + } +} -- cgit v1.2.3-54-g00ecf