aboutsummaryrefslogtreecommitdiffstats
path: root/src/api.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2020-04-18 18:20:46 -0400
committerJesse Luehrs <doy@tozt.net>2020-04-18 18:20:46 -0400
commit80688313eddf2111fbdbd2b897bc2159d699a6d1 (patch)
tree98aedd9d5ed776d1c96a3e1344fc381df8b9be17 /src/api.rs
parent766057750f35671fce5b6b1b98542dd60bcf8a48 (diff)
downloadrbw-80688313eddf2111fbdbd2b897bc2159d699a6d1.tar.gz
rbw-80688313eddf2111fbdbd2b897bc2159d699a6d1.zip
better error messages for incorrect passwords
Diffstat (limited to 'src/api.rs')
-rw-r--r--src/api.rs39
1 files changed, 32 insertions, 7 deletions
diff --git a/src/api.rs b/src/api.rs
index 5cf5485..5fc9058 100644
--- a/src/api.rs
+++ b/src/api.rs
@@ -48,6 +48,18 @@ struct ConnectPasswordRes {
}
#[derive(serde::Deserialize, Debug)]
+struct ConnectErrorRes {
+ #[serde(rename = "ErrorModel")]
+ error_model: ConnectErrorResErrorModel,
+}
+
+#[derive(serde::Deserialize, Debug)]
+struct ConnectErrorResErrorModel {
+ #[serde(rename = "Message")]
+ message: String,
+}
+
+#[derive(serde::Deserialize, Debug)]
struct ConnectRefreshTokenRes {
access_token: String,
expires_in: u32,
@@ -246,13 +258,26 @@ impl Client {
.send()
.await
.context(crate::error::Reqwest)?;
- let connect_res: ConnectPasswordRes =
- res.json().await.context(crate::error::Reqwest)?;
- Ok((
- connect_res.access_token,
- connect_res.refresh_token,
- connect_res.key,
- ))
+ if let reqwest::StatusCode::OK = res.status() {
+ let connect_res: ConnectPasswordRes =
+ res.json().await.context(crate::error::Reqwest)?;
+ Ok((
+ connect_res.access_token,
+ connect_res.refresh_token,
+ connect_res.key,
+ ))
+ } else {
+ let code = res.status().as_u16();
+ let error_res: ConnectErrorRes =
+ res.json().await.context(crate::error::Reqwest)?;
+ if error_res.error_model.message
+ == "Username or password is incorrect. Try again"
+ {
+ Err(Error::IncorrectPassword)
+ } else {
+ Err(Error::RequestFailed { status: code })
+ }
+ }
}
pub async fn sync(