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 {