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