diff --git a/client/src/modes/handlers/event.rs b/client/src/modes/handlers/event.rs index 9f511de..3e4f392 100644 --- a/client/src/modes/handlers/event.rs +++ b/client/src/modes/handlers/event.rs @@ -229,7 +229,7 @@ impl EventHandler { UiContext::Login => { let login_action_message = match index { 0 => { - login::initiate_login(login_state, app_state, self.login_result_sender.clone()) + login::initiate_login(login_state, app_state, self.auth_client.clone(), self.login_result_sender.clone()) }, 1 => login::back_to_main(login_state, app_state, buffer_state).await, _ => "Invalid Login Option".to_string(), @@ -239,7 +239,7 @@ impl EventHandler { UiContext::Register => { let register_action_message = match index { 0 => { - register::initiate_registration(register_state, app_state, self.register_result_sender.clone()) + register::initiate_registration(register_state, app_state, self.auth_client.clone(), self.register_result_sender.clone()) }, 1 => register::back_to_login(register_state, app_state, buffer_state).await, _ => "Invalid Login Option".to_string(), diff --git a/client/src/services/auth.rs b/client/src/services/auth.rs index 8fff97b..97f1bc0 100644 --- a/client/src/services/auth.rs +++ b/client/src/services/auth.rs @@ -7,6 +7,7 @@ use common::proto::multieko2::auth::{ }; use anyhow::{Context, Result}; +#[derive(Clone)] pub struct AuthClient { client: AuthServiceClient, } diff --git a/client/src/tui/functions/common/login.rs b/client/src/tui/functions/common/login.rs index f083051..52f0e37 100644 --- a/client/src/tui/functions/common/login.rs +++ b/client/src/tui/functions/common/login.rs @@ -146,6 +146,7 @@ pub async fn back_to_main( pub fn initiate_login( login_state: &LoginState, app_state: &mut AppState, + mut auth_client: AuthClient, sender: mpsc::Sender, ) -> String { let username = login_state.username.clone(); @@ -166,17 +167,13 @@ pub fn initiate_login( // 3. Spawn the login task spawn(async move { - let login_outcome = match AuthClient::new().await { - Ok(mut auth_client) => { - match auth_client.login(username.clone(), password).await - .with_context(|| format!("Spawned login task failed for identifier: {}", username)) - { - Ok(response) => LoginResult::Success(response), - Err(e) => LoginResult::Failure(format!("{}", e)), - } - } - Err(e) => LoginResult::ConnectionError(format!("Failed to create AuthClient: {}", e)), - }; + // Use the passed-in (and moved) auth_client directly + let login_outcome = match auth_client.login(username.clone(), password).await + .with_context(|| format!("Spawned login task failed for identifier: {}", username)) + { + Ok(response) => LoginResult::Success(response), + Err(e) => LoginResult::Failure(format!("{}", e)), + }; // Send result back to the main UI thread if let Err(e) = sender.send(login_outcome).await { error!("Failed to send login result: {}", e); diff --git a/client/src/tui/functions/common/register.rs b/client/src/tui/functions/common/register.rs index abf5bf0..bc4699a 100644 --- a/client/src/tui/functions/common/register.rs +++ b/client/src/tui/functions/common/register.rs @@ -65,6 +65,7 @@ pub async fn back_to_login( pub fn initiate_registration( register_state: &RegisterState, app_state: &mut AppState, + mut auth_client: AuthClient, sender: mpsc::Sender, ) -> String { // Clone necessary data @@ -87,25 +88,18 @@ pub fn initiate_registration( // 3. Spawn the registration task spawn(async move { - let register_outcome = match AuthClient::new().await { - Ok(mut auth_client) => { - // Handle optional fields correctly for the gRPC call - let password_opt = if password.is_empty() { None } else { Some(password) }; - let password_conf_opt = if password_confirmation.is_empty() { None } else { Some(password_confirmation) }; - let role_opt = if role.is_empty() { None } else { Some(role) }; - - match auth_client.register(username.clone(), email, password_opt, password_conf_opt, role_opt).await - .with_context(|| format!("Spawned register task failed for username: {}", username)) - { - Ok(response) => RegisterResult::Success(response), - Err(e) => RegisterResult::Failure(format!("{}", e)), - } - } - Err(e) => RegisterResult::ConnectionError(format!("Failed to create AuthClient: {}", e)), + let password_opt = if password.is_empty() { None } else { Some(password) }; + let password_conf_opt = if password_confirmation.is_empty() { None } else { Some(password_confirmation) }; + let role_opt = if role.is_empty() { None } else { Some(role) }; + let register_outcome = match auth_client.register(username.clone(), email, password_opt, password_conf_opt, role_opt).await + .with_context(|| format!("Spawned register task failed for username: {}", username)) + { + Ok(response) => RegisterResult::Success(response), + Err(e) => RegisterResult::Failure(format!("{}", e)), }; // Send result back to the main UI thread if let Err(e) = sender.send(register_outcome).await { - error!("Failed to send registration result: {}", e); + error!("Failed to send registration result: {}", e); } });