Fix things

This commit is contained in:
Alex 2022-05-20 13:36:45 +02:00
parent 3ac6896da9
commit a6e33aafea
Signed by: lx
GPG key ID: 0E496D15096376BE
5 changed files with 94 additions and 14 deletions

67
Cargo.lock generated
View file

@ -2,6 +2,15 @@
# It is not intended for manual editing. # It is not intended for manual editing.
version = 3 version = 3
[[package]]
name = "aho-corasick"
version = "0.7.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
dependencies = [
"memchr",
]
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.57" version = "1.0.57"
@ -290,6 +299,19 @@ version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
[[package]]
name = "env_logger"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
dependencies = [
"atty",
"humantime",
"log",
"regex",
"termcolor",
]
[[package]] [[package]]
name = "fastrand" name = "fastrand"
version = "1.7.0" version = "1.7.0"
@ -520,6 +542,15 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
[[package]]
name = "humantime"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
dependencies = [
"quick-error",
]
[[package]] [[package]]
name = "hyper" name = "hyper"
version = "0.14.18" version = "0.14.18"
@ -617,10 +648,10 @@ dependencies = [
[[package]] [[package]]
name = "k2v-client" name = "k2v-client"
version = "0.1.0" version = "0.1.0"
source = "git+https://git.deuxfleurs.fr/Deuxfleurs/garage.git#64c193e3dbb536d5d3c2881bc9aebbb3e4e6272e"
dependencies = [ dependencies = [
"base64", "base64",
"http", "http",
"log",
"rusoto_core", "rusoto_core",
"rusoto_credential", "rusoto_credential",
"rusoto_signature", "rusoto_signature",
@ -676,6 +707,7 @@ dependencies = [
"im", "im",
"itertools", "itertools",
"k2v-client", "k2v-client",
"pretty_env_logger",
"rand", "rand",
"rmp-serde", "rmp-serde",
"rpassword", "rpassword",
@ -876,6 +908,16 @@ version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
[[package]]
name = "pretty_env_logger"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d"
dependencies = [
"env_logger",
"log",
]
[[package]] [[package]]
name = "proc-macro-error" name = "proc-macro-error"
version = "1.0.4" version = "1.0.4"
@ -909,6 +951,12 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "quick-error"
version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.18" version = "1.0.18"
@ -977,6 +1025,23 @@ dependencies = [
"thiserror", "thiserror",
] ]
[[package]]
name = "regex"
version = "1.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.6.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
[[package]] [[package]]
name = "remove_dir_all" name = "remove_dir_all"
version = "0.5.3" version = "0.5.3"

View file

@ -15,6 +15,7 @@ clap = { version = "3.1.18", features = ["derive", "env"] }
hex = "0.4" hex = "0.4"
im = "15" im = "15"
itertools = "0.10" itertools = "0.10"
pretty_env_logger = "0.4"
rusoto_core = "0.48.0" rusoto_core = "0.48.0"
rusoto_credential = "0.48.0" rusoto_credential = "0.48.0"
rusoto_s3 = "0.48" rusoto_s3 = "0.48"
@ -28,4 +29,5 @@ tokio = "1.17.0"
toml = "0.5" toml = "0.5"
zstd = { version = "0.9", default-features = false } zstd = { version = "0.9", default-features = false }
k2v-client = { git = "https://git.deuxfleurs.fr/Deuxfleurs/garage.git" } #k2v-client = { git = "https://git.deuxfleurs.fr/Deuxfleurs/garage.git" }
k2v-client = { path = "../garage/src/k2v-client" }

View file

@ -19,8 +19,8 @@ const SAVE_STATE_EVERY: usize = 64;
// Checkpointing interval constants: a checkpoint is not made earlier // Checkpointing interval constants: a checkpoint is not made earlier
// than CHECKPOINT_INTERVAL time after the last one, and is not made // than CHECKPOINT_INTERVAL time after the last one, and is not made
// if there are less than CHECKPOINT_MIN_OPS new operations since last one. // if there are less than CHECKPOINT_MIN_OPS new operations since last one.
const CHECKPOINT_INTERVAL: Duration = Duration::from_secs(60); const CHECKPOINT_INTERVAL: Duration = Duration::from_secs(3600);
const CHECKPOINT_MIN_OPS: usize = 4; const CHECKPOINT_MIN_OPS: usize = 16;
// HYPOTHESIS: processes are able to communicate in a synchronous // HYPOTHESIS: processes are able to communicate in a synchronous
// fashion in times that are small compared to CHECKPOINT_INTERVAL. // fashion in times that are small compared to CHECKPOINT_INTERVAL.
// More precisely, if a process tried to save an operation within the last // More precisely, if a process tried to save an operation within the last

View file

@ -3,7 +3,7 @@ pub mod static_provider;
use std::collections::BTreeMap; use std::collections::BTreeMap;
use anyhow::{anyhow, bail, Result}; use anyhow::{anyhow, bail, Context, Result};
use async_trait::async_trait; use async_trait::async_trait;
use k2v_client::{ use k2v_client::{
BatchInsertOp, BatchReadOp, CausalValue, CausalityToken, Filter, K2vClient, K2vValue, BatchInsertOp, BatchReadOp, CausalValue, CausalityToken, Filter, K2vClient, K2vValue,
@ -133,7 +133,8 @@ impl CryptoKeys {
k2v_insert_single_key("keys", "public", None, &keys.public), k2v_insert_single_key("keys", "public", None, &keys.public),
k2v_insert_single_key("keys", &password_sortkey, None, &password_blob), k2v_insert_single_key("keys", &password_sortkey, None, &password_blob),
]) ])
.await?; .await
.context("InsertBatch for salt, public, and password")?;
Ok(keys) Ok(keys)
} }
@ -164,7 +165,8 @@ impl CryptoKeys {
k2v_insert_single_key("keys", "salt", None, &ident_salt), k2v_insert_single_key("keys", "salt", None, &ident_salt),
k2v_insert_single_key("keys", "public", None, &keys.public), k2v_insert_single_key("keys", "public", None, &keys.public),
]) ])
.await?; .await
.context("InsertBatch for salt and public")?;
Ok(keys) Ok(keys)
} }
@ -182,7 +184,8 @@ impl CryptoKeys {
let password_blob = { let password_blob = {
let mut params = k2v let mut params = k2v
.read_batch(&[k2v_read_single_key("keys", &password_sortkey)]) .read_batch(&[k2v_read_single_key("keys", &password_sortkey)])
.await?; .await
.context("ReadBatch to read password")?;
if params.len() != 1 { if params.len() != 1 {
bail!( bail!(
"Invalid response from k2v storage: {:?} (expected one item)", "Invalid response from k2v storage: {:?} (expected one item)",
@ -280,7 +283,8 @@ impl CryptoKeys {
ct, ct,
&password_blob, &password_blob,
)]) )])
.await?; .await
.context("InsertBatch for new password")?;
Ok(()) Ok(())
} }
@ -311,7 +315,8 @@ impl CryptoKeys {
} }
k2v.delete_item("keys", &password_sortkey, pw.causality.clone()) k2v.delete_item("keys", &password_sortkey, pw.causality.clone())
.await?; .await
.context("DeleteItem for password")?;
Ok(()) Ok(())
} }
@ -324,7 +329,8 @@ impl CryptoKeys {
k2v_read_single_key("keys", "salt"), k2v_read_single_key("keys", "salt"),
k2v_read_single_key("keys", "public"), k2v_read_single_key("keys", "public"),
]) ])
.await?; .await
.context("ReadBatch for salt and public in check_uninitialized")?;
if params.len() != 2 { if params.len() != 2 {
bail!( bail!(
"Invalid response from k2v storage: {:?} (expected two items)", "Invalid response from k2v storage: {:?} (expected two items)",
@ -344,7 +350,8 @@ impl CryptoKeys {
k2v_read_single_key("keys", "salt"), k2v_read_single_key("keys", "salt"),
k2v_read_single_key("keys", "public"), k2v_read_single_key("keys", "public"),
]) ])
.await?; .await
.context("ReadBatch for salt and public in load_salt_and_public")?;
if params.len() != 2 { if params.len() != 2 {
bail!( bail!(
"Invalid response from k2v storage: {:?} (expected two items)", "Invalid response from k2v storage: {:?} (expected two items)",
@ -399,7 +406,8 @@ impl CryptoKeys {
tombstones: false, tombstones: false,
single_item: false, single_item: false,
}]) }])
.await?; .await
.context("ReadBatch for prefix password: in list_existing_passwords")?;
if res.len() != 1 { if res.len() != 1 {
bail!("unexpected k2v result: {:?}, expected one item", res); bail!("unexpected k2v result: {:?}, expected one item", res);
} }
@ -443,7 +451,7 @@ pub fn argon2_kdf(salt: &[u8], password: &[u8], output_len: usize) -> Result<Vec
.map_err(|e| anyhow!("Invalid argon2 params: {}", e))?; .map_err(|e| anyhow!("Invalid argon2 params: {}", e))?;
let argon2 = Argon2::new(Algorithm::default(), Version::default(), params); let argon2 = Argon2::new(Algorithm::default(), Version::default(), params);
let salt = base64::encode(salt); let salt = base64::encode_config(salt, base64::STANDARD_NO_PAD);
let hash = argon2 let hash = argon2
.hash_password(password, &salt) .hash_password(password, &salt)
.map_err(|e| anyhow!("Unable to hash: {}", e))?; .map_err(|e| anyhow!("Unable to hash: {}", e))?;

View file

@ -92,6 +92,11 @@ struct StorageCredsArgs {
#[tokio::main] #[tokio::main]
async fn main() -> Result<()> { async fn main() -> Result<()> {
if std::env::var("RUST_LOG").is_err() {
std::env::set_var("RUST_LOG", "mailrage=info,k2v_client=info")
}
pretty_env_logger::init();
let args = Args::parse(); let args = Args::parse();
match args.command { match args.command {