use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "acmex")]
#[command(about = "ACME v2 client for obtaining TLS certificates", long_about = None)]
#[command(version)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
#[arg(global = true, short, long, default_value = "info")]
pub log_level: String,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
Obtain(ObtainArgs),
Renew(RenewArgs),
Daemon(DaemonArgs),
Info(InfoArgs),
Account(AccountArgs),
Order(OrderArgs),
Cert(CertArgs),
Serve(ServeArgs),
}
#[derive(Parser, Debug)]
pub struct OrderArgs {
#[command(subcommand)]
pub command: OrderCommands,
}
#[derive(Subcommand, Debug)]
pub enum OrderCommands {
List,
Show {
#[arg(short, long)]
order_id: String,
},
}
#[derive(Parser, Debug)]
pub struct CertArgs {
#[command(subcommand)]
pub command: CertCommands,
}
#[derive(Subcommand, Debug)]
pub enum CertCommands {
List,
Revoke {
#[arg(short, long)]
cert: String,
#[arg(short, long)]
reason: Option<String>,
#[arg(short, long)]
key: String,
},
}
#[derive(Parser, Debug)]
pub struct ObtainArgs {
#[arg(short, long, required = true)]
pub domains: Vec<String>,
#[arg(short, long)]
pub email: String,
#[arg(short, long, default_value = "http-01")]
pub challenge: String,
#[arg(short, long, default_value = "certificate.pem")]
pub cert_path: String,
#[arg(short, long, default_value = "private_key.pem")]
pub key_path: String,
#[arg(long, default_value_t = false)]
pub prod: bool,
#[arg(long)]
pub dns_provider: Option<String>,
}
#[derive(Parser, Debug)]
pub struct RenewArgs {
#[arg(short, long, required = true)]
pub domains: Vec<String>,
#[arg(short, long, default_value = ".acmex")]
pub storage_path: String,
#[arg(long, default_value_t = false)]
pub force: bool,
}
#[derive(Parser, Debug)]
pub struct DaemonArgs {
#[arg(short, long, required = true)]
pub domains: Vec<String>,
#[arg(short, long)]
pub config: Option<String>,
#[arg(short, long, default_value = ".acmex")]
pub storage_path: String,
#[arg(long, default_value = "3600")]
pub check_interval: u64,
#[arg(long, default_value = "30")]
pub renew_before_days: u64,
#[arg(long)]
pub notify_email: Option<String>,
}
#[derive(Parser, Debug)]
pub struct InfoArgs {
#[arg(short, long, required = true)]
pub cert: String,
}
#[derive(Parser, Debug)]
pub struct AccountArgs {
#[command(subcommand)]
pub command: AccountCommands,
}
#[derive(Subcommand, Debug)]
pub enum AccountCommands {
Register(AccountRegisterArgs),
Update(AccountUpdateArgs),
Deactivate(AccountDeactivateArgs),
RotateKey(AccountRotateKeyArgs),
}
#[derive(Parser, Debug)]
pub struct AccountRegisterArgs {
#[arg(short, long, required = true)]
pub email: String,
#[arg(long, default_value_t = false)]
pub prod: bool,
#[arg(short, long, default_value = "account_key.pem")]
pub key_path: String,
}
#[derive(Parser, Debug)]
pub struct AccountUpdateArgs {
#[arg(short, long, required = true)]
pub key_path: String,
#[arg(short, long, required = true)]
pub email: String,
#[arg(long, default_value_t = false)]
pub prod: bool,
}
#[derive(Parser, Debug)]
pub struct AccountDeactivateArgs {
#[arg(short, long, required = true)]
pub key_path: String,
#[arg(long, default_value_t = false)]
pub prod: bool,
}
#[derive(Parser, Debug)]
pub struct AccountRotateKeyArgs {
#[arg(short, long, required = true)]
pub key_path: String,
#[arg(short, long, default_value = "account_key_new.pem")]
pub new_key_path: String,
#[arg(long, default_value_t = false)]
pub prod: bool,
}
#[derive(Parser, Debug)]
pub struct ServeArgs {
#[arg(short, long, default_value = "127.0.0.1:8080")]
pub addr: String,
#[arg(short, long)]
pub config: Option<String>,
}