7 files changed
+74
-58
Cargo.lock
+18
-4
@@ -305,10 +305,22 @@ dependencies = [
305
]
306
307
[[package]]
308
-name = "dotenv"
309
-version = "0.15.0"
308
+name = "dotenvy"
309
+version = "0.15.7"
310
source = "registry+https://github.com/rust-lang/crates.io-index"
311
-checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
311
+checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
312
+
313
+[[package]]
314
+name = "dotenvy_macro"
315
+version = "0.15.7"
316
+source = "registry+https://github.com/rust-lang/crates.io-index"
317
+checksum = "cb0235d912a8c749f4e0c9f18ca253b4c28cfefc1d2518096016d6e3230b6424"
318
+dependencies = [
319
+ "dotenvy",
320
+ "proc-macro2",
321
+ "quote",
322
+ "syn 1.0.107",
323
+]
324
325
[[package]]
326
name = "encode_unicode"
@@ -1280,7 +1292,7 @@ dependencies = [
1292
"console",
1293
"dialoguer",
1294
"dirs",
1283
- "dotenv",
1295
+ "dotenvy",
1296
"home",
1297
"log",
1298
"open",
@@ -1319,6 +1331,8 @@ dependencies = [
1331
"anyhow",
1332
"async-trait",
1333
"dirs",
1334
+ "dotenvy",
1335
+ "dotenvy_macro",
1336
"home",
1337
"log",
1338
"maybe-async",
smbpndk-cli/Cargo.toml
+1
-1
@@ -26,7 +26,7 @@ clap_mangen = "0.2.10"
26
console = "0.15.0"
27
dialoguer = "0.10.4"
28
dirs = "4.0.0"
29
-dotenv = "0.15.0"
29
+dotenvy = "0.15"
30
home = "0.5.4"
31
log = "0.4.14"
32
open = "4.0.1"
smbpndk-cli/src/account/lib.rs
+43
-2
@@ -2,16 +2,17 @@ use anyhow::{anyhow, Result};
2
use console::style;
3
use log::debug;
4
use regex::Regex;
5
-use reqwest::{Client, StatusCode};
5
+use reqwest::{Client, StatusCode, Response};
6
use serde::{Deserialize, Serialize};
7
8
use serde_repr::Deserialize_repr;
9
+use smbpndk_model::CommandResult;
10
use smbpndk_networking::smb_base_url_builder;
11
use spinners::Spinner;
12
use std::{
13
env,
14
fmt::{Display, Formatter},
14
- fs,
15
+ fs::{self, create_dir_all, OpenOptions},
16
io::{BufRead, BufReader, Write},
17
net::{TcpListener, TcpStream},
18
sync::mpsc::{self, Receiver, Sender},
@@ -177,6 +178,7 @@ pub async fn process_connect_github(code: String) -> Result<SmbAuthorization> {
178
StatusCode::OK => {
179
// Account authorized and token received
180
spinner.stop_and_persist("✅", "You're logged in with your GitHub account!".into());
181
+ save_token(&response).await?;
182
let result = response.json().await?;
183
println!("Result: {:#?}", &result);
184
Ok(result)
@@ -234,3 +236,42 @@ fn github_base_url_builder() -> URLBuilder {
236
.add_param("redirect_uri", &redirect_url);
237
url_builder
238
}
239
+
240
+
241
+pub async fn save_token(response: &Response) -> Result<CommandResult> {
242
+ let headers = response.headers();
243
+ println!("Headers: {:#?}", &headers);
244
+ match headers.get("Authorization") {
245
+ Some(token) => {
246
+ debug!("{}", token.to_str()?);
247
+ match home::home_dir() {
248
+ Some(path) => {
249
+ debug!("{}", path.to_str().unwrap());
250
+ create_dir_all(path.join(".smb"))?;
251
+ let mut file = OpenOptions::new()
252
+ .create(true)
253
+ .write(true)
254
+ .open([path.to_str().unwrap(), "/.smb/token"].join(""))?;
255
+ file.write_all(token.to_str()?.as_bytes())?;
256
+
257
+ Ok(CommandResult {
258
+ spinner: Spinner::new(
259
+ spinners::Spinners::SimpleDotsScrolling,
260
+ style("Logging you in...").green().bold().to_string(),
261
+ ),
262
+ symbol: "✅".to_owned(),
263
+ msg: "You are logged in!".to_owned(),
264
+ })
265
+ }
266
+ None => {
267
+ let error = anyhow!("Failed to get home directory.");
268
+ return Err(error);
269
+ }
270
+ }
271
+ }
272
+ None => {
273
+ let error = anyhow!("Failed to get token. Probably a backend issue.");
274
+ return Err(error);
275
+ }
276
+ }
277
+}
\ No newline at end of file
smbpndk-cli/src/account/login/process.rs
+4
-44
@@ -1,6 +1,6 @@
1
use crate::account::{
2
forgot::{Param, UserUpdatePassword},
3
- lib::{authorize_github, ErrorCode, GithubInfo, SmbAuthorization},
3
+ lib::{authorize_github, ErrorCode, GithubInfo, SmbAuthorization, save_token},
4
model::{Data, Status, User},
5
signup::{
6
do_signup, GithubEmail, Provider, SignupGithubParams, SignupMethod, SignupUserGithub,
@@ -10,17 +10,14 @@ use anyhow::{anyhow, Result};
10
use console::{style, Term};
11
use dialoguer::{theme::ColorfulTheme, Confirm, Input, Password, Select};
12
use log::debug;
13
-use reqwest::{Client, Response, StatusCode};
13
+use reqwest::{Client, StatusCode};
14
use serde::{Deserialize, Serialize};
15
16
use smbpndk_model::CommandResult;
17
use smbpndk_networking::smb_base_url_builder;
18
use smbpndk_utils::email_validation;
19
use spinners::Spinner;
20
-use std::{
21
- fs::{self, create_dir_all, OpenOptions},
22
- io::Write,
23
-};
20
+use std::fs::{self};
21
22
pub struct LoginArgs {
23
pub username: String,
@@ -233,7 +230,7 @@ async fn do_process_login(args: LoginArgs) -> Result<CommandResult> {
230
match response.status() {
231
StatusCode::OK => {
232
// Login successful
236
- save_token(response).await
233
+ save_token(&response).await
234
}
235
StatusCode::NOT_FOUND => {
236
// Account not found and we show signup option
@@ -259,43 +256,6 @@ async fn do_process_login(args: LoginArgs) -> Result<CommandResult> {
256
}
257
}
258
262
-async fn save_token(response: Response) -> Result<CommandResult> {
263
- let headers = response.headers();
264
- match headers.get("Authorization") {
265
- Some(token) => {
266
- debug!("{}", token.to_str()?);
267
- match home::home_dir() {
268
- Some(path) => {
269
- debug!("{}", path.to_str().unwrap());
270
- create_dir_all(path.join(".smb"))?;
271
- let mut file = OpenOptions::new()
272
- .create(true)
273
- .write(true)
274
- .open([path.to_str().unwrap(), "/.smb/token"].join(""))?;
275
- file.write_all(token.to_str()?.as_bytes())?;
276
-
277
- Ok(CommandResult {
278
- spinner: Spinner::new(
279
- spinners::Spinners::SimpleDotsScrolling,
280
- style("Logging you in...").green().bold().to_string(),
281
- ),
282
- symbol: "✅".to_owned(),
283
- msg: "You are logged in!".to_owned(),
284
- })
285
- }
286
- None => {
287
- let error = anyhow!("Failed to get home directory.");
288
- return Err(error);
289
- }
290
- }
291
- }
292
- None => {
293
- let error = anyhow!("Failed to get token. Probably a backend issue.");
294
- return Err(error);
295
- }
296
- }
297
-}
298
-
259
async fn verify_or_set_password(result: SmbAuthorization) -> Result<CommandResult> {
260
match result.error_code {
261
Some(error_code) => {
smbpndk-cli/src/main.rs
+1
-1
@@ -2,7 +2,7 @@ use anyhow::{anyhow, Result};
2
use app_oten::{self, handler::process_auth_app};
3
use clap::Parser;
4
use console::style;
5
-use dotenv::dotenv;
5
+use dotenvy::dotenv;
6
use smbpndk_cli::{
7
account::process_account,
8
cli::{Cli, Commands},
smbpndk-networking/Cargo.toml
+2
@@ -17,6 +17,8 @@ async-trait = { version = "0.1.51", optional = true }
17
dirs = "4.0.0"
18
home = "0.5.4"
19
log = "0.4.14"
20
+dotenvy = "0.15"
21
+dotenvy_macro = "0.15"
22
maybe-async = { version = "0.2", features = ["is_sync"] }
23
reqwest = { version = "0.11", features = ["json"] }
24
serde = { version = "1", features = ["derive"] }
smbpndk-networking/src/lib.rs
+5
-6
@@ -1,10 +1,9 @@
1
pub mod constants;
2
3
-use std::env;
4
-
3
use anyhow::{anyhow, Result};
4
use log::debug;
5
use url_builder::URLBuilder;
6
+use dotenvy_macro::dotenv;
7
8
pub async fn get_token() -> Result<String> {
9
if let Some(mut path) = dirs::home_dir() {
@@ -19,10 +18,10 @@ pub async fn get_token() -> Result<String> {
18
}
19
20
pub fn smb_base_url_builder() -> URLBuilder {
22
- let client_id = env::var("SMB_CLIENT_ID").expect("Please set SMB_CLIENT_ID");
23
- let client_secret = env::var("SMB_CLIENT_SECRET").expect("Please set SMB_CLIENT_SECRET");
24
- let api_host = env::var("SMB_API_HOST").expect("Please set SMB_API_HOST");
25
- let api_protocol = env::var("SMB_API_PROTOCOL").expect("Please set SMB_API_PROTOCOL");
21
+ let client_id = dotenv!("SMB_CLIENT_ID", "Please set SMB_CLIENT_ID");
22
+ let client_secret = dotenv!("SMB_CLIENT_SECRET", "Please set SMB_CLIENT_SECRET");
23
+ let api_host = dotenv!("SMB_API_HOST", "Please set SMB_API_HOST");
24
+ let api_protocol = dotenv!("SMB_API_PROTOCOL", "Please set SMB_API_PROTOCOL");
25
let mut url_builder = URLBuilder::new();
26
url_builder
27
.set_protocol(&api_protocol)