aboutsummaryrefslogtreecommitdiff
path: root/nitrocli/src/args.rs
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2018-12-30 18:39:31 +0100
committerDaniel Mueller <deso@posteo.net>2019-01-01 17:14:54 -0800
commitfc4a8e12af694a40fe17bcebddd9e4617075400f (patch)
tree16d5be1bce14d26fafed93c89674948406d290eb /nitrocli/src/args.rs
parent8a59f307a2e0b9fa398ac200da44d8e5725150a7 (diff)
downloadnitrocli-fc4a8e12af694a40fe17bcebddd9e4617075400f.tar.gz
nitrocli-fc4a8e12af694a40fe17bcebddd9e4617075400f.tar.bz2
Implement the pin unblock subcommand
This patch implements the pin unblock command that unblocks and resets the user PIN. The name unblock is chosen over libnitrokey's unlock to be consistent with the GnuPG terminology and to avoid confusion with the unrelated lock command.
Diffstat (limited to 'nitrocli/src/args.rs')
-rw-r--r--nitrocli/src/args.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/nitrocli/src/args.rs b/nitrocli/src/args.rs
index edfd811..4341235 100644
--- a/nitrocli/src/args.rs
+++ b/nitrocli/src/args.rs
@@ -278,12 +278,14 @@ impl From<OtpMode> for nitrokey::OtpMode {
#[derive(Debug)]
enum PinCommand {
Clear,
+ Unblock,
}
impl PinCommand {
fn execute(&self, args: Vec<String>) -> Result<()> {
match *self {
PinCommand::Clear => pin_clear(args),
+ PinCommand::Unblock => pin_unblock(args),
}
}
}
@@ -295,6 +297,7 @@ impl fmt::Display for PinCommand {
"{}",
match *self {
PinCommand::Clear => "clear",
+ PinCommand::Unblock => "unblock",
}
)
}
@@ -306,6 +309,7 @@ impl str::FromStr for PinCommand {
fn from_str(s: &str) -> result::Result<Self, Self::Err> {
match s {
"clear" => Ok(PinCommand::Clear),
+ "unblock" => Ok(PinCommand::Unblock),
_ => Err(()),
}
}
@@ -689,7 +693,7 @@ fn pin(args: Vec<String>) -> Result<()> {
let _ = parser.refer(&mut subcommand).required().add_argument(
"subcommand",
argparse::Store,
- "The subcommand to execute (clear)",
+ "The subcommand to execute (clear|unblock)",
);
let _ = parser.refer(&mut subargs).add_argument(
"arguments",
@@ -713,6 +717,15 @@ fn pin_clear(args: Vec<String>) -> Result<()> {
commands::pin_clear()
}
+/// Unblock and reset the user PIN.
+fn pin_unblock(args: Vec<String>) -> Result<()> {
+ let mut parser = argparse::ArgumentParser::new();
+ parser.set_description("Unblocks and resets the user PIN");
+ parse(&parser, args)?;
+
+ commands::pin_unblock()
+}
+
/// Parse the command-line arguments and return the selected command and
/// the remaining arguments for the command.
fn parse_arguments(args: Vec<String>) -> Result<(Command, Vec<String>)> {