@smbcloud / cli / commits / 173287a

add request login

Seto committed Sep 26, 2025 at 10:50 UTC 173287a5752456c17d50df4c6dc6e3f6d0d85f81
3 files changed +61 -10
crates/smbcloud-network/src/environment.rs
+5 -2
@@ -1,6 +1,9 @@
1 -use wasm_bindgen::prelude::wasm_bindgen;
1 +use {
2 + serde::{Deserialize, Serialize},
3 + wasm_bindgen::prelude::wasm_bindgen,
4 +};
5
3 -#[derive(clap::ValueEnum, Clone, Copy)]
6 +#[derive(clap::ValueEnum, Clone, Copy, Serialize, Deserialize)]
7 #[wasm_bindgen]
8 pub enum Environment {
9 Dev,
crates/smbcloud-network/src/network.rs
+46
@@ -81,6 +81,52 @@ pub async fn parse_error_response<T: DeserializeOwned>(
81 Err(e)
82 }
83
84 +pub async fn request_login(builder: RequestBuilder) -> Result<String, ErrorResponse> {
85 + let response = builder.send().await;
86 + let response = match response {
87 + Ok(response) => response,
88 + Err(e) => {
89 + error!("Failed to get response: {:?}", e);
90 + return Err(ErrorResponse::Error {
91 + error_code: ErrorCode::NetworkError,
92 + message: ErrorCode::NetworkError.message(None).to_string(),
93 + });
94 + }
95 + };
96 + let response = match response.status() {
97 + reqwest::StatusCode::OK | reqwest::StatusCode::CREATED => response,
98 + status => {
99 + error!("Failed to get response: {:?}", status);
100 + return Err(ErrorResponse::Error {
101 + error_code: ErrorCode::NetworkError,
102 + message: ErrorCode::NetworkError.message(None).to_string(),
103 + });
104 + }
105 + };
106 +
107 + match response.headers().get("Authorization") {
108 + Some(token) => {
109 + debug!("{:?}", token.to_str());
110 + if let Ok(token_str) = token.to_str() {
111 + return Ok(token_str.to_string());
112 + } else {
113 + error!("Failed to convert token to string");
114 + return Err(ErrorResponse::Error {
115 + error_code: ErrorCode::NetworkError,
116 + message: ErrorCode::NetworkError.message(None).to_string(),
117 + });
118 + }
119 + }
120 + None => {
121 + error!("Failed to get token. Probably a backend issue.");
122 + Err(ErrorResponse::Error {
123 + error_code: ErrorCode::NetworkError,
124 + message: ErrorCode::NetworkError.message(None).to_string(),
125 + })
126 + }
127 + }
128 +}
129 +
130 pub async fn request<R: DeserializeOwned>(builder: RequestBuilder) -> Result<R, ErrorResponse> {
131 // Check internet connection before making the request
132 if !check_internet_connection().await {
crates/smbcloud-networking-account/src/login.rs
+10 -8
@@ -1,22 +1,24 @@
1 -use reqwest::Client;
2 -use smbcloud_model::{error_codes::ErrorResponse, login::LoginArgs, login::LoginResult};
3 -use smbcloud_network::{environment::Environment, network::request};
4 -use smbcloud_networking::{
5 - constants::{PATH_USERS_SIGN_IN, SMB_USER_AGENT},
6 - smb_base_url_builder,
1 +use {
2 + reqwest::Client,
3 + smbcloud_model::{error_codes::ErrorResponse, login::LoginArgs},
4 + smbcloud_network::{environment::Environment, network::request_login},
5 + smbcloud_networking::{
6 + constants::{PATH_USERS_SIGN_IN, SMB_USER_AGENT},
7 + smb_base_url_builder,
8 + },
9 };
10
11 pub async fn login(
12 env: Environment,
13 username: String,
14 password: String,
13 -) -> Result<LoginResult, ErrorResponse> {
15 +) -> Result<String, ErrorResponse> {
16 let login_params = LoginArgs { username, password };
17 let builder = Client::new()
18 .post(build_smb_login_url(env))
19 .json(&login_params)
20 .header("User-agent", SMB_USER_AGENT);
19 - request(builder).await
21 + request_login(builder).await
22 }
23
24 pub(crate) fn build_smb_login_url(env: Environment) -> String {