diff options
Diffstat (limited to 'nitrocli/src')
-rw-r--r-- | nitrocli/src/commands.rs | 24 | ||||
-rw-r--r-- | nitrocli/src/error.rs | 16 | ||||
-rw-r--r-- | nitrocli/src/tests/mod.rs | 17 | ||||
-rw-r--r-- | nitrocli/src/tests/otp.rs | 4 | ||||
-rw-r--r-- | nitrocli/src/tests/pin.rs | 11 | ||||
-rw-r--r-- | nitrocli/src/tests/pws.rs | 4 |
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 ) ); } |