(
key: &str,
client: OAuth2Client,
app: &AppHandle,
)
| 90 | |
| 91 | #[tracing::instrument(level = "debug", skip(key, client, app))] |
| 92 | pub async fn refresh_login( |
| 93 | key: &str, |
| 94 | client: OAuth2Client, |
| 95 | app: &AppHandle, |
| 96 | ) -> Result<TokenHolder> { |
| 97 | let preferences: State<PreferenceConfig> = app.state(); |
| 98 | let refresh_token: Result<String> = preferences.inner().get_secure(key.into()); |
| 99 | if refresh_token.is_err() { |
| 100 | tracing::error!("Error fetching refresh token {:?}", refresh_token); |
| 101 | let preferences: State<PreferenceConfig> = app.state(); |
| 102 | let res = preferences.inner().set_secure::<String>(key.into(), None); |
| 103 | tracing::info!("Set secure token: {:?}", res); |
| 104 | return Err(format!( |
| 105 | "Refresh token not found or corrupted: {:?}", |
| 106 | refresh_token.unwrap_err() |
| 107 | ) |
| 108 | .into()); |
| 109 | } |
| 110 | |
| 111 | let refresh_token = refresh_token.unwrap(); |
| 112 | if !refresh_token.is_empty() { |
| 113 | let res = client |
| 114 | .exchange_refresh_token(&RefreshToken::new(refresh_token.to_string())) |
| 115 | .request_async(async_http_client) |
| 116 | .await |
| 117 | .map_err(|err| match err { |
| 118 | oauth2::RequestTokenError::ServerResponse(e) => MoosyncError::String(e.to_string()), |
| 119 | oauth2::RequestTokenError::Request(_) => todo!(), |
| 120 | oauth2::RequestTokenError::Parse(_, _) => todo!(), |
| 121 | oauth2::RequestTokenError::Other(_) => todo!(), |
| 122 | })?; |
| 123 | |
| 124 | return set_tokens(key, app, res, Some(refresh_token.to_string())); |
| 125 | } |
| 126 | |
| 127 | Err("Refresh token not found".into()) |
| 128 | } |
| 129 | |
| 130 | #[allow(dead_code)] |
| 131 | pub struct LoginArgs { |
no test coverage detected