feat(cli): authforgectl totp enroll/status/revoke
This commit is contained in:
@@ -241,6 +241,52 @@ pub(crate) async fn dispatch(json: bool, cmd: super::Cmd) -> Result<()> {
|
||||
std::process::exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
super::Cmd::Totp {
|
||||
cmd: super::TotpCmd::Enroll { user },
|
||||
} => {
|
||||
let e = d.enroll_totp(&user).await?;
|
||||
if json {
|
||||
println!("{}", serde_json::to_string_pretty(&e)?);
|
||||
} else {
|
||||
println!("secret: {}", e.secret_b32);
|
||||
println!("uri: {}", e.otpauth_uri);
|
||||
println!();
|
||||
println!("Scan the URI as a QR or enter the secret in your authenticator app.");
|
||||
}
|
||||
}
|
||||
|
||||
super::Cmd::Totp {
|
||||
cmd: super::TotpCmd::Status { user },
|
||||
} => {
|
||||
let enrolled = d.is_totp_enrolled(&user).await?;
|
||||
if json {
|
||||
println!(
|
||||
"{}",
|
||||
serde_json::json!({ "user": user, "enrolled": enrolled })
|
||||
);
|
||||
} else if enrolled {
|
||||
println!("{user}: enrolled");
|
||||
} else {
|
||||
println!("{user}: not enrolled");
|
||||
}
|
||||
}
|
||||
|
||||
super::Cmd::Totp {
|
||||
cmd: super::TotpCmd::Revoke { user },
|
||||
} => {
|
||||
let removed = d.revoke_totp(&user).await?;
|
||||
if removed {
|
||||
if !json {
|
||||
println!("revoked TOTP for {user}");
|
||||
}
|
||||
} else {
|
||||
if !json {
|
||||
eprintln!("not enrolled: {user}");
|
||||
}
|
||||
std::process::exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user