From 861833685b39f5ab920a728d20a0c866c0b6d11a Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sat, 31 Jan 2026 22:54:33 +0000 Subject: [PATCH] Initial upload: api-token-vault Rust CLI tool with encrypted vault storage --- app/api-token-vault/src/cli.rs | 134 +++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 app/api-token-vault/src/cli.rs diff --git a/app/api-token-vault/src/cli.rs b/app/api-token-vault/src/cli.rs new file mode 100644 index 0000000..b3ef65c --- /dev/null +++ b/app/api-token-vault/src/cli.rs @@ -0,0 +1,134 @@ +use clap::{Parser, Subcommand}; + +#[derive(Parser, Debug)] +#[command(name = "api-token-vault")] +#[command(author = "API Token Vault")] +#[command(version = "0.1.0")] +#[command(about = "Secure API token management with encrypted vault storage", long_about = None)] +pub struct Cli { + #[command(subcommand)] + pub command: Commands, +} + +#[derive(Subcommand, Debug)] +pub enum Commands { + #[command(name = "init")] + #[command(about = "Initialize a new vault for a project")] + Init { + #[arg(short, long)] + master_password: Option, + #[arg(short, long, value_name = "PROJECT")] + project: Option, + }, + + #[command(name = "generate")] + #[command(about = "Generate a new secure API token")] + Generate { + #[arg(short, long, value_name = "NAME")] + name: String, + #[arg(short, long, value_name = "LENGTH")] + length: Option, + #[arg(short, long, value_name = "PROJECT")] + project: Option, + #[arg(short, long)] + master_password: Option, + }, + + #[command(name = "list")] + #[command(about = "List all tokens in the vault")] + List { + #[arg(short, long, value_name = "PROJECT")] + project: Option, + #[arg(short, long)] + master_password: Option, + }, + + #[command(name = "get")] + #[command(about = "Get a specific token value")] + Get { + #[arg(short, long, value_name = "NAME")] + name: String, + #[arg(short, long, value_name = "PROJECT")] + project: Option, + #[arg(short, long)] + master_password: Option, + #[arg(short, long)] + raw: bool, + }, + + #[command(name = "delete")] + #[command(about = "Delete a token from the vault")] + Delete { + #[arg(short, long, value_name = "NAME")] + name: String, + #[arg(short, long, value_name = "PROJECT")] + project: Option, + #[arg(short, long)] + master_password: Option, + }, + + #[command(name = "rotate")] + #[command(about = "Rotate (regenerate) a specific token")] + Rotate { + #[arg(short, long, value_name = "NAME")] + name: String, + #[arg(short, long, value_name = "PROJECT")] + project: Option, + #[arg(short, long)] + master_password: Option, + #[arg(long)] + force: bool, + }, + + #[command(name = "set-rotation")] + #[command(about = "Set auto-rotation schedule for a token")] + SetRotation { + #[arg(short, long, value_name = "NAME")] + name: String, + #[arg(short, long, value_name = "DAYS")] + days: u32, + #[arg(short, long, value_name = "PROJECT")] + project: Option, + #[arg(short, long)] + master_password: Option, + }, + + #[command(name = "inject")] + #[command(about = "Inject tokens into a .env file")] + Inject { + #[arg(short, long, value_name = "FILE")] + env_file: Option, + #[arg(short, long, value_name = "PREFIX")] + token_prefix: Option, + #[arg(short, long, value_name = "PROJECT")] + project: Option, + #[arg(short, long)] + master_password: Option, + #[arg(long)] + dry_run: bool, + }, + + #[command(name = "check-expired")] + #[command(about = "Check for expired tokens")] + CheckExpired { + #[arg(short, long, value_name = "PROJECT")] + project: Option, + #[arg(short, long)] + master_password: Option, + }, + + #[command(name = "rotate-expired")] + #[command(about = "Rotate all expired tokens")] + RotateExpired { + #[arg(short, long, value_name = "PROJECT")] + project: Option, + #[arg(short, long)] + master_password: Option, + }, +} + +impl Cli { + pub fn parse() -> Self { + Parser::parse() + } +}