diff options
Diffstat (limited to 'nitrocli')
-rw-r--r-- | nitrocli/CHANGELOG.md | 5 | ||||
-rw-r--r-- | nitrocli/Cargo.lock | 10 | ||||
-rw-r--r-- | nitrocli/Cargo.toml | 4 | ||||
-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 |
9 files changed, 61 insertions, 34 deletions
diff --git a/nitrocli/CHANGELOG.md b/nitrocli/CHANGELOG.md index 13f80c0..7099c6a 100644 --- a/nitrocli/CHANGELOG.md +++ b/nitrocli/CHANGELOG.md @@ -1,3 +1,8 @@ +Unreleased +---------- +- Bumped `nitrokey` dependency to `0.4.0-alpha.0` + + 0.3.0 ----- - Added `unencrypted` command with `set` subcommand for changing the diff --git a/nitrocli/Cargo.lock b/nitrocli/Cargo.lock index 59bb9c9..8477b6a 100644 --- a/nitrocli/Cargo.lock +++ b/nitrocli/Cargo.lock @@ -77,14 +77,14 @@ dependencies = [ "argparse 0.2.2", "base32 0.4.0", "libc 0.2.66", - "nitrokey 0.3.5", - "nitrokey-test 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "nitrokey 0.4.0-alpha.0", + "nitrokey-test 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "nitrokey" -version = "0.3.5" +version = "0.4.0-alpha.0" dependencies = [ "libc 0.2.66", "nitrokey-sys 3.4.3", @@ -101,7 +101,7 @@ dependencies = [ [[package]] name = "nitrokey-test" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", @@ -230,7 +230,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" "checksum memchr 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e1dd4eaac298c32ce07eb6ed9242eda7d82955b9170b7d6db59b2e02cc63fcb8" -"checksum nitrokey-test 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6226eaa31d1bbb031314d9288eb0e1bf6a70e7053da7960fea13ee84cab330ea" +"checksum nitrokey-test 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "54999e04037babf905431614d4bef874c4b80d496e361c7939920e2506faba5f" "checksum proc-macro2 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)" = "38fddd23d98b2144d197c0eca5705632d4fe2667d14a6be5df8934f8d74f1978" "checksum quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "cdd8e04bd9c52e0342b406469d494fcb033be4bdbe5c606016defbb1681411e1" "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" diff --git a/nitrocli/Cargo.toml b/nitrocli/Cargo.toml index f96df91..c2a061d 100644 --- a/nitrocli/Cargo.toml +++ b/nitrocli/Cargo.toml @@ -53,10 +53,10 @@ path = "../base32" version = "0.2" [dependencies.nitrokey] -version = "0.3.5" +version = "0.4.0-alpha.0" [dev-dependencies.nitrokey-test] -version = "0.1.1" +version = "0.2" [dev-dependencies.regex] version = "1" 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 ) ); } |