fix: resolve CI workflow path and add lint job
This commit is contained in:
134
src/cli.rs
Normal file
134
src/cli.rs
Normal file
@@ -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<String>,
|
||||
#[arg(short, long, value_name = "PROJECT")]
|
||||
project: Option<String>,
|
||||
},
|
||||
|
||||
#[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<usize>,
|
||||
#[arg(short, long, value_name = "PROJECT")]
|
||||
project: Option<String>,
|
||||
#[arg(short, long)]
|
||||
master_password: Option<String>,
|
||||
},
|
||||
|
||||
#[command(name = "list")]
|
||||
#[command(about = "List all tokens in the vault")]
|
||||
List {
|
||||
#[arg(short, long, value_name = "PROJECT")]
|
||||
project: Option<String>,
|
||||
#[arg(short, long)]
|
||||
master_password: Option<String>,
|
||||
},
|
||||
|
||||
#[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<String>,
|
||||
#[arg(short, long)]
|
||||
master_password: Option<String>,
|
||||
#[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<String>,
|
||||
#[arg(short, long)]
|
||||
master_password: Option<String>,
|
||||
},
|
||||
|
||||
#[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<String>,
|
||||
#[arg(short, long)]
|
||||
master_password: Option<String>,
|
||||
#[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<String>,
|
||||
#[arg(short, long)]
|
||||
master_password: Option<String>,
|
||||
},
|
||||
|
||||
#[command(name = "inject")]
|
||||
#[command(about = "Inject tokens into a .env file")]
|
||||
Inject {
|
||||
#[arg(short, long, value_name = "FILE")]
|
||||
env_file: Option<String>,
|
||||
#[arg(short, long, value_name = "PREFIX")]
|
||||
token_prefix: Option<String>,
|
||||
#[arg(short, long, value_name = "PROJECT")]
|
||||
project: Option<String>,
|
||||
#[arg(short, long)]
|
||||
master_password: Option<String>,
|
||||
#[arg(long)]
|
||||
dry_run: bool,
|
||||
},
|
||||
|
||||
#[command(name = "check-expired")]
|
||||
#[command(about = "Check for expired tokens")]
|
||||
CheckExpired {
|
||||
#[arg(short, long, value_name = "PROJECT")]
|
||||
project: Option<String>,
|
||||
#[arg(short, long)]
|
||||
master_password: Option<String>,
|
||||
},
|
||||
|
||||
#[command(name = "rotate-expired")]
|
||||
#[command(about = "Rotate all expired tokens")]
|
||||
RotateExpired {
|
||||
#[arg(short, long, value_name = "PROJECT")]
|
||||
project: Option<String>,
|
||||
#[arg(short, long)]
|
||||
master_password: Option<String>,
|
||||
},
|
||||
}
|
||||
|
||||
impl Cli {
|
||||
pub fn parse() -> Self {
|
||||
Parser::parse()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user