add flag to print credentials as csv
This commit is contained in:
parent
5cb3982d65
commit
2bc0e2d64a
20
src/cli.rs
20
src/cli.rs
@ -66,7 +66,7 @@ impl<T: Display + FromStr> FromStr for CommaSeparated<T> {
|
|||||||
|
|
||||||
#[derive(Debug, StructOpt)]
|
#[derive(Debug, StructOpt)]
|
||||||
pub struct Credentials {
|
pub struct Credentials {
|
||||||
/// FIDO credential ids, seperated by ',' generate using fido2luks credential
|
/// FIDO credential ids, separated by ',' generate using fido2luks credential
|
||||||
#[structopt(name = "credential-id", env = "FIDO2LUKS_CREDENTIAL_ID")]
|
#[structopt(name = "credential-id", env = "FIDO2LUKS_CREDENTIAL_ID")]
|
||||||
pub ids: CommaSeparated<HexEncoded>,
|
pub ids: CommaSeparated<HexEncoded>,
|
||||||
}
|
}
|
||||||
@ -292,12 +292,16 @@ pub enum Command {
|
|||||||
Token(TokenCommand),
|
Token(TokenCommand),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///LUKS2 token related operations
|
||||||
#[derive(Debug, StructOpt)]
|
#[derive(Debug, StructOpt)]
|
||||||
pub enum TokenCommand {
|
pub enum TokenCommand {
|
||||||
/// List all tokens associated with the specified device
|
/// List all tokens associated with the specified device
|
||||||
List {
|
List {
|
||||||
#[structopt(env = "FIDO2LUKS_DEVICE")]
|
#[structopt(env = "FIDO2LUKS_DEVICE")]
|
||||||
device: PathBuf,
|
device: PathBuf,
|
||||||
|
/// Dump all credentials as CSV
|
||||||
|
#[structopt(long = "csv")]
|
||||||
|
csv: bool,
|
||||||
},
|
},
|
||||||
/// Add credential to a keyslot
|
/// Add credential to a keyslot
|
||||||
Add {
|
Add {
|
||||||
@ -585,7 +589,10 @@ pub fn run_cli() -> Fido2LuksResult<()> {
|
|||||||
_ => exit(1),
|
_ => exit(1),
|
||||||
},
|
},
|
||||||
Command::Token(cmd) => match cmd {
|
Command::Token(cmd) => match cmd {
|
||||||
TokenCommand::List { device } => {
|
TokenCommand::List {
|
||||||
|
device,
|
||||||
|
csv: dump_credentials,
|
||||||
|
} => {
|
||||||
let mut dev = LuksDevice::load(device)?;
|
let mut dev = LuksDevice::load(device)?;
|
||||||
let mut creds = Vec::new();
|
let mut creds = Vec::new();
|
||||||
for token in dev.tokens()? {
|
for token in dev.tokens()? {
|
||||||
@ -593,8 +600,14 @@ pub fn run_cli() -> Fido2LuksResult<()> {
|
|||||||
for cred in token.credential.iter() {
|
for cred in token.credential.iter() {
|
||||||
if !creds.contains(cred) {
|
if !creds.contains(cred) {
|
||||||
creds.push(cred.clone());
|
creds.push(cred.clone());
|
||||||
|
if *dump_credentials {
|
||||||
|
print!("{}{}", if creds.len() == 1 { "" } else { "," }, cred);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if *dump_credentials {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
println!(
|
println!(
|
||||||
"{}:\n\tSlots: {}\n\tCredentials: {}",
|
"{}:\n\tSlots: {}\n\tCredentials: {}",
|
||||||
id,
|
id,
|
||||||
@ -615,6 +628,9 @@ pub fn run_cli() -> Fido2LuksResult<()> {
|
|||||||
.join(",")
|
.join(",")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if *dump_credentials {
|
||||||
|
println!();
|
||||||
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
TokenCommand::Add {
|
TokenCommand::Add {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user