From a9967f0e76e1f99e79f59db20e0e192d71f60bdf Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Tue, 22 Apr 2025 23:47:17 -0400 Subject: [PATCH] resetting bearer token fails --- .../src/state/sora/sora_credential_manager.rs | 2 ++ .../src/threads/sora_session_login_thread.rs | 3 +- .../desktop/tauri-artcraft/src/utils/mod.rs | 3 +- .../sora/initialize_sora_jwt_bearer_token.rs | 28 +++++++++++++++++++ .../tauri-artcraft/src/utils/sora/mod.rs | 1 + 5 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 crates/desktop/tauri-artcraft/src/utils/sora/initialize_sora_jwt_bearer_token.rs create mode 100644 crates/desktop/tauri-artcraft/src/utils/sora/mod.rs diff --git a/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_manager.rs b/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_manager.rs index 0f4457fa51..63ed2b1282 100644 --- a/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_manager.rs +++ b/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_manager.rs @@ -7,6 +7,7 @@ use openai_sora_client::credentials::SoraCredentials; use openai_sora_client::sentinel_refresh::refresh_sentinel; use std::fs::OpenOptions; use std::io::Write; +use anyhow::anyhow; use openai_sora_client::sentinel_refresh::generate::token::generate_token; #[derive(Clone)] @@ -55,6 +56,7 @@ impl SoraCredentialManager { Ok(creds) } + /// Refresh the sentinel token from Sora's API pub async fn call_sentinel_refresh(&self) -> AnyhowResult { // NB(bt,2025-04-21): Technically we don't need credentials to get a sentinel. let mut creds = self.holder.get_credentials_required()?; diff --git a/crates/desktop/tauri-artcraft/src/threads/sora_session_login_thread.rs b/crates/desktop/tauri-artcraft/src/threads/sora_session_login_thread.rs index 3ec76de582..d86382173b 100644 --- a/crates/desktop/tauri-artcraft/src/threads/sora_session_login_thread.rs +++ b/crates/desktop/tauri-artcraft/src/threads/sora_session_login_thread.rs @@ -10,6 +10,7 @@ use reqwest::Url; use std::fs::OpenOptions; use std::io::Write; use tauri::{AppHandle, Manager, Webview}; +use crate::utils::sora::initialize_sora_jwt_bearer_token::initialize_sora_jwt_bearer_token; pub const LOGIN_WINDOW_NAME: &str = "login_window"; @@ -48,7 +49,7 @@ async fn check_login_window(webview: &Webview, app_data_root: &AppDataRoot) -> A clear_browsing_data_on_test_domain(webview)?; //keep_on_task(webview)?; extract_cookies_to_file(webview, app_data_root)?; - // TODO: Other maintenance tasks ... + //initialize_sora_jwt_bearer_token(app_data_root).await?; // TODO: This only runs once. We need better management. Ok(()) } diff --git a/crates/desktop/tauri-artcraft/src/utils/mod.rs b/crates/desktop/tauri-artcraft/src/utils/mod.rs index 8da89af702..c40841d319 100644 --- a/crates/desktop/tauri-artcraft/src/utils/mod.rs +++ b/crates/desktop/tauri-artcraft/src/utils/mod.rs @@ -3,4 +3,5 @@ pub mod get_url_file_extension; pub mod image; pub mod large_file_transfer; pub mod simple_http_download; -pub mod sora_webview_cookies; \ No newline at end of file +pub mod sora_webview_cookies; +pub mod sora; \ No newline at end of file diff --git a/crates/desktop/tauri-artcraft/src/utils/sora/initialize_sora_jwt_bearer_token.rs b/crates/desktop/tauri-artcraft/src/utils/sora/initialize_sora_jwt_bearer_token.rs new file mode 100644 index 0000000000..cfe593a323 --- /dev/null +++ b/crates/desktop/tauri-artcraft/src/utils/sora/initialize_sora_jwt_bearer_token.rs @@ -0,0 +1,28 @@ +use crate::state::app_dir::AppDataRoot; +use anyhow::anyhow; +use errors::AnyhowResult; +use log::info; +use openai_sora_client::bearer::generate::generate_bearer_with_cookie; + +/// Loading the JWT bearer token for the first time. +pub async fn initialize_sora_jwt_bearer_token(app_data_root: &AppDataRoot) -> AnyhowResult<()> { + if !app_data_root.get_sora_cookie_file_path().exists() { + return Err(anyhow!("Cookie file does not exist")); + } + + if app_data_root.get_sora_bearer_token_file_path().exists() { + return Ok(()); // Bearer token already exists. + } + + let cookie = std::fs::read_to_string(app_data_root.get_sora_cookie_file_path())? + .trim() + .to_string(); + + info!("Requesting initial JWT bearer token..."); + + let bearer = generate_bearer_with_cookie(&cookie).await?; + + std::fs::write(app_data_root.get_sora_bearer_token_file_path(), bearer)?; + + Ok(()) +} diff --git a/crates/desktop/tauri-artcraft/src/utils/sora/mod.rs b/crates/desktop/tauri-artcraft/src/utils/sora/mod.rs new file mode 100644 index 0000000000..689972757f --- /dev/null +++ b/crates/desktop/tauri-artcraft/src/utils/sora/mod.rs @@ -0,0 +1 @@ +pub mod initialize_sora_jwt_bearer_token; \ No newline at end of file