diff options
| -rw-r--r-- | Cargo.lock | 16 | ||||
| -rw-r--r-- | src/main.rs | 45 | 
2 files changed, 50 insertions, 11 deletions
| @@ -1,11 +1,3 @@ -[root] -name = "passextract" -version = "0.3.0" -dependencies = [ - "clipboard 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustty 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", -] -  [[package]]  name = "block"  version = "0.1.6" @@ -92,6 +84,14 @@ dependencies = [  ]  [[package]] +name = "passextract" +version = "0.3.0" +dependencies = [ + "clipboard 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustty 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]]  name = "pkg-config"  version = "0.3.8"  source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/src/main.rs b/src/main.rs index 2a196d3..28b0259 100644 --- a/src/main.rs +++ b/src/main.rs @@ -78,11 +78,46 @@ fn parse_options(filename: &str) -> Vec<String> {      options  } +/// Checks whether the given line starts with "p: " +/// +/// # Examples +/// +/// ``` +/// assert_eq!(is_password_line("p: secret"), true); +/// ``` +fn is_password_line(line: &str) -> bool { +    line.starts_with("p: ") +} + +/// Replaces the password on a password line with "*"s. +/// +/// # Examples +/// +/// ``` +/// assert_eq!(hide_password_line("p: secret"), "p: ******); +/// ``` +fn hide_password_line(line: &str) -> String { +    const KEY_LENGTH: usize = 3; +    let password_length = line.len() - KEY_LENGTH; + +    format!("p: {}", "*".repeat(password_length)) +} +  fn main() {      let args: Vec<String> = env::args().collect(); -    let input = if args.len() > 1 { -        &args[1] +    let options = ["-i"]; + +    let hide_password = match args.get(1) { +        Some(arg) if arg == "-i" => true, +        Some(_) => false, +        None => false, +    }; + +    let last_arg = &args[args.len() - 1]; +    let input = if args.len() > 1 && +            !options.contains(&last_arg.as_ref()) { +        last_arg      } else {          "-"      }; @@ -110,7 +145,11 @@ fn main() {          term.printline_with_cell(selection.x, selection.y, "->", knockout_cell);          for (i, s) in options.iter().enumerate() { -            term.printline(5, i + 2, s) +            if hide_password && is_password_line(s) { +                term.printline(5, i + 2, &hide_password_line(s)) +            } else { +                term.printline(5, i + 2, s) +            }          }          let evt = term.get_event(Duration::from_millis(100)).unwrap(); | 
