aboutsummaryrefslogtreecommitdiffstats
path: root/src/bin/rbw-agent/actions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/rbw-agent/actions.rs')
-rw-r--r--src/bin/rbw-agent/actions.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/bin/rbw-agent/actions.rs b/src/bin/rbw-agent/actions.rs
index 2cb012c..7289a25 100644
--- a/src/bin/rbw-agent/actions.rs
+++ b/src/bin/rbw-agent/actions.rs
@@ -192,6 +192,28 @@ pub async fn decrypt(
Ok(())
}
+pub async fn encrypt(
+ sock: &mut crate::sock::Sock,
+ state: std::sync::Arc<tokio::sync::RwLock<crate::agent::State>>,
+ plaintext: &str,
+) -> anyhow::Result<()> {
+ let state = state.read().await;
+ let keys = if let Some(keys) = &state.priv_key {
+ keys
+ } else {
+ return Err(anyhow::anyhow!(
+ "failed to find encryption keys in in-memory state"
+ ));
+ };
+ let cipherstring =
+ rbw::cipherstring::CipherString::encrypt(keys, plaintext.as_bytes())
+ .context("failed to encrypt plaintext secret")?;
+
+ respond_encrypt(sock, cipherstring.to_string()).await?;
+
+ Ok(())
+}
+
async fn respond_ack(sock: &mut crate::sock::Sock) -> anyhow::Result<()> {
sock.send(&rbw::protocol::Response::Ack)
.await
@@ -211,6 +233,17 @@ async fn respond_decrypt(
Ok(())
}
+async fn respond_encrypt(
+ sock: &mut crate::sock::Sock,
+ cipherstring: String,
+) -> anyhow::Result<()> {
+ sock.send(&rbw::protocol::Response::Encrypt { cipherstring })
+ .await
+ .context("failed to send response")?;
+
+ Ok(())
+}
+
async fn config_email() -> anyhow::Result<String> {
let config = rbw::config::Config::load_async()
.await