19 files changed
+145
-69
crates/cli/src/account/signup/process.rs
+9
-11
@@ -13,10 +13,7 @@ use {
13
serde::Serialize,
14
smbcloud_model::signup::SignupResult,
15
smbcloud_network::environment::Environment,
16
- smbcloud_networking::{
17
- constants::{PATH_USERS, SMB_USER_AGENT},
18
- smb_base_url_builder,
19
- },
16
+ smbcloud_networking::{constants::PATH_USERS, smb_base_url_builder, smb_client::SmbClient},
17
smbcloud_networking_account::signup::signup,
18
smbcloud_utils::email_validation,
19
spinners::Spinner,
@@ -115,6 +112,7 @@ async fn signup_with_github(env: Environment) -> Result<CommandResult> {
112
}
113
}
114
115
+/// Signup with GitHub account.
116
pub async fn do_signup<T: Serialize + ?Sized>(env: Environment, args: &T) -> Result<CommandResult> {
117
let spinner = Spinner::new(
118
spinners::Spinners::BouncingBall,
@@ -147,12 +145,6 @@ pub async fn do_signup<T: Serialize + ?Sized>(env: Environment, args: &T) -> Res
145
}
146
}
147
150
-fn build_smb_signup_url(env: Environment) -> String {
151
- let mut url_builder = smb_base_url_builder(env);
152
- url_builder.add_route(PATH_USERS);
153
- url_builder.build()
154
-}
155
-
148
pub async fn do_signup_email(
149
env: Environment,
150
email: String,
@@ -163,7 +155,7 @@ pub async fn do_signup_email(
155
succeed_message("Signing you up"),
156
);
157
166
- match signup(env, SMB_USER_AGENT.to_string(), email, password).await {
158
+ match signup(env, SmbClient::Cli, email, password).await {
159
Ok(_) => Ok(CommandResult {
160
spinner,
161
symbol: succeed_symbol(),
@@ -177,3 +169,9 @@ pub async fn do_signup_email(
169
}
170
}
171
}
172
+
173
+fn build_smb_signup_url(env: Environment) -> String {
174
+ let mut url_builder = smb_base_url_builder(env);
175
+ url_builder.add_route(PATH_USERS);
176
+ url_builder.build()
177
+}
crates/smbcloud-model/src/signup.rs
+1
-1
@@ -1,5 +1,5 @@
1
use {
2
- crate::account::{Data, Status},
2
+ crate::account::Data,
3
serde::{Deserialize, Serialize},
4
std::fmt::{Display, Formatter},
5
tsync::tsync,
crates/smbcloud-network/src/network.rs
+1
-1
@@ -11,7 +11,7 @@ use {
11
12
//use std::time::Duration;
13
#[cfg(debug_assertions)]
14
-const LOG_RESPONSE_BODY: bool = false; // You know what to do here.
14
+const LOG_RESPONSE_BODY: bool = true; // You know what to do here.
15
#[cfg(not(debug_assertions))]
16
const LOG_RESPONSE_BODY: bool = false;
17
crates/smbcloud-networking-account/src/check_email.rs
+11
-5
@@ -2,19 +2,25 @@ use {
2
reqwest::Client,
3
smbcloud_model::{account::SmbAuthorization, error_codes::ErrorResponse},
4
smbcloud_network::{environment::Environment, network::request},
5
- smbcloud_networking::{constants::PATH_USERS_CHECK_EMAIL, smb_base_url_builder},
5
+ smbcloud_networking::{
6
+ constants::PATH_USERS_CHECK_EMAIL, smb_base_url_builder, smb_client::SmbClient,
7
+ },
8
};
9
8
-pub async fn check_email(env: Environment, email: &str) -> Result<SmbAuthorization, ErrorResponse> {
10
+pub async fn check_email(
11
+ env: Environment,
12
+ client: SmbClient,
13
+ email: &str,
14
+) -> Result<SmbAuthorization, ErrorResponse> {
15
let builder = Client::new()
10
- .get(build_url(env, email))
16
+ .get(build_url(env, &client, email))
17
.header("Accept", "application/json")
18
.header("Content-Type", "application/x-www-form-urlencoded");
19
request(builder).await
20
}
21
16
-fn build_url(env: Environment, email: &str) -> String {
17
- let mut url_builder = smb_base_url_builder(env);
22
+fn build_url(env: Environment, client: &SmbClient, email: &str) -> String {
23
+ let mut url_builder = smb_base_url_builder(env, client);
24
url_builder.add_route(PATH_USERS_CHECK_EMAIL);
25
url_builder.add_param("email", email);
26
url_builder.build()
crates/smbcloud-networking-account/src/login.rs
+5
-3
@@ -8,11 +8,13 @@ use {
8
smbcloud_networking::{
9
constants::{PATH_USERS_SIGN_IN, SMB_USER_AGENT},
10
smb_base_url_builder,
11
+ smb_client::SmbClient,
12
},
13
};
14
15
pub async fn login(
16
env: Environment,
17
+ client: SmbClient,
18
username: String,
19
password: String,
20
) -> Result<AccountStatus, ErrorResponse> {
@@ -23,14 +25,14 @@ pub async fn login(
25
},
26
};
27
let builder = Client::new()
26
- .post(build_smb_login_url(env))
28
+ .post(build_smb_login_url(env, &client))
29
.json(&login_params)
30
.header("User-agent", SMB_USER_AGENT);
31
request_login(builder).await
32
}
33
32
-pub(crate) fn build_smb_login_url(env: Environment) -> String {
33
- let mut url_builder = smb_base_url_builder(env);
34
+pub(crate) fn build_smb_login_url(env: Environment, client: &SmbClient) -> String {
35
+ let mut url_builder = smb_base_url_builder(env, client);
36
url_builder.add_route(PATH_USERS_SIGN_IN);
37
url_builder.build()
38
}
crates/smbcloud-networking-account/src/logout.rs
+11
-5
@@ -2,12 +2,18 @@ use {
2
reqwest::{Client, StatusCode},
3
smbcloud_model::error_codes::{ErrorCode, ErrorResponse},
4
smbcloud_network::environment::Environment,
5
- smbcloud_networking::{constants::PATH_USERS_SIGN_OUT, smb_base_url_builder},
5
+ smbcloud_networking::{
6
+ constants::PATH_USERS_SIGN_OUT, smb_base_url_builder, smb_client::SmbClient,
7
+ },
8
};
9
8
-pub async fn logout(env: Environment, access_token: String) -> Result<(), ErrorResponse> {
10
+pub async fn logout(
11
+ env: Environment,
12
+ client: SmbClient,
13
+ access_token: String,
14
+) -> Result<(), ErrorResponse> {
15
let response = match Client::new()
10
- .delete(build_smb_logout_url(env))
16
+ .delete(build_smb_logout_url(env, &client))
17
.header("Authorization", access_token)
18
.header("Accept", "application/json")
19
.header("Content-Type", "application/x-www-form-urlencoded")
@@ -32,8 +38,8 @@ pub async fn logout(env: Environment, access_token: String) -> Result<(), ErrorR
38
}
39
}
40
35
-fn build_smb_logout_url(env: Environment) -> String {
36
- let mut url_builder = smb_base_url_builder(env);
41
+fn build_smb_logout_url(env: Environment, client: &SmbClient) -> String {
42
+ let mut url_builder = smb_base_url_builder(env, client);
43
url_builder.add_route(PATH_USERS_SIGN_OUT);
44
url_builder.build()
45
}
crates/smbcloud-networking-account/src/me.rs
+9
-5
@@ -2,19 +2,23 @@ use reqwest::Client;
2
use smbcloud_model::account::User;
3
use smbcloud_model::error_codes::ErrorResponse;
4
use smbcloud_network::{environment::Environment, network::request};
5
-use smbcloud_networking::{constants::PATH_USERS_ME, smb_base_url_builder};
5
+use smbcloud_networking::{constants::PATH_USERS_ME, smb_base_url_builder, smb_client::SmbClient};
6
7
-pub async fn me(env: Environment, access_token: &str) -> Result<User, ErrorResponse> {
7
+pub async fn me(
8
+ env: Environment,
9
+ client: SmbClient,
10
+ access_token: &str,
11
+) -> Result<User, ErrorResponse> {
12
let builder = Client::new()
9
- .get(build_smb_info_url(env))
13
+ .get(build_smb_info_url(env, &client))
14
.header("Authorization", access_token)
15
.header("Accept", "application/json")
16
.header("Content-Type", "application/x-www-form-urlencoded");
17
request(builder).await
18
}
19
16
-fn build_smb_info_url(env: Environment) -> String {
17
- let mut url_builder = smb_base_url_builder(env);
20
+fn build_smb_info_url(env: Environment, client: &SmbClient) -> String {
21
+ let mut url_builder = smb_base_url_builder(env, client);
22
url_builder.add_route(PATH_USERS_ME);
23
url_builder.build()
24
}
crates/smbcloud-networking-account/src/signup.rs
+6
-6
@@ -5,12 +5,12 @@ use {
5
signup::{SignupEmailParams, SignupResult, SignupUserEmail},
6
},
7
smbcloud_network::{environment::Environment, network::request},
8
- smbcloud_networking::{constants::PATH_USERS, smb_base_url_builder},
8
+ smbcloud_networking::{constants::PATH_USERS, smb_base_url_builder, smb_client::SmbClient},
9
};
10
11
pub async fn signup(
12
env: Environment,
13
- user_agent: String,
13
+ client: SmbClient,
14
email: String,
15
password: String,
16
) -> Result<SignupResult, ErrorResponse> {
@@ -18,14 +18,14 @@ pub async fn signup(
18
user: SignupUserEmail { email, password },
19
};
20
let builder = Client::new()
21
- .post(build_smb_signup_url(env))
21
+ .post(build_smb_signup_url(env, &client))
22
.json(¶ms)
23
- .header("User-agent", user_agent);
23
+ .header("User-agent", client.id());
24
request(builder).await
25
}
26
27
-fn build_smb_signup_url(env: Environment) -> String {
28
- let mut url_builder = smb_base_url_builder(env);
27
+fn build_smb_signup_url(env: Environment, client: &SmbClient) -> String {
28
+ let mut url_builder = smb_base_url_builder(env, client);
29
url_builder.add_route(PATH_USERS);
30
url_builder.build()
31
}
crates/smbcloud-networking-project/src/crud_project_create.rs
+3
-2
@@ -5,17 +5,18 @@ use smbcloud_model::{
5
project::{Project, ProjectCreate},
6
};
7
use smbcloud_network::{environment::Environment, network::request};
8
-use smbcloud_networking::constants::SMB_USER_AGENT;
8
+use smbcloud_networking::{constants::SMB_USER_AGENT, smb_client::SmbClient};
9
10
use crate::url_builder::build_project_url;
11
12
pub async fn create_project(
13
env: Environment,
14
+ client: SmbClient,
15
access_token: String,
16
project: ProjectCreate,
17
) -> Result<Project, ErrorResponse> {
18
let builder = Client::new()
18
- .post(build_project_url(env))
19
+ .post(build_project_url(env, &client))
20
.json(&project)
21
.header("Authorization", access_token)
22
.header("User-agent", SMB_USER_AGENT);
crates/smbcloud-networking-project/src/crud_project_delete.rs
+3
-2
@@ -2,15 +2,16 @@ use crate::url_builder::build_project_url_with_id;
2
use reqwest::Client;
3
use smbcloud_model::error_codes::ErrorResponse;
4
use smbcloud_network::{environment::Environment, network::request};
5
-use smbcloud_networking::constants::SMB_USER_AGENT;
5
+use smbcloud_networking::{constants::SMB_USER_AGENT, smb_client::SmbClient};
6
7
pub async fn delete_project(
8
env: Environment,
9
+ client: SmbClient,
10
access_token: String,
11
id: String,
12
) -> Result<(), ErrorResponse> {
13
let builder = Client::new()
13
- .delete(build_project_url_with_id(env, id))
14
+ .delete(build_project_url_with_id(env, &client, id))
15
.header("Authorization", access_token)
16
.header("User-agent", SMB_USER_AGENT);
17
request(builder).await
crates/smbcloud-networking-project/src/crud_project_deployment_create.rs
+7
-2
@@ -6,16 +6,21 @@ use smbcloud_model::{
6
project::{Deployment, DeploymentPayload},
7
};
8
use smbcloud_network::{environment::Environment, network::request};
9
-use smbcloud_networking::constants::SMB_USER_AGENT;
9
+use smbcloud_networking::{constants::SMB_USER_AGENT, smb_client::SmbClient};
10
11
pub async fn create_deployment(
12
env: Environment,
13
+ client: SmbClient,
14
access_token: &str,
15
project_id: i32,
16
payload: DeploymentPayload,
17
) -> Result<Deployment, ErrorResponse> {
18
let builder = Client::new()
18
- .post(build_project_deployment_index(env, project_id.to_string()))
19
+ .post(build_project_deployment_index(
20
+ env,
21
+ &client,
22
+ project_id.to_string(),
23
+ ))
24
.json(&payload)
25
.header("Authorization", access_token)
26
.header("User-agent", SMB_USER_AGENT);
crates/smbcloud-networking-project/src/crud_project_deployment_read.rs
+9
-2
@@ -3,15 +3,20 @@ use anyhow::Result;
3
use reqwest::Client;
4
use smbcloud_model::{error_codes::ErrorResponse, project::Deployment};
5
use smbcloud_network::{environment::Environment, network::request};
6
-use smbcloud_networking::constants::SMB_USER_AGENT;
6
+use smbcloud_networking::{constants::SMB_USER_AGENT, smb_client::SmbClient};
7
8
pub async fn get_deployments(
9
env: Environment,
10
+ client: SmbClient,
11
access_token: String,
12
project_id: i32,
13
) -> Result<Vec<Deployment>, ErrorResponse> {
14
let builder = Client::new()
14
- .get(build_project_deployment_index(env, project_id.to_string()))
15
+ .get(build_project_deployment_index(
16
+ env,
17
+ &client,
18
+ project_id.to_string(),
19
+ ))
20
.header("Authorization", access_token)
21
.header("User-agent", SMB_USER_AGENT);
22
request(builder).await
@@ -19,6 +24,7 @@ pub async fn get_deployments(
24
25
pub async fn get_deployment(
26
env: Environment,
27
+ client: SmbClient,
28
access_token: String,
29
project_id: i32,
30
deployment_id: i32,
@@ -26,6 +32,7 @@ pub async fn get_deployment(
32
let builder = Client::new()
33
.get(build_project_deployment(
34
env,
35
+ &client,
36
project_id.to_string(),
37
deployment_id.to_string(),
38
))
crates/smbcloud-networking-project/src/crud_project_deployment_update.rs
+8
-2
@@ -5,18 +5,24 @@ use smbcloud_model::{
5
project::{Deployment, DeploymentPayload},
6
};
7
use smbcloud_network::{environment::Environment, network::request};
8
-use smbcloud_networking::constants::SMB_USER_AGENT;
8
+use smbcloud_networking::{constants::SMB_USER_AGENT, smb_client::SmbClient};
9
10
use crate::url_builder::build_project_deployment;
11
12
pub async fn update(
13
env: Environment,
14
+ client: SmbClient,
15
access_token: String,
16
project_id: i32,
17
deployment_id: i32,
18
status: DeploymentPayload,
19
) -> Result<Deployment, ErrorResponse> {
19
- let url = build_project_deployment(env, project_id.to_string(), deployment_id.to_string());
20
+ let url = build_project_deployment(
21
+ env,
22
+ &client,
23
+ project_id.to_string(),
24
+ deployment_id.to_string(),
25
+ );
26
let builder = Client::new()
27
.put(url)
28
.json(&status)
crates/smbcloud-networking-project/src/crud_project_read.rs
+5
-3
@@ -3,16 +3,17 @@ use {
3
reqwest::Client,
4
smbcloud_model::{error_codes::ErrorResponse, project::Project},
5
smbcloud_network::{environment::Environment, network::request},
6
- smbcloud_networking::constants::SMB_USER_AGENT,
6
+ smbcloud_networking::{constants::SMB_USER_AGENT, smb_client::SmbClient},
7
};
8
9
pub async fn get_project(
10
env: Environment,
11
+ client: SmbClient,
12
access_token: String,
13
id: String,
14
) -> Result<Project, ErrorResponse> {
15
let builder: reqwest::RequestBuilder = Client::new()
15
- .get(build_project_url_with_id(env, id))
16
+ .get(build_project_url_with_id(env, &client, id))
17
.header("Authorization", access_token)
18
.header("User-agent", SMB_USER_AGENT);
19
request(builder).await
@@ -20,10 +21,11 @@ pub async fn get_project(
21
22
pub async fn get_projects(
23
env: Environment,
24
+ client: SmbClient,
25
access_token: String,
26
) -> Result<Vec<Project>, ErrorResponse> {
27
let builder = Client::new()
26
- .get(build_project_url(env))
28
+ .get(build_project_url(env, &client))
29
.header("Authorization", access_token)
30
.header("User-agent", SMB_USER_AGENT);
31
request(builder).await
crates/smbcloud-networking-project/src/crud_project_update.rs
+3
-2
@@ -2,16 +2,17 @@ use crate::url_builder::build_project_url_with_id;
2
use reqwest::Client;
3
use smbcloud_model::{error_codes::ErrorResponse, project::Project};
4
use smbcloud_network::{environment::Environment, network::request};
5
-use smbcloud_networking::constants::SMB_USER_AGENT;
5
+use smbcloud_networking::{constants::SMB_USER_AGENT, smb_client::SmbClient};
6
7
pub async fn update_project_description(
8
env: Environment,
9
+ client: SmbClient,
10
access_token: String,
11
project_id: String,
12
new_description: &str,
13
) -> Result<Project, ErrorResponse> {
14
// PATCH is correct for partial update of description
14
- let url = build_project_url_with_id(env, project_id.to_string());
15
+ let url = build_project_url_with_id(env, &client, project_id.to_string());
16
let builder = Client::new()
17
.patch(url)
18
.header("Authorization", access_token)
crates/smbcloud-networking-project/src/url_builder.rs
+25
-10
@@ -1,31 +1,46 @@
1
-use smbcloud_network::environment::Environment;
2
-use smbcloud_networking::smb_base_url_builder;
1
+use {
2
+ smbcloud_network::environment::Environment,
3
+ smbcloud_networking::{smb_base_url_builder, smb_client::SmbClient},
4
+};
5
6
// Private functions
7
6
-pub(crate) fn build_project_url(env: Environment) -> String {
7
- let mut url_builder = smb_base_url_builder(env);
8
+pub(crate) fn build_project_url(env: Environment, client: &SmbClient) -> String {
9
+ let mut url_builder = smb_base_url_builder(env, client);
10
url_builder.add_route("v1/projects");
11
url_builder.build()
12
}
13
12
-pub(crate) fn build_project_url_with_id(env: Environment, id: String) -> String {
13
- let mut url_builder = smb_base_url_builder(env);
14
+pub(crate) fn build_project_url_with_id(
15
+ env: Environment,
16
+ client: &SmbClient,
17
+ id: String,
18
+) -> String {
19
+ let mut url_builder = smb_base_url_builder(env, client);
20
url_builder.add_route("v1/projects");
21
url_builder.add_route(id.as_str());
22
url_builder.build()
23
}
24
19
-pub(crate) fn build_project_deployment_index(env: Environment, project_id: String) -> String {
20
- let mut url_builder = smb_base_url_builder(env);
25
+pub(crate) fn build_project_deployment_index(
26
+ env: Environment,
27
+ client: &SmbClient,
28
+ project_id: String,
29
+) -> String {
30
+ let mut url_builder = smb_base_url_builder(env, client);
31
url_builder.add_route("v1/projects");
32
url_builder.add_route(project_id.as_str());
33
url_builder.add_route("deployment");
34
url_builder.build()
35
}
36
27
-pub(crate) fn build_project_deployment(env: Environment, project_id: String, id: String) -> String {
28
- let mut url_builder = smb_base_url_builder(env);
37
+pub(crate) fn build_project_deployment(
38
+ env: Environment,
39
+ client: &SmbClient,
40
+ project_id: String,
41
+ id: String,
42
+) -> String {
43
+ let mut url_builder = smb_base_url_builder(env, client);
44
url_builder.add_route("v1/projects");
45
url_builder.add_route(project_id.as_str());
46
url_builder.add_route("deployment");
crates/smbcloud-networking/src/constants.rs
+2
-2
@@ -7,8 +7,8 @@ pub const GH_OAUTH_REDIRECT_HOST: &str = "http://localhost";
7
pub const GH_OAUTH_REDIRECT_PORT: &str = "8808";
8
9
pub const SMB_CLIENT_ID: &str = "cli";
10
-pub const SMB_CLIENT_SECRET: &str = "YOUR_SMB_CLIENT_SECRET";
11
-pub const SMB_USER_AGENT: &str = "YOUR_SMB_USER_AGENT";
10
+pub const SMB_CLIENT_SECRET: &str = "secretttttttt";
11
+pub const SMB_USER_AGENT: &str = "smbcloud-cli";
12
13
// Paths
14
pub const PATH_USERS_CHECK_EMAIL: &str = "v1/check_email";
crates/smbcloud-networking/src/lib.rs
+5
-5
@@ -1,17 +1,17 @@
1
pub mod constants;
2
+pub mod smb_client;
3
4
use {
4
- constants::{SMB_CLIENT_ID, SMB_CLIENT_SECRET},
5
- smbcloud_network::environment::Environment,
5
+ crate::smb_client::SmbClient, smbcloud_network::environment::Environment,
6
url_builder::URLBuilder,
7
};
8
9
-pub fn smb_base_url_builder(env: Environment) -> URLBuilder {
9
+pub fn smb_base_url_builder(env: Environment, client: &SmbClient) -> URLBuilder {
10
let mut url_builder = URLBuilder::new();
11
url_builder
12
.set_protocol(&env.api_protocol())
13
.set_host(&env.api_host())
14
- .add_param("client_id", SMB_CLIENT_ID)
15
- .add_param("client_secret", SMB_CLIENT_SECRET);
14
+ .add_param("client_id", client.id())
15
+ .add_param("client_secret", client.secret());
16
url_builder
17
}
crates/smbcloud-networking/src/smb_client.rs
new
+22
@@ -0,0 +1,22 @@
1
+pub enum SmbClient {
2
+ Cli,
3
+ Sigit,
4
+ WebConsole,
5
+}
6
+
7
+impl SmbClient {
8
+ pub fn id(&self) -> &str {
9
+ match self {
10
+ SmbClient::Cli => "CLI_CLIENT_ID",
11
+ SmbClient::Sigit => "SIGIT_CLIENT_ID",
12
+ SmbClient::WebConsole => "WEB_CONSOLE_CLIENT_ID",
13
+ }
14
+ }
15
+ pub fn secret(&self) -> &str {
16
+ match self {
17
+ SmbClient::Cli => "CLI_CLIENT_SECRET",
18
+ SmbClient::Sigit => "SIGIT_CLIENT_SECRET",
19
+ SmbClient::WebConsole => "WEB_CONSOLE_CLIENT_SECRET",
20
+ }
21
+ }
22
+}