aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arg_util.rs115
-rw-r--r--src/args.rs90
-rw-r--r--src/main.rs1
3 files changed, 29 insertions, 177 deletions
diff --git a/src/arg_util.rs b/src/arg_util.rs
index dbb9ce1..52d1020 100644
--- a/src/arg_util.rs
+++ b/src/arg_util.rs
@@ -33,35 +33,6 @@ macro_rules! Command {
)*
}
- impl ::std::convert::AsRef<str> for $name {
- fn as_ref(&self) -> &'static str {
- match *self {
- $(
- $name::$var(_) => $str,
- )*
- }
- }
- }
-
- impl ::std::fmt::Display for $name {
- fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
- write!(f, "{}", self.as_ref())
- }
- }
-
- impl ::std::str::FromStr for $name {
- type Err = &'static str;
-
- fn from_str(s: &str) -> ::std::result::Result<Self, Self::Err> {
- match s {
- $(
- $str => Ok($name::$var(::std::default::Default::default())),
- )*
- _ => Err("[error]"),
- }
- }
- }
-
#[allow(unused_qualifications)]
impl $name {
fn execute(
@@ -75,62 +46,6 @@ macro_rules! Command {
}
}
}
-
- impl_default!($name => $( $name::$var(::std::default::Default::default()) , )*);
- };
- ( $name:ident, [ $( $var:ident => ($str:expr, $exec:expr), ) *] ) => {
- #[derive(Debug, PartialEq, ::structopt::StructOpt)]
- pub enum $name {
- $(
- $var,
- )*
- }
-
- impl ::std::convert::AsRef<str> for $name {
- fn as_ref(&self) -> &'static str {
- match *self {
- $(
- $name::$var => $str,
- )*
- }
- }
- }
-
- impl ::std::fmt::Display for $name {
- fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
- write!(f, "{}", self.as_ref())
- }
- }
-
- impl ::std::str::FromStr for $name {
- type Err = &'static str;
-
- fn from_str(s: &str) -> ::std::result::Result<Self, Self::Err> {
- match s {
- $(
- $str => Ok($name::$var),
- )*
- _ => Err("[error]"),
- }
- }
- }
-
- #[allow(unused_qualifications)]
- impl $name {
- fn execute(
- self,
- ctx: &mut crate::args::ExecCtx<'_>,
- args: ::std::vec::Vec<::std::string::String>,
- ) -> crate::Result<()> {
- match self {
- $(
- $name::$var => $exec(ctx, args),
- )*
- }
- }
- }
-
- impl_default!($name => $( $name::$var , )*);
};
}
@@ -207,39 +122,9 @@ macro_rules! enum_int {
}
}
}
-
- impl_default!($name => $( $name::$var , )*);
-
- };
-}
-
-macro_rules! impl_default {
- ( $name:ident => $def:expr , $( $other:expr , ) *) => {
- impl ::std::default::Default for $name {
- fn default() -> Self {
- $def
- }
- }
};
}
-/// A macro for formatting the variants of an enum (as created by the
-/// Enum!{} macro) ready to be used in a help text. The supplied `fmt`
-/// needs to contain the named parameter `{variants}`, which will be
-/// replaced with a generated version of the enum's variants.
-macro_rules! fmt_enum {
- ( $enm:ident ) => {{
- fmt_enum!($enm.all())
- }};
- ( $all:expr ) => {{
- $all
- .iter()
- .map(::std::convert::AsRef::as_ref)
- .collect::<::std::vec::Vec<_>>()
- .join("|")
- }};
-}
-
#[cfg(test)]
mod tests {
Enum! {Command, [
diff --git a/src/args.rs b/src/args.rs
index b31ed8e..82140f3 100644
--- a/src/args.rs
+++ b/src/args.rs
@@ -29,38 +29,6 @@ use crate::RunCtx;
type Result<T> = result::Result<T, Error>;
-/// Wraps a writer and buffers its output.
-///
-/// This implementation is similar to `io::BufWriter`, but:
-/// - The inner writer is only written to if `flush` is called.
-/// - The buffer may grow infinitely large.
-struct BufWriter<'w, W: io::Write + ?Sized> {
- buf: Vec<u8>,
- inner: &'w mut W,
-}
-
-impl<'w, W: io::Write + ?Sized> BufWriter<'w, W> {
- pub fn new(inner: &'w mut W) -> Self {
- BufWriter {
- buf: Vec::with_capacity(128),
- inner,
- }
- }
-}
-
-impl<'w, W: io::Write + ?Sized> io::Write for BufWriter<'w, W> {
- fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
- self.buf.extend_from_slice(buf);
- Ok(buf.len())
- }
-
- fn flush(&mut self) -> io::Result<()> {
- self.inner.write_all(&self.buf)?;
- self.buf.clear();
- self.inner.flush()
- }
-}
-
trait Stdio {
fn stdio(&mut self) -> (&mut dyn io::Write, &mut dyn io::Write);
}
@@ -156,18 +124,18 @@ Command! {Command, [
]}
/// Reads or writes the device configuration
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct ConfigArgs {
#[structopt(subcommand)]
subcmd: ConfigCommand,
}
/// Prints the Nitrokey configuration
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct ConfigGetArgs {}
/// Changes the Nitrokey configuration
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct ConfigSetArgs {
/// Sets the numlock option to the given HOTP slot
#[structopt(short = "n", long)]
@@ -196,33 +164,33 @@ pub struct ConfigSetArgs {
}
/// Interacts with the device's encrypted volume
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct EncryptedArgs {
#[structopt(subcommand)]
subcmd: EncryptedCommand,
}
/// Closes the encrypted volume on a Nitrokey Storage
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct EncryptedCloseArgs {}
/// Opens the encrypted volume on a Nitrokey Storage
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct EncryptedOpenArgs {}
/// Interacts with the device's hidden volume
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct HiddenArgs {
#[structopt(subcommand)]
subcmd: HiddenCommand,
}
/// Closes the hidden volume on a Nitrokey Storage
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct HiddenCloseArgs {}
/// Creates a hidden volume on a Nitrokey Storage
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct HiddenCreateArgs {
/// The hidden volume slot to use
slot: u8,
@@ -233,22 +201,22 @@ pub struct HiddenCreateArgs {
}
/// Opens the hidden volume on a Nitrokey Storage
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct HiddenOpenArgs {}
/// Locks the connected Nitrokey device
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct LockArgs {}
/// Accesses one-time passwords
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct OtpArgs {
#[structopt(subcommand)]
subcmd: OtpCommand,
}
/// Clears a one-time password slot
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct OtpClearArgs {
/// The OTP algorithm to use
#[structopt(short, long, default_value = "totp")]
@@ -258,7 +226,7 @@ pub struct OtpClearArgs {
}
/// Generates a one-time password
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct OtpGetArgs {
/// The OTP algorithm to use
#[structopt(short, long, default_value = "totp")]
@@ -271,7 +239,7 @@ pub struct OtpGetArgs {
}
/// Configures a one-time password slot
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct OtpSetArgs {
/// The OTP algorithm to use
#[structopt(short, long, default_value = "totp")]
@@ -298,7 +266,7 @@ pub struct OtpSetArgs {
}
/// Prints the status of the one-time password slots
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct OtpStatusArgs {
/// Shows slots that are not programmed
#[structopt(short, long)]
@@ -306,18 +274,18 @@ pub struct OtpStatusArgs {
}
/// Manages the Nitrokey PINs
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct PinArgs {
#[structopt(subcommand)]
subcmd: PinCommand,
}
/// Clears the cached PINs
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct PinClearArgs {}
/// Changes a PIN
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct PinSetArgs {
/// The PIN type to change
#[structopt(name = "type")]
@@ -325,25 +293,25 @@ pub struct PinSetArgs {
}
/// Unblocks and resets the user PIN
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct PinUnblockArgs {}
/// Accesses the password safe
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct PwsArgs {
#[structopt(subcommand)]
subcmd: PwsCommand,
}
/// Clears a password safe slot
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct PwsClearArgs {
/// The PWS slot to clear
slot: u8,
}
/// Reads a password safe slot
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct PwsGetArgs {
/// Shows the name stored on the slot
#[structopt(short, long)]
@@ -362,7 +330,7 @@ pub struct PwsGetArgs {
}
/// Writes a password safe slot
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct PwsSetArgs {
/// The PWS slot to write
slot: u8,
@@ -375,7 +343,7 @@ pub struct PwsSetArgs {
}
/// Prints the status of the password safe slots
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct PwsStatusArgs {
/// Shows slots that are not programmed
#[structopt(short, long)]
@@ -383,22 +351,22 @@ pub struct PwsStatusArgs {
}
/// Performs a factory reset
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct ResetArgs {}
/// Prints the status of the connected Nitrokey device
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct StatusArgs {}
/// Interacts with the device's unencrypted volume
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct UnencryptedArgs {
#[structopt(subcommand)]
subcmd: UnencryptedCommand,
}
/// Changes the configuration of the unencrypted volume on a Nitrokey Storage
-#[derive(Debug, Default, PartialEq, structopt::StructOpt)]
+#[derive(Debug, PartialEq, structopt::StructOpt)]
pub struct UnencryptedSetArgs {
/// The mode to change to
#[structopt(name = "type")]
diff --git a/src/main.rs b/src/main.rs
index 831717e..9e81bf8 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -86,7 +86,6 @@ use crate::error::Error;
type Result<T> = result::Result<T, Error>;
-const NITROCLI: &str = "nitrocli";
const NITROCLI_ADMIN_PIN: &str = "NITROCLI_ADMIN_PIN";
const NITROCLI_USER_PIN: &str = "NITROCLI_USER_PIN";
const NITROCLI_NEW_ADMIN_PIN: &str = "NITROCLI_NEW_ADMIN_PIN";