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;