Fix auth refresh (#631)

This commit is contained in:
Geometrically 2023-08-18 21:27:42 -04:00 committed by GitHub
parent 6d9d403e7b
commit f7f73b8163
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 39 additions and 10 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "theseus"
version = "0.5.2"
version = "0.5.3"
authors = ["Jai A <jaiagr+gpg@pm.me>"]
edition = "2018"

View File

@ -1,7 +1,7 @@
pub mod complete;
pub mod init;
pub mod refresh;
mod stages;
pub(crate) mod stages;
use serde::Deserialize;

View File

@ -7,6 +7,8 @@ use chrono::{prelude::*, Duration};
use serde::{Deserialize, Serialize};
use crate::api::hydra::stages::{bearer_token, xbl_signin, xsts_token};
// Login information
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Credentials {
@ -45,12 +47,39 @@ pub async fn refresh_credentials(
credentials: &mut Credentials,
_semaphore: &FetchSemaphore,
) -> crate::Result<()> {
let res =
let oauth =
hydra::refresh::refresh(credentials.refresh_token.clone()).await?;
credentials.access_token = res.access_token;
credentials.refresh_token = res.refresh_token;
credentials.expires = Utc::now() + Duration::seconds(res.expires_in);
let xbl_token = xbl_signin::login_xbl(&oauth.access_token).await?;
// Get xsts token from xbl token
let xsts_response = xsts_token::fetch_token(&xbl_token.token).await?;
match xsts_response {
xsts_token::XSTSResponse::Unauthorized(err) => {
return Err(crate::ErrorKind::HydraError(format!(
"Error getting XBox Live token: {}",
err
))
.as_error())
}
xsts_token::XSTSResponse::Success { token: xsts_token } => {
let bearer_token =
bearer_token::fetch_bearer(&xsts_token, &xbl_token.uhs)
.await
.map_err(|err| {
crate::ErrorKind::HydraError(format!(
"Error getting bearer token: {}",
err
))
})?;
credentials.access_token = bearer_token;
credentials.refresh_token = oauth.refresh_token;
credentials.expires =
Utc::now() + Duration::seconds(oauth.expires_in);
}
}
Ok(())
}

View File

@ -1,6 +1,6 @@
[package]
name = "theseus_cli"
version = "0.5.2"
version = "0.5.3"
authors = ["Jai A <jaiagr+gpg@pm.me>"]
edition = "2018"

View File

@ -1,7 +1,7 @@
{
"name": "theseus_gui",
"private": true,
"version": "0.5.2",
"version": "0.5.3",
"type": "module",
"scripts": {
"dev": "vite",

View File

@ -1,6 +1,6 @@
[package]
name = "theseus_gui"
version = "0.5.2"
version = "0.5.3"
description = "A Tauri App"
authors = ["you"]
license = ""

View File

@ -8,7 +8,7 @@
},
"package": {
"productName": "Modrinth App",
"version": "0.5.2"
"version": "0.5.3"
},
"tauri": {
"allowlist": {