diff options
| author | mat <git@matdoes.dev> | 2023-12-16 13:54:57 -0600 |
|---|---|---|
| committer | mat <git@matdoes.dev> | 2023-12-16 13:54:57 -0600 |
| commit | 92d33ad0a325b8cb7c78e13a344621e34fb4bd99 (patch) | |
| tree | 9021b34d500aefe92d5a5edb2a4c110cd2554f88 | |
| parent | a960dba87d4de71747d4923d18217bc6bab9bd38 (diff) | |
| download | azalea-drasl-92d33ad0a325b8cb7c78e13a344621e34fb4bd99.tar.xz | |
force user to reauth when refresh fails
| -rwxr-xr-x | azalea-auth/src/auth.rs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/azalea-auth/src/auth.rs b/azalea-auth/src/auth.rs index 68b03306..3b55a3bd 100755 --- a/azalea-auth/src/auth.rs +++ b/azalea-auth/src/auth.rs @@ -10,6 +10,7 @@ use std::{ time::{Instant, SystemTime, UNIX_EPOCH}, }; use thiserror::Error; +use tracing::trace; use uuid::Uuid; #[derive(Default)] @@ -84,7 +85,14 @@ pub async fn auth(email: &str, opts: AuthOpts) -> Result<AuthResult, AuthError> }; if msa.is_expired() { tracing::trace!("refreshing Microsoft auth token"); - msa = refresh_ms_auth_token(&client, &msa.data.refresh_token).await?; + match refresh_ms_auth_token(&client, &msa.data.refresh_token).await { + Ok(new_msa) => msa = new_msa, + Err(e) => { + // can't refresh, ask the user to auth again + tracing::error!("Error refreshing Microsoft auth token: {}", e); + msa = interactive_get_ms_auth_token(&client, email).await?; + } + } } let msa_token = &msa.data.access_token; @@ -361,13 +369,15 @@ pub async fn interactive_get_ms_auth_token( pub enum RefreshMicrosoftAuthTokenError { #[error("Http error: {0}")] Http(#[from] reqwest::Error), + #[error("Error parsing JSON: {0}")] + Json(#[from] serde_json::Error), } pub async fn refresh_ms_auth_token( client: &reqwest::Client, refresh_token: &str, ) -> Result<ExpiringValue<AccessTokenResponse>, RefreshMicrosoftAuthTokenError> { - let access_token_response = client + let access_token_response_text = client .post("https://login.live.com/oauth20_token.srf") .form(&vec![ ("scope", "service::user.auth.xboxlive.com::MBI_SSL"), @@ -377,8 +387,10 @@ pub async fn refresh_ms_auth_token( ]) .send() .await? - .json::<AccessTokenResponse>() + .text() .await?; + let access_token_response: AccessTokenResponse = + serde_json::from_str(&access_token_response_text)?; let expires_at = SystemTime::now() + std::time::Duration::from_secs(access_token_response.expires_in); |
