diff --git a/Cargo.lock b/Cargo.lock index 9e44124..af842dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1243,6 +1243,7 @@ dependencies = [ "ptth_file_server", "ptth_server", "quic_demo", + "rand", "reqwest", "rusty_ulid", "sha2", diff --git a/crates/ptth_multi_call_server/Cargo.toml b/crates/ptth_multi_call_server/Cargo.toml index b854b1e..c252fa7 100644 --- a/crates/ptth_multi_call_server/Cargo.toml +++ b/crates/ptth_multi_call_server/Cargo.toml @@ -19,6 +19,7 @@ hex = "0.4.3" ptth_file_server = { path = "../ptth_file_server_bin" } ptth_server = { path = "../ptth_server" } quic_demo = { path = "../../prototypes/quic_demo" } +rand = "0.8.4" rusty_ulid = "0.10.1" sha2 = "0.9.8" tokio = { version = "1.8.1", features = ["full"] } diff --git a/crates/ptth_multi_call_server/src/diceware.rs b/crates/ptth_multi_call_server/src/diceware.rs new file mode 100644 index 0000000..741ca27 --- /dev/null +++ b/crates/ptth_multi_call_server/src/diceware.rs @@ -0,0 +1,23 @@ +use rand::Rng; + +pub fn main () { + let wordlist = include_str! ("eff_short_wordlist_1.txt"); + let words: Vec <_> = wordlist.split ('\n').take (1253).collect (); + + assert_eq! (words.len (), 1253); + assert_eq! (words [0], "acid"); + assert_eq! (words [600], "large"); + assert_eq! (words [1252], "zoom"); + + let mut rng = rand::thread_rng (); + + let random_words: Vec <&str> = (0..8) + .map (|_| { + words [rng.gen_range (0..words.len ())] + }) + .collect (); + + let passphrase = random_words.join (" "); + + println! ("{}", passphrase); +} diff --git a/eff_short_wordlist_1.txt b/crates/ptth_multi_call_server/src/eff_short_wordlist_1.txt similarity index 100% rename from eff_short_wordlist_1.txt rename to crates/ptth_multi_call_server/src/eff_short_wordlist_1.txt diff --git a/crates/ptth_multi_call_server/src/main.rs b/crates/ptth_multi_call_server/src/main.rs index 343f5bd..1757884 100644 --- a/crates/ptth_multi_call_server/src/main.rs +++ b/crates/ptth_multi_call_server/src/main.rs @@ -5,11 +5,13 @@ use std::{ use tokio::sync::watch; +mod diceware; mod download; mod ulid; #[derive (Clone, Copy, Debug, PartialEq)] enum Subcommand { + Diceware, Download, PtthServer, PtthFileServer, @@ -27,6 +29,7 @@ async fn main () -> anyhow::Result <()> { let (subcommand, args) = parse_args (&args)?; match subcommand { + Diceware => Ok (diceware::main ()), Download => download::main (&args).await, PtthServer => ptth_server::executable::main (&args).await, PtthFileServer => ptth_file_server::main (&args).await, @@ -50,6 +53,7 @@ fn parse_subcommand (arg: &str) -> Option use Subcommand::*; let map = vec! [ + ("diceware", Diceware), ("download", Download), ("ptth_server", PtthServer), ("ptth_file_server", PtthFileServer), diff --git a/crates/ptth_server/src/file_server/tests.rs b/crates/ptth_server/src/file_server/tests.rs index 2071d0a..a0396a9 100644 --- a/crates/ptth_server/src/file_server/tests.rs +++ b/crates/ptth_server/src/file_server/tests.rs @@ -70,7 +70,7 @@ fn file_server () { let files_root = PathBuf::from ("./"); let dirs_roots = Default::default (); - let file_server_root = internal::FileRoots { + let roots = internal::FileRoots { files: &files_root, dirs: &dirs_roots, }; @@ -96,7 +96,7 @@ fn file_server () { })), ] { let resp = internal::serve_all ( - file_server_root, + roots, Method::Get, uri_path, &headers, @@ -113,7 +113,7 @@ fn file_server () { }), ] { let resp = internal::serve_all ( - file_server_root, + roots, Method::Get, uri_path, &headers,