@smbcloud / cli / commits / 17bbc00

fix is logged in checking

keypair34 committed Sep 20, 2025 at 21:58 UTC 17bbc009e11d7d619ad8010ca7f25d5fb1bacc6b
8 files changed +55 -33
crates/cli/src/account/login/process.rs
+19 -9
@@ -1,11 +1,13 @@
1 use {
2 - crate::account::signup::signup_with_email,
3 - crate::account::{
4 - lib::{authorize_github, is_logged_in, save_token},
5 - signup::{do_signup, SignupMethod},
2 + crate::{
3 + account::{
4 + lib::{authorize_github, save_token},
5 + signup::{do_signup, signup_with_email, SignupMethod},
6 + },
7 + cli::CommandResult,
8 + token::is_logged_in::is_logged_in as is_logged_in_async,
9 + ui::{fail_message, fail_symbol, succeed_message, succeed_symbol},
10 },
7 - crate::cli::CommandResult,
8 - crate::ui::{fail_message, fail_symbol, succeed_message, succeed_symbol},
11 anyhow::{anyhow, Result},
12 console::style,
13 dialoguer::{console::Term, theme::ColorfulTheme, Confirm, Input, Password, Select},
@@ -30,9 +32,17 @@ use {
32 spinners::Spinner,
33 };
34
33 -pub async fn process_login(env: Environment) -> Result<CommandResult> {
34 - // Check if token file exists
35 - if is_logged_in(env) {
35 +pub async fn process_login(env: Environment, is_logged_in: Option<bool>) -> Result<CommandResult> {
36 + let should_continue = match is_logged_in {
37 + Some(is_logged_id) => !is_logged_id,
38 + None => {
39 + // Check if logged in
40 + let logged_in = is_logged_in_async(env).await?;
41 + !logged_in
42 + }
43 + };
44 +
45 + if !should_continue {
46 return Ok(CommandResult {
47 spinner: Spinner::new(
48 spinners::Spinners::SimpleDotsScrolling,
crates/cli/src/account/mod.rs
+1 -1
@@ -15,7 +15,7 @@ use smbcloud_network::environment::Environment;
15 pub async fn process_account(env: Environment, commands: Commands) -> Result<CommandResult> {
16 match commands {
17 Commands::Signup {} => process_signup(env).await,
18 - Commands::Login {} => process_login(env).await,
18 + Commands::Login {} => process_login(env, None).await,
19 Commands::Logout {} => process_logout(env).await,
20 Commands::Forgot {} => process_forgot(env).await,
21 }
crates/cli/src/deploy/process_deploy.rs
+6 -4
@@ -1,6 +1,6 @@
1 use {
2 crate::{
3 - account::{lib::is_logged_in, login::process_login},
3 + account::login::process_login,
4 cli::CommandResult,
5 deploy::{
6 config::{check_config, check_project},
@@ -8,7 +8,7 @@ use {
8 git::remote_deployment_setup,
9 remote_messages::{build_next_app, start_server},
10 },
11 - token::get_smb_token::get_smb_token,
11 + token::{get_smb_token::get_smb_token, is_logged_in::is_logged_in},
12 ui::{fail_message, succeed_message, succeed_symbol},
13 },
14 anyhow::{anyhow, Result},
@@ -28,8 +28,10 @@ use {
28
29 pub async fn process_deploy(env: Environment) -> Result<CommandResult> {
30 // Check credentials.
31 - if !is_logged_in(env) {
32 - let _ = process_login(env).await;
31 + let is_logged_in = is_logged_in(env).await?;
32 +
33 + if !is_logged_in {
34 + let _ = process_login(env, Some(is_logged_in)).await?;
35 }
36
37 // Get current token
crates/cli/src/main.rs
+1 -1
@@ -132,7 +132,7 @@ async fn run() -> Result<CommandResult> {
132 Some(Commands::Init {}) => process_project_init(cli.environment).await,
133 Some(Commands::Deploy {}) => process_deploy(cli.environment).await,
134 Some(Commands::Account { command }) => process_account(cli.environment, command).await,
135 - Some(Commands::Login {}) => process_login(cli.environment).await,
135 + Some(Commands::Login {}) => process_login(cli.environment, None).await,
136 Some(Commands::Logout {}) => process_logout(cli.environment).await,
137 Some(Commands::Project { command }) => process_project(cli.environment, command).await,
138 None => process_deploy(cli.environment).await,
crates/cli/src/project/crud_create.rs
+5 -4
@@ -1,6 +1,6 @@
1 -use crate::token::get_smb_token::get_smb_token;
1 +use crate::token::{get_smb_token::get_smb_token, is_logged_in::is_logged_in};
2 use crate::{
3 - account::{lib::is_logged_in, login::process_login},
3 + account::login::process_login,
4 cli::CommandResult,
5 ui::{fail_message, succeed_message, succeed_symbol},
6 };
@@ -14,8 +14,9 @@ use smbcloud_networking_project::crud_project_create::create_project;
14 use spinners::Spinner;
15
16 pub async fn process_project_init(env: Environment) -> Result<CommandResult> {
17 - if !is_logged_in(env) {
18 - let _ = process_login(env).await;
17 + let is_logged_in = is_logged_in(env).await?;
18 + if !is_logged_in {
19 + let _ = process_login(env, Some(is_logged_in)).await;
20 }
21
22 let project_name = match Input::<String>::with_theme(&ColorfulTheme::default())
crates/cli/src/project/crud_update.rs
+5 -4
@@ -1,4 +1,4 @@
1 -use crate::token::get_smb_token::get_smb_token;
1 +use crate::token::{get_smb_token::get_smb_token, is_logged_in::is_logged_in};
2 use anyhow::{anyhow, Result};
3 use dialoguer::{theme::ColorfulTheme, Input};
4 use smbcloud_network::environment::Environment;
@@ -8,7 +8,7 @@ use smbcloud_networking_project::{
8 use spinners::Spinner;
9
10 use crate::{
11 - account::{lib::is_logged_in, login::process_login},
11 + account::login::process_login,
12 cli::CommandResult,
13 ui::{description, succeed_message, succeed_symbol},
14 };
@@ -18,8 +18,9 @@ pub async fn process_project_update_description(
18 project_id: String,
19 ) -> Result<CommandResult> {
20 // Check credentials.
21 - if !is_logged_in(env) {
22 - let _ = process_login(env).await;
21 + let is_logged_in = is_logged_in(env).await?;
22 + if !is_logged_in {
23 + let _ = process_login(env, Some(is_logged_in)).await;
24 }
25
26 let access_token = get_smb_token(env)?;
crates/cli/src/token/is_logged_in.rs
+17 -9
@@ -1,12 +1,20 @@
1 -pub async fn is_logged_in(env: Environment) -> bool {
2 - // Check if token file exists
3 - if !smb_token_file_path(env).is_some() {
4 - return false;
5 - }
1 +use {
2 + crate::token::get_smb_token::get_smb_token, smbcloud_model::error_codes::ErrorResponse,
3 + smbcloud_network::environment::Environment, smbcloud_networking_account::me::me,
4 + tracing::debug,
5 +};
6 +
7 +pub async fn is_logged_in(env: Environment) -> Result<bool, ErrorResponse> {
8 // Check if token is valid
7 - let access_token = get_smb_token(env)?;
8 - match me(env, access_token).await {
9 - Ok(_) => true,
10 - Err(_) => false,
9 + let access_token = match get_smb_token(env) {
10 + Ok(token) => token,
11 + Err(_) => return Ok(false),
12 + };
13 + match me(env, &access_token).await {
14 + Ok(user) => {
15 + debug!("Authorized as: {:?}", user.id);
16 + Ok(true)
17 + }
18 + Err(_) => Ok(false),
19 }
20 }
crates/cli/src/token/mod.rs
+1 -1
@@ -1,3 +1,3 @@
1 -//pub(crate) mod is_logged_in;
1 pub(crate) mod get_smb_token;
2 +pub(crate) mod is_logged_in;
3 pub(crate) mod smb_token_file_path;