@smbcloud / cli / commits / f410cd1

get_smb_token is not async

keypair34 committed Sep 20, 2025 at 20:31 UTC f410cd14dffb7b329b031b6bd5a03172440d4621
16 files changed +49 -72
crates/cli/src/account/lib.rs
+22 -20
@@ -1,25 +1,27 @@
1 -use crate::token::smb_token_file_path;
2 -use anyhow::{anyhow, Result};
3 -use console::style;
4 -use log::debug;
5 -use regex::Regex;
6 -use reqwest::{Client, Response, StatusCode};
7 -use smbcloud_model::account::SmbAuthorization;
8 -use smbcloud_network::environment::Environment;
9 -use smbcloud_networking::{
10 - constants::{
11 - GH_OAUTH_CLIENT_ID, GH_OAUTH_REDIRECT_HOST, GH_OAUTH_REDIRECT_PORT, PATH_AUTHORIZE,
1 +use {
2 + crate::token::smb_token_file_path,
3 + anyhow::{anyhow, Result},
4 + console::style,
5 + log::debug,
6 + regex::Regex,
7 + reqwest::{Client, Response, StatusCode},
8 + smbcloud_model::account::SmbAuthorization,
9 + smbcloud_network::environment::Environment,
10 + smbcloud_networking::{
11 + constants::{
12 + GH_OAUTH_CLIENT_ID, GH_OAUTH_REDIRECT_HOST, GH_OAUTH_REDIRECT_PORT, PATH_AUTHORIZE,
13 + },
14 + smb_base_url_builder,
15 },
13 - smb_base_url_builder,
14 -};
15 -use spinners::Spinner;
16 -use std::{
17 - fs::{create_dir_all, OpenOptions},
18 - io::{BufRead, BufReader, Write},
19 - net::{TcpListener, TcpStream},
20 - sync::mpsc::{self, Receiver, Sender},
16 + spinners::Spinner,
17 + std::{
18 + fs::{create_dir_all, OpenOptions},
19 + io::{BufRead, BufReader, Write},
20 + net::{TcpListener, TcpStream},
21 + sync::mpsc::{self, Receiver, Sender},
22 + },
23 + url_builder::URLBuilder,
24 };
22 -use url_builder::URLBuilder;
25
26 pub async fn authorize_github(env: &Environment) -> Result<SmbAuthorization> {
27 // Spin up a simple localhost server to listen for the GitHub OAuth callback
crates/cli/src/account/logout/mod.rs
+1 -1
@@ -66,7 +66,7 @@ pub async fn process_logout(env: Environment) -> Result<CommandResult> {
66 }
67
68 async fn do_process_logout(env: Environment) -> Result<()> {
69 - let token = get_smb_token(env).await?;
69 + let token = get_smb_token(env)?;
70
71 let response = Client::new()
72 .delete(build_smb_logout_url(env))
crates/cli/src/account/me/mod.rs
+1 -1
@@ -49,7 +49,7 @@ pub async fn process_me(env: Environment) -> Result<CommandResult> {
49 spinners::Spinners::SimpleDotsScrolling,
50 succeed_message("Loading"),
51 );
52 - let token = get_smb_token(env).await?;
52 + let token = get_smb_token(env)?;
53 match me(env, &token).await {
54 Ok(user) => {
55 spinner.stop_and_persist(&succeed_symbol(), succeed_message("Loaded."));
crates/cli/src/deploy/process_deploy.rs
+1 -1
@@ -33,7 +33,7 @@ pub async fn process_deploy(env: Environment) -> Result<CommandResult> {
33 }
34
35 // Get current token
36 - let access_token = get_smb_token(env).await?;
36 + let access_token = get_smb_token(env)?;
37
38 // Check config.
39 let config = check_config(env).await?;
crates/cli/src/deploy/setup_create_new_project.rs
+1 -1
@@ -73,7 +73,7 @@ pub(crate) async fn create_new_project(
73 }
74 };
75
76 - let access_token = match get_smb_token(env).await {
76 + let access_token = match get_smb_token(env) {
77 Ok(token) => token,
78 Err(_) => {
79 return Err(ErrorResponse::Error {
crates/cli/src/deploy/setup_project.rs
+1 -1
@@ -39,7 +39,7 @@ pub(crate) async fn setup_project(env: Environment) -> Result<Config, ErrorRespo
39 });
40 }
41
42 - let access_token = match get_smb_token(env).await {
42 + let access_token = match get_smb_token(env) {
43 Ok(token) => token,
44 Err(_) => {
45 return Err(ErrorResponse::Error {
crates/cli/src/project/crud_create.rs
+1 -1
@@ -53,7 +53,7 @@ pub async fn process_project_init(env: Environment) -> Result<CommandResult> {
53 style("Creating a project...").green().bold().to_string(),
54 );
55
56 - let access_token = get_smb_token(env).await?;
56 + let access_token = get_smb_token(env)?;
57 match create_project(
58 env,
59 access_token,
crates/cli/src/project/crud_delete.rs
+1 -1
@@ -32,7 +32,7 @@ pub async fn process_project_delete(env: Environment, id: String) -> Result<Comm
32 msg: succeed_message("Cancelled."),
33 });
34 }
35 - let access_token = get_smb_token(env).await?;
35 + let access_token = get_smb_token(env)?;
36 match delete_project(env, access_token, id).await {
37 Ok(_) => Ok(CommandResult {
38 spinner,
crates/cli/src/project/crud_read.rs
+3 -3
@@ -46,7 +46,7 @@ pub async fn process_project_list(env: Environment) -> Result<CommandResult> {
46 spinners::Spinners::SimpleDotsScrolling,
47 succeed_message("Loading"),
48 );
49 - let token = get_smb_token(env).await?;
49 + let token = get_smb_token(env)?;
50 match get_projects(env, token).await {
51 Ok(projects) => {
52 spinner.stop_and_persist(&succeed_symbol(), succeed_message("Loaded."));
@@ -81,7 +81,7 @@ pub async fn process_project_show(env: Environment, id: String) -> Result<Comman
81 spinners::Spinners::SimpleDotsScrolling,
82 succeed_message("Loading"),
83 );
84 - let access_token = get_smb_token(env).await?;
84 + let access_token = get_smb_token(env)?;
85 match get_project(env, access_token, id).await {
86 Ok(project) => {
87 spinner.stop_and_persist(&succeed_symbol(), succeed_message("Loaded."));
@@ -134,7 +134,7 @@ pub(crate) fn show_project_detail(project: &Project) {
134 }
135
136 pub(crate) async fn process_project_use(env: Environment, id: String) -> Result<CommandResult> {
137 - let access_token = get_smb_token(env).await?;
137 + let access_token = get_smb_token(env)?;
138 let project = get_project(env, access_token, id).await?;
139
140 let config = Config {
crates/cli/src/project/crud_update.rs
+1 -1
@@ -22,7 +22,7 @@ pub async fn process_project_update_description(
22 let _ = process_login(env).await;
23 }
24
25 - let access_token = get_smb_token(env).await?;
25 + let access_token = get_smb_token(env)?;
26 let project = get_project(env, access_token.clone(), project_id.clone()).await?;
27
28 if let Some(project_description) = project.description {
crates/cli/src/project/deployment.rs
+2 -2
@@ -20,7 +20,7 @@ pub(crate) async fn process_deployment(
20 // Load project id from .smb/config.toml
21 let config = check_config(env).await?;
22
23 - let access_token = get_smb_token(env).await?;
23 + let access_token = get_smb_token(env)?;
24
25 check_project(env, &access_token, config.project.id).await?;
26
@@ -33,7 +33,7 @@ pub(crate) async fn process_deployment(
33 show_deployment_detail(&deployment);
34 } else {
35 // List all deployments for the project
36 - let access_token = get_smb_token(env).await?;
36 + let access_token = get_smb_token(env)?;
37 let deployments = get_deployments(env, access_token, config.project.id).await?;
38 spinner.stop_and_persist(&succeed_symbol(), succeed_message("Load all deployments"));
39 show_project_deployments(&deployments);
crates/cli/src/token/is_logged_in.rs new
+12
@@ -0,0 +1,12 @@
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 + }
6 + // 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,
11 + }
12 +}
crates/cli/src/token/mod.rs
+2 -13
@@ -6,9 +6,9 @@ use {
6 std::path::{Path, PathBuf},
7 };
8
9 -pub(crate) mod test_token_validity;
9 +//pub(crate) mod is_logged_in;
10
11 -pub async fn get_smb_token(env: Environment) -> Result<String> {
11 +pub fn get_smb_token(env: Environment) -> Result<String> {
12 if let Some(path) = smb_token_file_path(env) {
13 std::fs::read_to_string(path).map_err(|e| {
14 debug!("Error while reading token: {}", &e);
@@ -35,14 +35,3 @@ pub fn smb_token_file_path(env: Environment) -> Option<PathBuf> {
35 }
36 }
37 }
38 -
39 -pub fn remove_smb_token(env: Environment) -> Result<()> {
40 - if let Some(path) = smb_token_file_path(env) {
41 - std::fs::remove_file(path).map_err(|e| {
42 - debug!("Error while removing token: {}", &e);
43 - anyhow!("Error while removing token. Are you logged in?")
44 - })
45 - } else {
46 - Err(anyhow!("Failed to get home directory. Are you logged in?"))
47 - }
48 -}
crates/cli/src/token/test_token_validity.rs deleted
-25
@@ -1,25 +0,0 @@
1 -use crate::token::{get_smb_token, smb_token_file_path};
2 -use anyhow::{anyhow, Result};
3 -use dialoguer::{theme::ColorfulTheme, Confirm};
4 -use reqwest::{Client, StatusCode};
5 -use smbcloud_network::environment::Environment;
6 -use smbcloud_networking::{constants::PATH_USERS_SIGN_OUT, smb_base_url_builder};
7 -use spinners::Spinner;
8 -use std::fs;
9 -
10 -async fn do_process_logout(env: Environment) -> Result<()> {
11 - let token = get_smb_token(env).await?;
12 -
13 - let response = Client::new()
14 - .delete(build_smb_logout_url(env))
15 - .header("Authorization", token)
16 - .header("Accept", "application/json")
17 - .header("Content-Type", "application/x-www-form-urlencoded")
18 - .send()
19 - .await?;
20 -
21 - match response.status() {
22 - StatusCode::OK => Ok(()),
23 - _ => Err(anyhow!("Failed to logout.")),
24 - }
25 -}
crates/smbcloud-networking/src/lib.rs
-1
@@ -1,5 +1,4 @@
1 pub mod constants;
2 -pub mod valid_token;
2
3 use {
4 constants::{SMB_CLIENT_ID, SMB_CLIENT_SECRET},
crates/smbcloud-networking/src/valid_token.rs