aboutsummaryrefslogtreecommitdiff
path: root/nitrocli/src
diff options
context:
space:
mode:
Diffstat (limited to 'nitrocli/src')
-rw-r--r--nitrocli/src/commands.rs24
-rw-r--r--nitrocli/src/error.rs16
-rw-r--r--nitrocli/src/tests/mod.rs17
-rw-r--r--nitrocli/src/tests/otp.rs4
-rw-r--r--nitrocli/src/tests/pin.rs11
-rw-r--r--nitrocli/src/tests/pws.rs4
6 files changed, 49 insertions, 27 deletions
diff --git a/nitrocli/src/commands.rs b/nitrocli/src/commands.rs
index a65f070..6778332 100644
--- a/nitrocli/src/commands.rs
+++ b/nitrocli/src/commands.rs
@@ -39,8 +39,8 @@ use crate::Result;
const NITROKEY_DEFAULT_ADMIN_PIN: &str = "12345678";
/// Create an `error::Error` with an error message of the format `msg: err`.
-fn get_error(msg: &'static str, err: nitrokey::CommandError) -> Error {
- Error::CommandError(Some(msg), err)
+fn get_error(msg: &'static str, err: nitrokey::Error) -> Error {
+ Error::NitrokeyError(Some(msg), err)
}
/// Set `libnitrokey`'s log level based on the execution context's verbosity.
@@ -134,7 +134,7 @@ fn authenticate<D, A, F>(
) -> Result<A>
where
D: Device,
- F: FnMut(&mut args::ExecCtx<'_>, D, &str) -> result::Result<A, (D, nitrokey::CommandError)>,
+ F: FnMut(&mut args::ExecCtx<'_>, D, &str) -> result::Result<A, (D, nitrokey::Error)>,
{
let pin_entry = pinentry::PinEntry::from(pin_type, &device)?;
@@ -205,7 +205,7 @@ fn try_with_pin_and_data_with_pinentry<D, F, R, E>(
) -> Result<R>
where
F: FnMut(&mut args::ExecCtx<'_>, D, &str) -> result::Result<R, (D, E)>,
- E: error::TryInto<nitrokey::CommandError>,
+ E: error::TryInto<nitrokey::Error>,
{
let mut data = data;
let mut retry = 3;
@@ -216,7 +216,7 @@ where
Ok(result) => return Ok(result),
Err((new_data, err)) => match err.try_into() {
Ok(err) => match err {
- nitrokey::CommandError::WrongPassword => {
+ nitrokey::Error::CommandError(nitrokey::CommandError::WrongPassword) => {
pinentry::clear(pin_entry)?;
retry -= 1;
@@ -245,7 +245,7 @@ fn try_with_pin_and_data<D, F, R, E>(
) -> Result<R>
where
F: FnMut(&mut args::ExecCtx<'_>, D, &str) -> result::Result<R, (D, E)>,
- E: Into<Error> + error::TryInto<nitrokey::CommandError>,
+ E: Into<Error> + error::TryInto<nitrokey::Error>,
{
let pin = match pin_entry.pin_type() {
// Ideally we would not clone here, but that would require us to
@@ -280,7 +280,7 @@ fn try_with_pin<F, E>(
) -> Result<()>
where
F: FnMut(&str) -> result::Result<(), E>,
- E: Into<Error> + error::TryInto<nitrokey::CommandError>,
+ E: Into<Error> + error::TryInto<nitrokey::Error>,
{
try_with_pin_and_data(ctx, pin_entry, msg, (), |_ctx, data, pin| {
op(pin).map_err(|err| (data, err))
@@ -717,8 +717,8 @@ fn print_otp_status(
};
let name = match result {
Ok(name) => name,
- Err(nitrokey::CommandError::InvalidSlot) => return Ok(()),
- Err(nitrokey::CommandError::SlotNotProgrammed) => {
+ Err(nitrokey::Error::LibraryError(nitrokey::LibraryError::InvalidSlot)) => return Ok(()),
+ Err(nitrokey::Error::CommandError(nitrokey::CommandError::SlotNotProgrammed)) => {
if all {
"[not programmed]".to_string()
} else {
@@ -831,7 +831,7 @@ pub fn pin_unblock(ctx: &mut args::ExecCtx<'_>) -> Result<()> {
fn print_pws_data(
ctx: &mut args::ExecCtx<'_>,
description: &'static str,
- result: result::Result<String, nitrokey::CommandError>,
+ result: result::Result<String, nitrokey::Error>,
quiet: bool,
) -> Result<()> {
let value = result.map_err(|err| get_error("Could not access PWS slot", err))?;
@@ -845,7 +845,7 @@ fn print_pws_data(
fn check_slot(pws: &nitrokey::PasswordSafe<'_>, slot: u8) -> Result<()> {
if slot >= nitrokey::SLOT_COUNT {
- return Err(nitrokey::CommandError::InvalidSlot.into());
+ return Err(nitrokey::Error::from(nitrokey::LibraryError::InvalidSlot).into());
}
let status = pws
.get_slot_status()
@@ -855,7 +855,7 @@ fn check_slot(pws: &nitrokey::PasswordSafe<'_>, slot: u8) -> Result<()> {
} else {
Err(get_error(
"Could not access PWS slot",
- nitrokey::CommandError::SlotNotProgrammed,
+ nitrokey::CommandError::SlotNotProgrammed.into(),
))
}
}
diff --git a/nitrocli/src/error.rs b/nitrocli/src/error.rs
index c0e7403..819bed8 100644
--- a/nitrocli/src/error.rs
+++ b/nitrocli/src/error.rs
@@ -41,16 +41,16 @@ where
#[derive(Debug)]
pub enum Error {
ArgparseError(i32),
- CommandError(Option<&'static str>, nitrokey::CommandError),
IoError(io::Error),
+ NitrokeyError(Option<&'static str>, nitrokey::Error),
Utf8Error(str::Utf8Error),
Error(String),
}
-impl TryInto<nitrokey::CommandError> for Error {
- fn try_into(self) -> Result<nitrokey::CommandError, Error> {
+impl TryInto<nitrokey::Error> for Error {
+ fn try_into(self) -> Result<nitrokey::Error, Error> {
match self {
- Error::CommandError(_, err) => Ok(err),
+ Error::NitrokeyError(_, err) => Ok(err),
err => Err(err),
}
}
@@ -62,9 +62,9 @@ impl From<&str> for Error {
}
}
-impl From<nitrokey::CommandError> for Error {
- fn from(e: nitrokey::CommandError) -> Error {
- Error::CommandError(None, e)
+impl From<nitrokey::Error> for Error {
+ fn from(e: nitrokey::Error) -> Error {
+ Error::NitrokeyError(None, e)
}
}
@@ -90,7 +90,7 @@ impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match *self {
Error::ArgparseError(_) => write!(f, "Could not parse arguments"),
- Error::CommandError(ref ctx, ref e) => {
+ Error::NitrokeyError(ref ctx, ref e) => {
if let Some(ctx) = ctx {
write!(f, "{}: ", ctx)?;
}
diff --git a/nitrocli/src/tests/mod.rs b/nitrocli/src/tests/mod.rs
index c823f52..0e5d8bc 100644
--- a/nitrocli/src/tests/mod.rs
+++ b/nitrocli/src/tests/mod.rs
@@ -54,6 +54,8 @@ pub trait UnwrapError {
fn unwrap_str_err(self) -> String;
/// Unwrap a Error::CommandError variant.
fn unwrap_cmd_err(self) -> (Option<&'static str>, nitrokey::CommandError);
+ /// Unwrap a Error::LibraryError variant.
+ fn unwrap_lib_err(self) -> (Option<&'static str>, nitrokey::LibraryError);
}
impl<T> UnwrapError for crate::Result<T>
@@ -69,7 +71,20 @@ where
fn unwrap_cmd_err(self) -> (Option<&'static str>, nitrokey::CommandError) {
match self.unwrap_err() {
- crate::Error::CommandError(ctx, err) => (ctx, err),
+ crate::Error::NitrokeyError(ctx, err) => match err {
+ nitrokey::Error::CommandError(err) => (ctx, err),
+ err => panic!("Unexpected error variant found: {:?}", err),
+ },
+ err => panic!("Unexpected error variant found: {:?}", err),
+ }
+ }
+
+ fn unwrap_lib_err(self) -> (Option<&'static str>, nitrokey::LibraryError) {
+ match self.unwrap_err() {
+ crate::Error::NitrokeyError(ctx, err) => match err {
+ nitrokey::Error::LibraryError(err) => (ctx, err),
+ err => panic!("Unexpected error variant found: {:?}", err),
+ },
err => panic!("Unexpected error variant found: {:?}", err),
}
}
diff --git a/nitrocli/src/tests/otp.rs b/nitrocli/src/tests/otp.rs
index 531ed5f..2893e80 100644
--- a/nitrocli/src/tests/otp.rs
+++ b/nitrocli/src/tests/otp.rs
@@ -35,10 +35,10 @@ fn set_invalid_slot(device: nitrokey::DeviceWrapper) {
let res = Nitrocli::with_dev(device).handle(&["otp", "set", "100", "name", "1234"]);
assert_eq!(
- res.unwrap_cmd_err(),
+ res.unwrap_lib_err(),
(
Some("Could not write OTP slot"),
- nitrokey::CommandError::InvalidSlot
+ nitrokey::LibraryError::InvalidSlot
)
);
}
diff --git a/nitrocli/src/tests/pin.rs b/nitrocli/src/tests/pin.rs
index fe61b2d..69e0ff9 100644
--- a/nitrocli/src/tests/pin.rs
+++ b/nitrocli/src/tests/pin.rs
@@ -25,7 +25,10 @@ use super::*;
#[test_device]
fn unblock(device: nitrokey::DeviceWrapper) -> crate::Result<()> {
let (device, err) = device.authenticate_user("wrong-pin").unwrap_err();
- assert_eq!(err, nitrokey::CommandError::WrongPassword);
+ match err {
+ nitrokey::Error::CommandError(err) if err == nitrokey::CommandError::WrongPassword => (),
+ _ => panic!("Unexpected error variant found: {:?}", err),
+ }
assert!(device.get_user_retry_count() < 3);
let model = device.get_model();
@@ -48,7 +51,11 @@ fn set_user(device: nitrokey::DeviceWrapper) -> crate::Result<()> {
let (device, err) = device
.authenticate_user(NITROKEY_DEFAULT_USER_PIN)
.unwrap_err();
- assert_eq!(err, nitrokey::CommandError::WrongPassword);
+
+ match err {
+ nitrokey::Error::CommandError(err) if err == nitrokey::CommandError::WrongPassword => (),
+ _ => panic!("Unexpected error variant found: {:?}", err),
+ }
drop(device);
// Revert to the default user PIN.
diff --git a/nitrocli/src/tests/pws.rs b/nitrocli/src/tests/pws.rs
index 5d0f245..9468dcf 100644
--- a/nitrocli/src/tests/pws.rs
+++ b/nitrocli/src/tests/pws.rs
@@ -24,10 +24,10 @@ fn set_invalid_slot(device: nitrokey::DeviceWrapper) {
let res = Nitrocli::with_dev(device).handle(&["pws", "set", "100", "name", "login", "1234"]);
assert_eq!(
- res.unwrap_cmd_err(),
+ res.unwrap_lib_err(),
(
Some("Could not write PWS slot"),
- nitrokey::CommandError::InvalidSlot
+ nitrokey::LibraryError::InvalidSlot
)
);
}