diff options
-rw-r--r-- | Cargo.lock | 10 | ||||
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | src/main.rs | 49 |
3 files changed, 59 insertions, 1 deletions
@@ -1,4 +1,14 @@ [[package]] +name = "argparse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "nitrocli-otp-qr" version = "0.1.0" +dependencies = [ + "argparse 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] +[metadata] +"checksum argparse 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3f8ebf5827e4ac4fd5946560e6a99776ea73b596d80898f357007317a7141e47" @@ -10,3 +10,4 @@ readme = "README.md" license = "MIT" [dependencies] +argparse = "0.2" diff --git a/src/main.rs b/src/main.rs index e257956..04140ed 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,50 @@ +#![warn(missing_docs, rust_2018_compatibility, rust_2018_idioms, unused)] + +//! Reads OTP configuration from a QR code and writes it to an OTP slot on a Nitrokey device. + +use std::process; + +#[derive(Debug)] +struct Options { + slot: u8, + file: Option<String>, + name: Option<String>, +} + +fn parse_options() -> Result<Options, i32> { + let mut options = Options { + slot: 0, + file: None, + name: None, + }; + let mut parser = argparse::ArgumentParser::new(); + parser.set_description( + "Reads OTP configuration from a QR code and writes it to an OTP slot on a Nitrokey device.", + ); + parser.refer(&mut options.slot).required().add_argument( + "slot", + argparse::Store, + "The slot to write the OTP data to", + ); + parser.refer(&mut options.file).add_argument( + "file", + argparse::StoreOption, + "The file to read the QR code from", + ); + parser.refer(&mut options.name).add_option( + &["-n", "--name"], + argparse::StoreOption, + "The name to store in the OTP slot", + ); + parser.parse_args()?; + drop(parser); + Ok(options) +} + fn main() { - println!("nitrocli-otp-qr"); + let status = match parse_options() { + Ok(_) => 0, + Err(err) => err, + }; + process::exit(status); } |