Skip to content

Commit 3ff7cf6

Browse files
committed
Merge branch 'release/v0.4.0' into stable
2 parents cf375f0 + 9d22423 commit 3ff7cf6

5 files changed

Lines changed: 270 additions & 56 deletions

File tree

Cargo.lock

Lines changed: 99 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
[package]
22
name = "rustbase-cli"
3-
version = "0.2.0"
3+
version = "0.4.0"
44
edition = "2021"
55
authors = ["Rustbase"]
66
license = "MIT"
77

88
[dependencies]
9-
tokio = { version = "1.20.1", features = ["macros", "rt-multi-thread", "net", "io-std", "io-util"] }
9+
tokio = { version = "1.23.1", features = ["macros", "rt-multi-thread", "net", "io-std", "io-util"] }
1010
bson = "2.4.0"
11-
rustyline = "10.0.0"
11+
rustyline = "10.1.1"
1212
colored = "2.0.0"
1313
clap = "3.2.19"
1414
clap_derive = "3.2.18"
@@ -17,4 +17,7 @@ serde = { version = "1.0.147", features = ["derive"] }
1717
tokio-rustls = "0.23.4"
1818
rustls-pemfile = "1.0.1"
1919
rustls = "0.20.7"
20-
webpki = "0.22.0"
20+
webpki = "0.22.0"
21+
scram = "0.6.0"
22+
unicode-width = "0.1.10"
23+
rustyline-derive = "0.7.0"

src/engine/auth.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
use scram::ScramClient;
2+
use tokio::io::{AsyncRead, AsyncWrite};
3+
4+
use super::AuthConfig;
5+
use super::Rustbase;
6+
7+
pub async fn auth<IO>(auth_config: AuthConfig, client: &mut IO)
8+
where
9+
IO: AsyncRead + AsyncWrite + Unpin,
10+
{
11+
let scram = ScramClient::new(&auth_config.username, &auth_config.password, None);
12+
let (scram, client_first) = scram.client_first();
13+
14+
let server_first = Rustbase::send_and_receive(client, client_first.as_bytes().to_vec()).await;
15+
let server_first = String::from_utf8(server_first).unwrap();
16+
17+
let scram = scram
18+
.handle_server_first(&server_first)
19+
.expect("Invalid server first message, maybe server is not using scram? or maybe the username is wrong?");
20+
let (scram, client_final) = scram.client_final();
21+
22+
let server_final = Rustbase::send_and_receive(client, client_final.as_bytes().to_vec()).await;
23+
let server_final = String::from_utf8(server_final).unwrap();
24+
25+
scram.handle_server_final(&server_final).unwrap();
26+
}

0 commit comments

Comments
 (0)