From bc18bca5c67b4a678a31198877e39d57d97b1e0c Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 6 Apr 2020 06:35:30 -0400 Subject: factor out into an agent --- src/api.rs | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'src/api.rs') diff --git a/src/api.rs b/src/api.rs index ae2e550..de5a70d 100644 --- a/src/api.rs +++ b/src/api.rs @@ -54,7 +54,7 @@ struct Profile { key: String, } -#[derive(serde::Deserialize, Debug)] +#[derive(serde::Serialize, serde::Deserialize, Debug)] pub struct Cipher { #[serde(rename = "Name")] pub name: String, @@ -62,7 +62,7 @@ pub struct Cipher { pub login: Login, } -#[derive(serde::Deserialize, Debug)] +#[derive(serde::Serialize, serde::Deserialize, Debug)] pub struct Login { #[serde(rename = "Username")] pub username: String, @@ -92,22 +92,23 @@ impl Client { } } - pub fn prelogin(&self, email: &str) -> Result { + pub async fn prelogin(&self, email: &str) -> Result { let prelogin = PreloginReq { email: email.to_string(), }; - let client = reqwest::blocking::Client::new(); + let client = reqwest::Client::new(); let res = client .post(&self.api_url("/accounts/prelogin")) .json(&prelogin) .send() + .await .context(crate::error::Reqwest)?; let prelogin_res: PreloginRes = - res.json().context(crate::error::Reqwest)?; + res.json().await.context(crate::error::Reqwest)?; Ok(prelogin_res.kdf_iterations) } - pub fn login( + pub async fn login( &self, email: &str, master_password_hash: &[u8], @@ -125,14 +126,15 @@ impl Client { device_name: "test cli".to_string(), device_push_token: "".to_string(), }; - let client = reqwest::blocking::Client::new(); + let client = reqwest::Client::new(); let res = client .post(&self.identity_url("/connect/token")) .form(&connect_req) .send() + .await .context(crate::error::Reqwest)?; let connect_res: ConnectRes = - res.json().context(crate::error::Reqwest)?; + res.json().await.context(crate::error::Reqwest)?; Ok(( connect_res.access_token, connect_res.refresh_token, @@ -140,15 +142,20 @@ impl Client { )) } - pub fn sync(&self, access_token: &str) -> Result> { - let client = reqwest::blocking::Client::new(); + pub async fn sync( + &self, + access_token: &str, + ) -> Result<(String, Vec)> { + let client = reqwest::Client::new(); let res = client .get(&self.api_url("/sync")) .header("Authorization", format!("Bearer {}", access_token)) .send() + .await .context(crate::error::Reqwest)?; - let sync_res: SyncRes = res.json().context(crate::error::Reqwest)?; - Ok(sync_res.ciphers) + let sync_res: SyncRes = + res.json().await.context(crate::error::Reqwest)?; + Ok((sync_res.profile.key, sync_res.ciphers)) } fn api_url(&self, path: &str) -> String { -- cgit v1.2.3-54-g00ecf