diff --git a/crates/desktop/artcraft/src/threads/mod.rs b/crates/desktop/artcraft/src/threads/mod.rs index 2cdf48823b..eaae9fdf2e 100644 --- a/crates/desktop/artcraft/src/threads/mod.rs +++ b/crates/desktop/artcraft/src/threads/mod.rs @@ -1,4 +1,3 @@ pub mod discord_presence_thread; pub mod main_window_thread; -pub mod sora_login_thread; pub mod sora_task_polling_thread; \ No newline at end of file diff --git a/crates/desktop/artcraft/src/threads/sora_login_thread/mod.rs b/crates/desktop/artcraft/src/threads/sora_login_thread/mod.rs deleted file mode 100644 index 68b7fbf025..0000000000 --- a/crates/desktop/artcraft/src/threads/sora_login_thread/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod sora_login_thread; \ No newline at end of file diff --git a/crates/desktop/artcraft/src/windows/sora_login_window/clear_browsing_on_test_domain.rs b/crates/desktop/artcraft/src/windows/sora_login_window/clear_browsing_on_test_domain.rs new file mode 100644 index 0000000000..54cc5403d8 --- /dev/null +++ b/crates/desktop/artcraft/src/windows/sora_login_window/clear_browsing_on_test_domain.rs @@ -0,0 +1,20 @@ +use anyhow::anyhow; +use log::info; +use tauri::Webview; +use errors::AnyhowResult; + +// This is just so we have a way to clear browsing data while debugging / building. +pub fn clear_browsing_data_on_test_domain(webview: &Webview) -> AnyhowResult<()> { + let url = webview.url()?; + let hostname= url.host() + .ok_or(anyhow!("no host in url"))? + .to_string(); + match hostname.as_str() { + "storyteller.ai" => { + info!("Clearing all browsing data..."); + webview.clear_all_browsing_data()?; + } + _ => {} + } + Ok(()) +} diff --git a/crates/desktop/artcraft/src/windows/sora_login_window/keep_on_login_domains.rs b/crates/desktop/artcraft/src/windows/sora_login_window/keep_on_login_domains.rs new file mode 100644 index 0000000000..9c485ae030 --- /dev/null +++ b/crates/desktop/artcraft/src/windows/sora_login_window/keep_on_login_domains.rs @@ -0,0 +1,28 @@ +use crate::windows::sora_login_window::open_sora_login_window::SORA_LOGIN_URL; +use anyhow::anyhow; +use errors::AnyhowResult; +use log::info; +use tauri::Webview; + +// NB: Probably best not to use this. +pub fn keep_on_login_domains(webview: &Webview) -> AnyhowResult<()> { + let url = webview.url()?; + let hostname= url.host() + .ok_or(anyhow!("no host in url"))? + .to_string(); + match hostname.as_str() { + "auth.openai.com" => {}, + "openai.com" => {}, + "sora.com" => {}, + // Third party SSO + "accounts.google.com" => {}, + "accounts.youtube.com" => {}, + "login.live.com" => {}, + "appleid.apple.com" => {}, + _ => { + info!("Non login hostname: {}", hostname); + webview.navigate(SORA_LOGIN_URL.clone())?; + } + } + Ok(()) +} diff --git a/crates/desktop/artcraft/src/windows/sora_login_window/mod.rs b/crates/desktop/artcraft/src/windows/sora_login_window/mod.rs index dc86251322..85aca611f1 100644 --- a/crates/desktop/artcraft/src/windows/sora_login_window/mod.rs +++ b/crates/desktop/artcraft/src/windows/sora_login_window/mod.rs @@ -1 +1,4 @@ -pub mod open_sora_login_window; \ No newline at end of file +pub mod clear_browsing_on_test_domain; +pub mod keep_on_login_domains; +pub mod open_sora_login_window; +pub mod sora_login_thread; diff --git a/crates/desktop/artcraft/src/windows/sora_login_window/open_sora_login_window.rs b/crates/desktop/artcraft/src/windows/sora_login_window/open_sora_login_window.rs index 2e19df5876..d017bdd2a2 100644 --- a/crates/desktop/artcraft/src/windows/sora_login_window/open_sora_login_window.rs +++ b/crates/desktop/artcraft/src/windows/sora_login_window/open_sora_login_window.rs @@ -1,7 +1,7 @@ use crate::state::data_dir::app_data_root::AppDataRoot; use crate::state::sora::sora_credential_manager::SoraCredentialManager; -use crate::threads::sora_login_thread::sora_login_thread::{sora_login_thread, LOGIN_WINDOW_NAME, SORA_LOGIN_URL}; use crate::utils::clear_all_webview_cookies::clear_all_webview_cookies; +use crate::windows::sora_login_window::sora_login_thread::sora_login_thread; use anyhow::anyhow; use errors::AnyhowResult; use once_cell::sync::Lazy; @@ -9,6 +9,9 @@ use reqwest::Url; use std::time::Duration; use tauri::{AppHandle, Manager, WebviewUrl, WebviewWindowBuilder}; +/// Name of the window +pub const LOGIN_WINDOW_NAME: &str = "login_window"; + pub const START_URL_STR: &str = "https://google.com"; pub static START_URL: Lazy = Lazy::new(|| { @@ -21,6 +24,18 @@ pub static SORA_HOMEPAGE_URL : Lazy = Lazy::new(|| { Url::parse(SORA_HOMEPAGE_URL_STR).expect("URL should parse") }); +pub const SORA_LOGIN_URL_STR: &str = "https://chatgpt.com/auth/login?next=%2Fsora%2F"; + +pub static SORA_LOGIN_URL: Lazy = Lazy::new(|| { + Url::parse(SORA_LOGIN_URL_STR).expect("URL should parse") +}); + +//pub const SORA_ROOT_URL_STR: &str = "https://sora.com/"; +// +//pub static SORA_ROOT_URL: Lazy = Lazy::new(|| { +// Url::parse(SORA_ROOT_URL_STR).expect("URL should parse") +//}); + pub async fn open_sora_login_window( app: &AppHandle, app_data_root: &AppDataRoot, diff --git a/crates/desktop/artcraft/src/threads/sora_login_thread/sora_login_thread.rs b/crates/desktop/artcraft/src/windows/sora_login_window/sora_login_thread.rs similarity index 70% rename from crates/desktop/artcraft/src/threads/sora_login_thread/sora_login_thread.rs rename to crates/desktop/artcraft/src/windows/sora_login_window/sora_login_thread.rs index 062561ad2b..a78269ddbb 100644 --- a/crates/desktop/artcraft/src/threads/sora_login_thread/sora_login_thread.rs +++ b/crates/desktop/artcraft/src/windows/sora_login_window/sora_login_thread.rs @@ -3,6 +3,7 @@ use crate::state::sora::sora_credential_holder::SoraCredentialHolder; use crate::state::sora::sora_credential_manager::SoraCredentialManager; use crate::utils::cookies::sora_webview_cookies::get_all_sora_cookies_as_string; use crate::utils::sora::initialize_sora_jwt_bearer_token::initialize_sora_jwt_bearer_token; +use crate::windows::sora_login_window::open_sora_login_window::LOGIN_WINDOW_NAME; use anyhow::anyhow; use chrono::{DateTime, NaiveDateTime, TimeDelta}; use errors::AnyhowResult; @@ -18,21 +19,6 @@ use std::io::Write; use std::ops::Sub; use tauri::{AppHandle, Manager, Webview}; -pub const LOGIN_WINDOW_NAME: &str = "login_window"; - -//pub const SORA_LOGIN_URL_STR: &str = "https://sora.com/auth/login?callback_path=/"; -pub const SORA_LOGIN_URL_STR: &str = "https://chatgpt.com/auth/login?next=%2Fsora%2F"; - -pub static SORA_LOGIN_URL: Lazy = Lazy::new(|| { - Url::parse(SORA_LOGIN_URL_STR).expect("URL should parse") -}); - -pub const SORA_ROOT_URL_STR: &str = "https://sora.com/"; - -pub static SORA_ROOT_URL: Lazy = Lazy::new(|| { - Url::parse(SORA_ROOT_URL_STR).expect("URL should parse") -}); - pub async fn sora_login_thread( app: AppHandle, app_data_root: AppDataRoot, @@ -68,48 +54,9 @@ async fn check_login_window( app_data_root: &AppDataRoot, sora_credential_manager: &SoraCredentialManager, ) -> AnyhowResult<()> { - clear_browsing_data_on_test_domain(webview)?; + //clear_browsing_data_on_test_domain(webview)?; //keep_on_task(webview)?; extract_cookies_to_file(webview, app_data_root, sora_credential_manager).await?; - //initialize_sora_jwt_bearer_token(app_data_root).await?; // TODO: This only runs once. We need better management. - Ok(()) -} - -fn keep_on_task(webview: &Webview) -> AnyhowResult<()> { - let url = webview.url()?; - let hostname= url.host() - .ok_or(anyhow!("no host in url"))? - .to_string(); - match hostname.as_str() { - "auth.openai.com" => {}, - "openai.com" => {}, - "sora.com" => {}, - // Third party SSO - "accounts.google.com" => {}, - "accounts.youtube.com" => {}, - "login.live.com" => {}, - "appleid.apple.com" => {}, - _ => { - info!("Non login hostname: {}", hostname); - webview.navigate(SORA_LOGIN_URL.clone())?; - } - } - Ok(()) -} - -/// This is just so we have a way to clear browsing data. -fn clear_browsing_data_on_test_domain(webview: &Webview) -> AnyhowResult<()> { - let url = webview.url()?; - let hostname= url.host() - .ok_or(anyhow!("no host in url"))? - .to_string(); - match hostname.as_str() { - "storyteller.ai" => { - info!("Clearing all browsing data..."); - webview.clear_all_browsing_data()?; - } - _ => {} - } Ok(()) }