#![cfg(feature = "cli")]
use clap::Parser;
use std::ffi::OsStr;
use std::fs::File;
use std::path::Path;
use std::process::exit;
use wallet_pass::sign;
#[derive(Debug, Parser)]
#[clap(version = "1.0", author = "Lars Westermann <git@lars-westermann.de>")]
struct Opts {
#[clap(short = 'p', long = "pass")]
pass_path: String,
#[clap(short = 'c', long = "certificate")]
certificate_path: String,
#[clap(short = 'w', long = "password")]
certificate_password: String,
#[clap(short = 'i', long = "intermediate")]
wwdr_intermediate_certificate_path: String,
#[clap(short = 'o', long = "output")]
output_path: Option<String>,
#[clap(short = 'f', long = "force")]
force_pass_signing: bool,
}
pub fn main() {
let opts: Opts = Opts::parse();
let output_path = if let Some(path) = opts.output_path {
path
} else {
let pass_name = Path::new(&opts.pass_path)
.file_stem()
.unwrap_or_else(|| OsStr::new("Pass"))
.to_str()
.unwrap_or("Pass");
format!("{}.pkpass", pass_name)
};
let path = Path::new(&output_path);
let file = File::create(&path).unwrap();
if let Err(e) = sign::sign_path(
&opts.pass_path,
None,
&opts.certificate_path,
&opts.certificate_password,
&opts.wwdr_intermediate_certificate_path,
file,
opts.force_pass_signing,
) {
eprintln!("{:?}", e);
exit(1);
}
}