diff --git a/src/api/admin.rs b/src/api/admin.rs index c7325965..4f03a9c4 100644 --- a/src/api/admin.rs +++ b/src/api/admin.rs @@ -360,10 +360,7 @@ fn oauth2_authorize(_token: AdminToken) -> Result { let state = crate::crypto::encode_random_bytes::<32>(BASE64URL_NOPAD); // Store state with expiration (10 minutes from now) - let expiration = SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs() + 600; + let expiration = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs() + 600; OAUTH2_STATES.write().unwrap().insert(state.clone(), expiration); @@ -411,7 +408,7 @@ async fn oauth2_callback(params: OAuth2CallbackParams) -> Result, E let valid_state = { let states = OAUTH2_STATES.read().unwrap(); let now = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs(); - states.get(&state).map_or(false, |&exp| exp > now) + states.get(&state).is_some_and(|&exp| exp > now) }; if !valid_state { @@ -449,16 +446,12 @@ async fn oauth2_callback(params: OAuth2CallbackParams) -> Result, E return Err(Error::new("OAuth2 Token Exchange Failed", format!("HTTP {}: {}", status, body))); } - let token_response: Value = response - .json() - .await - .map_err(|e| Error::new("OAuth2 Token Parse Error", e.to_string()))?; + let token_response: Value = + response.json().await.map_err(|e| Error::new("OAuth2 Token Parse Error", e.to_string()))?; // Extract refresh_token from response - let refresh_token = token_response - .get("refresh_token") - .and_then(|v| v.as_str()) - .ok_or("No refresh_token in response")?; + let refresh_token = + token_response.get("refresh_token").and_then(|v| v.as_str()).ok_or("No refresh_token in response")?; // Save refresh_token to configuration let config_builder: ConfigBuilder = serde_json::from_value(json!({ diff --git a/src/config.rs b/src/config.rs index 377912d9..b7b89bad 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1146,10 +1146,7 @@ fn validate_config(cfg: &ConfigItems) -> Result<(), Error> { } // OAuth2 validation - triggered when SMTP Auth mechanism includes xoauth2 - let uses_xoauth2 = cfg.smtp_auth_mechanism - .as_ref() - .map(|m| m.to_lowercase().contains("xoauth2")) - .unwrap_or(false); + let uses_xoauth2 = cfg.smtp_auth_mechanism.as_ref().map(|m| m.to_lowercase().contains("xoauth2")).unwrap_or(false); if uses_xoauth2 { if cfg.smtp_oauth2_client_id.is_none() { diff --git a/src/mail.rs b/src/mail.rs index 31e6a810..422b61d9 100644 --- a/src/mail.rs +++ b/src/mail.rs @@ -1,9 +1,9 @@ use chrono::NaiveDateTime; use percent_encoding::{percent_encode, NON_ALPHANUMERIC}; -use std::{env::consts::EXE_SUFFIX, str::FromStr}; +use serde::{Deserialize, Serialize}; use std::sync::{LazyLock, RwLock}; use std::time::{SystemTime, UNIX_EPOCH}; -use serde::{Deserialize, Serialize}; +use std::{env::consts::EXE_SUFFIX, str::FromStr}; use lettre::{ message::{Attachment, Body, Mailbox, Message, MultiPart, SinglePart}, @@ -68,17 +68,12 @@ pub async fn refresh_oauth2_token() -> Result { return Err(Error::new("OAuth2 Token Refresh Failed", format!("HTTP {status}: {body}"))); } - let token_response: TokenRefreshResponse = response - .json() - .await - .map_err(|e| Error::new("OAuth2 Token Parse Error", e.to_string()))?; - - let expires_at = token_response.expires_in.map(|expires_in| { - SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs() + expires_in - }); + let token_response: TokenRefreshResponse = + response.json().await.map_err(|e| Error::new("OAuth2 Token Parse Error", e.to_string()))?; + + let expires_at = token_response + .expires_in + .map(|expires_in| SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs() + expires_in); Ok(OAuth2Token { access_token: token_response.access_token,