diff --git a/crates/desktop/artcraft/src/lib.rs b/crates/desktop/artcraft/src/lib.rs index f7e246180c..1a68fcef75 100644 --- a/crates/desktop/artcraft/src/lib.rs +++ b/crates/desktop/artcraft/src/lib.rs @@ -32,7 +32,9 @@ use crate::services::fal::commands::set_fal_api_key_command::set_fal_api_key_com use crate::services::fal::state::fal_credential_manager::FalCredentialManager; use crate::services::fal::state::fal_task_queue::FalTaskQueue; use crate::services::fal::threads::fal_task_polling_thread::fal_task_polling_thread; -use crate::services::midjourney::commands::open_midjourney_login_command::open_midjourney_login_command; +use crate::services::midjourney::commands::midjourney_clear_credentials_command::midjourney_clear_credentials_command; +use crate::services::midjourney::commands::midjourney_get_credential_info_command::midjourney_get_credential_info_command; +use crate::services::midjourney::commands::midjourney_open_login_command::midjourney_open_login_command; use crate::services::midjourney::state::midjourney_credential_manager::MidjourneyCredentialManager; use crate::services::sora::commands::check_sora_session_command::check_sora_session_command; use crate::services::sora::commands::open_sora_login_command::open_sora_login_command; @@ -164,7 +166,9 @@ pub fn run() { get_provider_order_command, load_without_cors_command, open_sora_login_command, - open_midjourney_login_command, + midjourney_clear_credentials_command, + midjourney_get_credential_info_command, + midjourney_open_login_command, platform_info_command, set_fal_api_key_command, set_provider_order_command, diff --git a/crates/desktop/artcraft/src/services/midjourney/commands/clear_midjourney_credentials_command.rs b/crates/desktop/artcraft/src/services/midjourney/commands/clear_midjourney_credentials_command.rs deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/crates/desktop/artcraft/src/services/midjourney/commands/midjourney_clear_credentials_command.rs b/crates/desktop/artcraft/src/services/midjourney/commands/midjourney_clear_credentials_command.rs new file mode 100644 index 0000000000..5061d677cc --- /dev/null +++ b/crates/desktop/artcraft/src/services/midjourney/commands/midjourney_clear_credentials_command.rs @@ -0,0 +1,31 @@ +use crate::core::commands::response::shorthand::{Response, SimpleResponse}; +use crate::services::fal::state::fal_credential_manager::FalCredentialManager; +use crate::services::midjourney::state::midjourney_credential_manager::MidjourneyCredentialManager; +use errors::AnyhowResult; +use fal_client::creds::fal_api_key::FalApiKey; +use log::{error, info}; +use serde_derive::Deserialize; +use tauri::State; + +#[tauri::command] +pub async fn midjourney_clear_credentials_command( + creds_manager: State<'_, MidjourneyCredentialManager>, +) -> SimpleResponse { + info!("midjourney_clear_credentials_command called"); + + clear_creds(&creds_manager) + .map_err(|err| { + error!("Error clearing creds: {:?}", err); + "error clearing creds" + })?; + + Ok(().into()) +} + +fn clear_creds( + creds: &MidjourneyCredentialManager, +) -> AnyhowResult<()> { + creds.clear_credentials()?; + creds.persist_to_disk()?; + Ok(()) +} diff --git a/crates/desktop/artcraft/src/services/midjourney/commands/midjourney_get_credential_info_command.rs b/crates/desktop/artcraft/src/services/midjourney/commands/midjourney_get_credential_info_command.rs new file mode 100644 index 0000000000..fb41cc3289 --- /dev/null +++ b/crates/desktop/artcraft/src/services/midjourney/commands/midjourney_get_credential_info_command.rs @@ -0,0 +1,53 @@ +use crate::core::commands::response::shorthand::{Response, ResponseOrErrorMessage}; +use crate::core::commands::response::success_response_wrapper::SerializeMarker; +use crate::services::fal::state::fal_credential_manager::FalCredentialManager; +use crate::services::midjourney::state::midjourney_credential_manager::MidjourneyCredentialManager; +use errors::AnyhowResult; +use log::{error, info}; +use serde_derive::Serialize; +use tauri::State; + +#[derive(Serialize)] +pub struct MidjourneyGetCredentialInfoResponse { + pub maybe_email: Option, + pub can_clear_state: bool, +} + +impl SerializeMarker for MidjourneyGetCredentialInfoResponse {} + +#[tauri::command] +pub async fn midjourney_get_credential_info_command( + creds_manager: State<'_, MidjourneyCredentialManager>, +) -> ResponseOrErrorMessage { + info!("midjourney_get_credential_info_command called"); + + let info = get_info(&creds_manager) + .map_err(|err| { + error!("Error getting info: {:?}", err); + "error getting info" + })?; + + Ok(info.into()) +} + +fn get_info( + creds: &MidjourneyCredentialManager, +) -> AnyhowResult { + let mut can_clear_state = true; + + let maybe_cookies = creds.maybe_copy_cookie_store()?; + let maybe_user_info = creds.maybe_copy_user_info()?; + + if maybe_cookies.is_none() && maybe_user_info.is_none() { + can_clear_state = false; + } + + let maybe_email = maybe_user_info + .map(|info| info.email.clone()) + .flatten(); + + Ok(MidjourneyGetCredentialInfoResponse { + maybe_email, + can_clear_state, + }) +} diff --git a/crates/desktop/artcraft/src/services/midjourney/commands/open_midjourney_login_command.rs b/crates/desktop/artcraft/src/services/midjourney/commands/midjourney_open_login_command.rs similarity index 92% rename from crates/desktop/artcraft/src/services/midjourney/commands/open_midjourney_login_command.rs rename to crates/desktop/artcraft/src/services/midjourney/commands/midjourney_open_login_command.rs index 6e6304421d..b774410195 100644 --- a/crates/desktop/artcraft/src/services/midjourney/commands/open_midjourney_login_command.rs +++ b/crates/desktop/artcraft/src/services/midjourney/commands/midjourney_open_login_command.rs @@ -7,12 +7,12 @@ use log::{error, info}; use tauri::{AppHandle, State}; #[tauri::command] -pub async fn open_midjourney_login_command( +pub async fn midjourney_open_login_command( app: AppHandle, app_data_root: State<'_, AppDataRoot>, mj_creds_manager: State<'_, MidjourneyCredentialManager>, ) -> Result { - info!("open_midjourney_command called"); + info!("midjourney_open_login_command called"); do_open_login(&app, &app_data_root, &mj_creds_manager) .await diff --git a/crates/desktop/artcraft/src/services/midjourney/commands/mod.rs b/crates/desktop/artcraft/src/services/midjourney/commands/mod.rs index c69985a1b3..b31d0a1ed6 100644 --- a/crates/desktop/artcraft/src/services/midjourney/commands/mod.rs +++ b/crates/desktop/artcraft/src/services/midjourney/commands/mod.rs @@ -1,2 +1,3 @@ -pub mod open_midjourney_login_command; -pub mod clear_midjourney_credentials_command; \ No newline at end of file +pub mod midjourney_clear_credentials_command; +pub mod midjourney_get_credential_info_command; +pub mod midjourney_open_login_command; \ No newline at end of file diff --git a/crates/desktop/artcraft/src/services/midjourney/state/midjourney_credential_manager.rs b/crates/desktop/artcraft/src/services/midjourney/state/midjourney_credential_manager.rs index ec2e1da450..91523919ac 100644 --- a/crates/desktop/artcraft/src/services/midjourney/state/midjourney_credential_manager.rs +++ b/crates/desktop/artcraft/src/services/midjourney/state/midjourney_credential_manager.rs @@ -94,6 +94,18 @@ impl MidjourneyCredentialManager { } } + pub fn clear_credentials(&self) -> anyhow::Result<()> { + match self.cookies.write() { + Err(err) => return Err(anyhow::anyhow!("Failed to acquire write lock: {:?}", err)), + Ok(mut store) => *store = None, + } + match self.user_info.write() { + Err(err) => return Err(anyhow::anyhow!("Failed to acquire write lock: {:?}", err)), + Ok(mut info) => *info = None, + } + Ok(()) + } + pub fn persist_to_disk(&self) -> anyhow::Result<()> { let maybe_cookies = match self.cookies.read() { Err(err) => return Err(anyhow::anyhow!("Failed to acquire read lock: {:?}", err)),