aboutsummaryrefslogtreecommitdiff
path: root/nitrocli/src/args.rs
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2018-12-30 18:32:45 +0100
committerDaniel Mueller <deso@posteo.net>2019-01-01 17:14:58 -0800
commitcc3aa7f14eaec746e6718ef155a59e10c67a03fb (patch)
tree3d9c64d275236fa18b7b2d04eda54b6900b42fdb /nitrocli/src/args.rs
parentfc4a8e12af694a40fe17bcebddd9e4617075400f (diff)
downloadnitrocli-cc3aa7f14eaec746e6718ef155a59e10c67a03fb.tar.gz
nitrocli-cc3aa7f14eaec746e6718ef155a59e10c67a03fb.tar.bz2
Implement the pin set command
This change implements the pin set command which can be used to change a Nitrokey's user or admin PIN.
Diffstat (limited to 'nitrocli/src/args.rs')
-rw-r--r--nitrocli/src/args.rs23
1 files changed, 22 insertions, 1 deletions
diff --git a/nitrocli/src/args.rs b/nitrocli/src/args.rs
index 4341235..f00ac2a 100644
--- a/nitrocli/src/args.rs
+++ b/nitrocli/src/args.rs
@@ -24,6 +24,7 @@ use std::str;
use crate::commands;
use crate::error::Error;
+use crate::pinentry;
type Result<T> = result::Result<T, Error>;
@@ -278,6 +279,7 @@ impl From<OtpMode> for nitrokey::OtpMode {
#[derive(Debug)]
enum PinCommand {
Clear,
+ Set,
Unblock,
}
@@ -285,6 +287,7 @@ impl PinCommand {
fn execute(&self, args: Vec<String>) -> Result<()> {
match *self {
PinCommand::Clear => pin_clear(args),
+ PinCommand::Set => pin_set(args),
PinCommand::Unblock => pin_unblock(args),
}
}
@@ -297,6 +300,7 @@ impl fmt::Display for PinCommand {
"{}",
match *self {
PinCommand::Clear => "clear",
+ PinCommand::Set => "set",
PinCommand::Unblock => "unblock",
}
)
@@ -309,6 +313,7 @@ impl str::FromStr for PinCommand {
fn from_str(s: &str) -> result::Result<Self, Self::Err> {
match s {
"clear" => Ok(PinCommand::Clear),
+ "set" => Ok(PinCommand::Set),
"unblock" => Ok(PinCommand::Unblock),
_ => Err(()),
}
@@ -693,7 +698,7 @@ fn pin(args: Vec<String>) -> Result<()> {
let _ = parser.refer(&mut subcommand).required().add_argument(
"subcommand",
argparse::Store,
- "The subcommand to execute (clear|unblock)",
+ "The subcommand to execute (clear|set|unblock)",
);
let _ = parser.refer(&mut subargs).add_argument(
"arguments",
@@ -717,6 +722,22 @@ fn pin_clear(args: Vec<String>) -> Result<()> {
commands::pin_clear()
}
+/// Change a PIN.
+fn pin_set(args: Vec<String>) -> Result<()> {
+ let mut pintype = pinentry::PinType::User;
+ let mut parser = argparse::ArgumentParser::new();
+ parser.set_description("Changes a PIN");
+ let _ = parser.refer(&mut pintype).required().add_argument(
+ "type",
+ argparse::Store,
+ "The PIN type to change (admin|user)",
+ );
+ parse(&parser, args)?;
+ drop(parser);
+
+ commands::pin_set(pintype)
+}
+
/// Unblock and reset the user PIN.
fn pin_unblock(args: Vec<String>) -> Result<()> {
let mut parser = argparse::ArgumentParser::new();