opgpcard: Make TouchPolicy type safe
This commit is contained in:
parent
9dd4f3ab56
commit
e9787dcbd3
2 changed files with 30 additions and 16 deletions
|
@ -207,12 +207,8 @@ pub enum AdminCommand {
|
||||||
#[clap(name = "Key slot", short = 'k', long = "key", value_enum)]
|
#[clap(name = "Key slot", short = 'k', long = "key", value_enum)]
|
||||||
key: BasePlusAttKeySlot,
|
key: BasePlusAttKeySlot,
|
||||||
|
|
||||||
#[clap(
|
#[clap(name = "Policy", short = 'p', long = "policy", value_enum)]
|
||||||
name = "Policy (Off|On|Fixed|Cached|Cached-Fixed)",
|
policy: TouchPolicy,
|
||||||
short = 'p',
|
|
||||||
long = "policy"
|
|
||||||
)]
|
|
||||||
policy: String,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,3 +330,30 @@ impl From<BasePlusAttKeySlot> for openpgp_card_sequoia::types::KeyType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(ValueEnum, Debug, Clone)]
|
||||||
|
pub enum TouchPolicy {
|
||||||
|
#[clap(name = "Off")]
|
||||||
|
Off,
|
||||||
|
#[clap(name = "On")]
|
||||||
|
On,
|
||||||
|
#[clap(name = "Fixed")]
|
||||||
|
Fixed,
|
||||||
|
#[clap(name = "Cached")]
|
||||||
|
Cached,
|
||||||
|
#[clap(name = "Cached-Fixed")]
|
||||||
|
CachedFixed,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<TouchPolicy> for openpgp_card_sequoia::types::TouchPolicy {
|
||||||
|
fn from(tp: TouchPolicy) -> Self {
|
||||||
|
use openpgp_card_sequoia::types::TouchPolicy as OCTouchPolicy;
|
||||||
|
match tp {
|
||||||
|
TouchPolicy::On => OCTouchPolicy::On,
|
||||||
|
TouchPolicy::Off => OCTouchPolicy::Off,
|
||||||
|
TouchPolicy::Fixed => OCTouchPolicy::Fixed,
|
||||||
|
TouchPolicy::Cached => OCTouchPolicy::Cached,
|
||||||
|
TouchPolicy::CachedFixed => OCTouchPolicy::CachedFixed,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -335,16 +335,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
cli::AdminCommand::Touch { key, policy } => {
|
cli::AdminCommand::Touch { key, policy } => {
|
||||||
let kt = KeyType::from(key);
|
let kt = KeyType::from(key);
|
||||||
|
|
||||||
let pol = match policy.as_str() {
|
let pol = TouchPolicy::from(policy);
|
||||||
"Off" => TouchPolicy::Off,
|
|
||||||
"On" => TouchPolicy::On,
|
|
||||||
"Fixed" => TouchPolicy::Fixed,
|
|
||||||
"Cached" => TouchPolicy::Cached,
|
|
||||||
"Cached-Fixed" => TouchPolicy::CachedFixed,
|
|
||||||
_ => {
|
|
||||||
return Err(anyhow!("Unexpected Policy {}", policy).into());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut admin = util::verify_to_admin(&mut open, admin_pin.as_deref())?;
|
let mut admin = util::verify_to_admin(&mut open, admin_pin.as_deref())?;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue