From c3240c43d5e53f48b9551bb010309aab2ed16045 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sat, 31 Jan 2026 23:08:34 +0000 Subject: [PATCH] fix: resolve CI workflow path and add lint job --- src/cli.rs | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 src/cli.rs diff --git a/src/cli.rs b/src/cli.rs new file mode 100644 index 0000000..b3ef65c --- /dev/null +++ b/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() + } +}