summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Mueller <deso@posteo.net>2020-04-02 08:52:45 -0700
committerDaniel Mueller <deso@posteo.net>2020-04-02 08:52:45 -0700
commiteab4b20d16760043a1ec4d80d2e239fc1559bb2f (patch)
treedfee106456090e563b91135ec9ac713be94c53ea /src
parenta3f8ae474d153048c5a9252125099ef49cc6b5f4 (diff)
downloadnitrocli-eab4b20d16760043a1ec4d80d2e239fc1559bb2f.tar.gz
nitrocli-eab4b20d16760043a1ec4d80d2e239fc1559bb2f.tar.bz2
Move PinType type into arg_defs module
The PinType struct, despite being intended for the pinentry module, is ultimately part of the argument handling definitions. Because our goal is to consolidate all of those in a single file, this change moves the definition of this type from the pinentry module into the newly introduced arg_defs.
Diffstat (limited to 'src')
-rw-r--r--src/arg_defs.rs15
-rw-r--r--src/commands.rs36
-rw-r--r--src/pinentry.rs33
3 files changed, 42 insertions, 42 deletions
diff --git a/src/arg_defs.rs b/src/arg_defs.rs
index d195841..0172a81 100644
--- a/src/arg_defs.rs
+++ b/src/arg_defs.rs
@@ -20,7 +20,6 @@
use crate::args;
use crate::commands;
use crate::error::Error;
-use crate::pinentry;
/// Provides access to a Nitrokey device
#[derive(structopt::StructOpt)]
@@ -331,11 +330,21 @@ Command! {PinCommand, [
Unblock => commands::pin_unblock,
]}
+/// PIN type requested from pinentry.
+///
+/// The available PIN types correspond to the PIN types used by the Nitrokey devices: user and
+/// admin.
+#[allow(unused_doc_comments)]
+Enum! {PinType, [
+ Admin => "admin",
+ User => "user",
+]}
+
#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct PinSetArgs {
/// The PIN type to change
- #[structopt(name = "type", possible_values = &pinentry::PinType::all_str())]
- pub pintype: pinentry::PinType,
+ #[structopt(name = "type", possible_values = &PinType::all_str())]
+ pub pintype: PinType,
}
#[derive(Debug, PartialEq, structopt::StructOpt)]
diff --git a/src/commands.rs b/src/commands.rs
index 31f4c26..5b5fce1 100644
--- a/src/commands.rs
+++ b/src/commands.rs
@@ -108,7 +108,7 @@ where
F: FnMut(&mut args::ExecCtx<'_>, nitrokey::PasswordSafe<'_, '_>) -> Result<()>,
{
with_device(ctx, |ctx, mut device| {
- let pin_entry = pinentry::PinEntry::from(pinentry::PinType::User, &device)?;
+ let pin_entry = pinentry::PinEntry::from(arg_defs::PinType::User, &device)?;
try_with_pin_and_data(
ctx,
&pin_entry,
@@ -132,7 +132,7 @@ where
fn authenticate<'mgr, D, A, F>(
ctx: &mut args::ExecCtx<'_>,
device: D,
- pin_type: pinentry::PinType,
+ pin_type: arg_defs::PinType,
msg: &'static str,
op: F,
) -> Result<A>
@@ -156,7 +156,7 @@ where
authenticate(
ctx,
device,
- pinentry::PinType::User,
+ arg_defs::PinType::User,
"Could not authenticate as user",
|_ctx, device, pin| device.authenticate_user(pin),
)
@@ -173,7 +173,7 @@ where
authenticate(
ctx,
device,
- pinentry::PinType::Admin,
+ arg_defs::PinType::Admin,
"Could not authenticate as admin",
|_ctx, device, pin| device.authenticate_admin(pin),
)
@@ -261,8 +261,8 @@ where
// Ideally we would not clone here, but that would require us to
// restrict op to work with an immutable ExecCtx, which is not
// possible given that some clients print data.
- pinentry::PinType::Admin => ctx.admin_pin.clone(),
- pinentry::PinType::User => ctx.user_pin.clone(),
+ arg_defs::PinType::Admin => ctx.admin_pin.clone(),
+ arg_defs::PinType::User => ctx.user_pin.clone(),
};
if let Some(pin) = pin {
@@ -418,7 +418,7 @@ pub fn list(ctx: &mut args::ExecCtx<'_>, no_connect: bool) -> Result<()> {
/// Perform a factory reset.
pub fn reset(ctx: &mut args::ExecCtx<'_>) -> Result<()> {
with_device(ctx, |ctx, mut device| {
- let pin_entry = pinentry::PinEntry::from(pinentry::PinType::Admin, &device)?;
+ let pin_entry = pinentry::PinEntry::from(arg_defs::PinType::Admin, &device)?;
// To force the user to enter the admin PIN before performing a
// factory reset, we clear the pinentry cache for the admin PIN.
@@ -445,7 +445,7 @@ pub fn unencrypted_set(
mode: arg_defs::UnencryptedVolumeMode,
) -> Result<()> {
with_storage_device(ctx, |ctx, mut device| {
- let pin_entry = pinentry::PinEntry::from(pinentry::PinType::Admin, &device)?;
+ let pin_entry = pinentry::PinEntry::from(arg_defs::PinType::Admin, &device)?;
let mode = match mode {
arg_defs::UnencryptedVolumeMode::ReadWrite => nitrokey::VolumeMode::ReadWrite,
arg_defs::UnencryptedVolumeMode::ReadOnly => nitrokey::VolumeMode::ReadOnly,
@@ -467,7 +467,7 @@ pub fn unencrypted_set(
/// Open the encrypted volume on the Nitrokey.
pub fn encrypted_open(ctx: &mut args::ExecCtx<'_>) -> Result<()> {
with_storage_device(ctx, |ctx, mut device| {
- let pin_entry = pinentry::PinEntry::from(pinentry::PinType::User, &device)?;
+ let pin_entry = pinentry::PinEntry::from(arg_defs::PinType::User, &device)?;
// We may forcefully close a hidden volume, if active, so be sure to
// flush caches to disk.
@@ -795,10 +795,10 @@ pub fn otp_status(ctx: &mut args::ExecCtx<'_>, all: bool) -> Result<()> {
pub fn pin_clear(ctx: &mut args::ExecCtx<'_>) -> Result<()> {
with_device(ctx, |_ctx, device| {
pinentry::clear(&pinentry::PinEntry::from(
- pinentry::PinType::Admin,
+ arg_defs::PinType::Admin,
&device,
)?)?;
- pinentry::clear(&pinentry::PinEntry::from(pinentry::PinType::User, &device)?)?;
+ pinentry::clear(&pinentry::PinEntry::from(arg_defs::PinType::User, &device)?)?;
Ok(())
})
}
@@ -813,14 +813,14 @@ fn choose_pin(
new: bool,
) -> Result<String> {
let new_pin = match pin_entry.pin_type() {
- pinentry::PinType::Admin => {
+ arg_defs::PinType::Admin => {
if new {
&ctx.new_admin_pin
} else {
&ctx.admin_pin
}
}
- pinentry::PinType::User => {
+ arg_defs::PinType::User => {
if new {
&ctx.new_user_pin
} else {
@@ -840,7 +840,7 @@ fn choose_pin(
}
/// Change a PIN.
-pub fn pin_set(ctx: &mut args::ExecCtx<'_>, pin_type: pinentry::PinType) -> Result<()> {
+pub fn pin_set(ctx: &mut args::ExecCtx<'_>, pin_type: arg_defs::PinType) -> Result<()> {
with_device(ctx, |ctx, mut device| {
let pin_entry = pinentry::PinEntry::from(pin_type, &device)?;
let new_pin = choose_pin(ctx, &pin_entry, true)?;
@@ -850,8 +850,8 @@ pub fn pin_set(ctx: &mut args::ExecCtx<'_>, pin_type: pinentry::PinType) -> Resu
&pin_entry,
"Could not change the PIN",
|current_pin| match pin_type {
- pinentry::PinType::Admin => device.change_admin_pin(&current_pin, &new_pin),
- pinentry::PinType::User => device.change_user_pin(&current_pin, &new_pin),
+ arg_defs::PinType::Admin => device.change_admin_pin(&current_pin, &new_pin),
+ arg_defs::PinType::User => device.change_user_pin(&current_pin, &new_pin),
},
)?;
@@ -865,9 +865,9 @@ pub fn pin_set(ctx: &mut args::ExecCtx<'_>, pin_type: pinentry::PinType) -> Resu
/// Unblock and reset the user PIN.
pub fn pin_unblock(ctx: &mut args::ExecCtx<'_>) -> Result<()> {
with_device(ctx, |ctx, mut device| {
- let pin_entry = pinentry::PinEntry::from(pinentry::PinType::User, &device)?;
+ let pin_entry = pinentry::PinEntry::from(arg_defs::PinType::User, &device)?;
let user_pin = choose_pin(ctx, &pin_entry, false)?;
- let pin_entry = pinentry::PinEntry::from(pinentry::PinType::Admin, &device)?;
+ let pin_entry = pinentry::PinEntry::from(arg_defs::PinType::Admin, &device)?;
try_with_pin(
ctx,
diff --git a/src/pinentry.rs b/src/pinentry.rs
index af2b4dc..878ed9e 100644
--- a/src/pinentry.rs
+++ b/src/pinentry.rs
@@ -23,21 +23,12 @@ use std::io;
use std::process;
use std::str;
+use crate::arg_defs;
use crate::args;
use crate::error::Error;
type CowStr = borrow::Cow<'static, str>;
-/// PIN type requested from pinentry.
-///
-/// The available PIN types correspond to the PIN types used by the Nitrokey devices: user and
-/// admin.
-#[allow(unused_doc_comments)]
-Enum! {PinType, [
- Admin => "admin",
- User => "user",
-]}
-
/// A trait representing a secret to be entered by the user.
pub trait SecretEntry: fmt::Debug {
/// The cache ID to use for this secret.
@@ -52,13 +43,13 @@ pub trait SecretEntry: fmt::Debug {
#[derive(Debug)]
pub struct PinEntry {
- pin_type: PinType,
+ pin_type: arg_defs::PinType,
model: nitrokey::Model,
serial: nitrokey::SerialNumber,
}
impl PinEntry {
- pub fn from<'mgr, D>(pin_type: PinType, device: &D) -> crate::Result<Self>
+ pub fn from<'mgr, D>(pin_type: arg_defs::PinType, device: &D) -> crate::Result<Self>
where
D: nitrokey::Device<'mgr>,
{
@@ -71,7 +62,7 @@ impl PinEntry {
})
}
- pub fn pin_type(&self) -> PinType {
+ pub fn pin_type(&self) -> arg_defs::PinType {
self.pin_type
}
}
@@ -81,16 +72,16 @@ impl SecretEntry for PinEntry {
let model = self.model.to_string().to_lowercase();
let suffix = format!("{}:{}", model, self.serial);
let cache_id = match self.pin_type {
- PinType::Admin => format!("nitrocli:admin:{}", suffix),
- PinType::User => format!("nitrocli:user:{}", suffix),
+ arg_defs::PinType::Admin => format!("nitrocli:admin:{}", suffix),
+ arg_defs::PinType::User => format!("nitrocli:user:{}", suffix),
};
Some(cache_id.into())
}
fn prompt(&self) -> CowStr {
match self.pin_type {
- PinType::Admin => "Admin PIN",
- PinType::User => "User PIN",
+ arg_defs::PinType::Admin => "Admin PIN",
+ arg_defs::PinType::User => "User PIN",
}
.into()
}
@@ -99,12 +90,12 @@ impl SecretEntry for PinEntry {
format!(
"{} for\rNitrokey {} {}",
match self.pin_type {
- PinType::Admin => match mode {
+ arg_defs::PinType::Admin => match mode {
Mode::Choose => "Please enter a new admin PIN",
Mode::Confirm => "Please confirm the new admin PIN",
Mode::Query => "Please enter the admin PIN",
},
- PinType::User => match mode {
+ arg_defs::PinType::User => match mode {
Mode::Choose => "Please enter a new user PIN",
Mode::Confirm => "Please confirm the new user PIN",
Mode::Query => "Please enter the user PIN",
@@ -118,8 +109,8 @@ impl SecretEntry for PinEntry {
fn min_len(&self) -> u8 {
match self.pin_type {
- PinType::Admin => 8,
- PinType::User => 6,
+ arg_defs::PinType::Admin => 8,
+ arg_defs::PinType::User => 6,
}
}
}