docserver/src/defs/cli.rs

96 lines
3.1 KiB
Rust

use clap::Parser;
use pasetoken_lib::pasetoken::ConfigPaSeToken;
//use pasetors::footer::Footer;
use crate::{PKG_NAME,PKG_VERSION};
use crate::tools::generate_uuid;
// Use `clap` to parse command line options with `derive` mode
#[derive(Parser, Debug)]
pub struct Cli {
/// * Configuration TOML file-path to run `WebServer` REQUIRED
#[clap(short = 'c', long = "config", value_parser, display_order=1)]
pub config_path: Option<String>,
/// Generate id key for identification
#[clap(short = 'i', long = "id", action, display_order=2)]
pub create_id: bool,
/// Path to generate PaSeTo public and secret keys to use for tokens
#[clap(short = 'p', long = "pasetoken", value_parser, display_order=3)]
pub pasetokeys_path: Option<String>,
/// Settings-toml-file to Generate PaSeTo Token (-o to filepath)
#[clap(short = 't', long = "token", value_parser, display_order=4)]
pub make_token: Option<String>,
/// Output path to save generated token with `make_token` (-t)
#[clap(short = 'o', long = "output", value_parser, display_order=5)]
pub output_path: Option<String>,
/// Show version
#[clap(short = 'v', long = "version", action, display_order=6)]
pub version: bool,
}
/// Runs some options from command line like: genererate id, PaSeTo keys, Token.
/// Set TOML config-path to load web-server settings
pub fn parse_args() -> String {
let args = Cli::parse();
if let Some(pasetokeys_path) = args.pasetokeys_path {
match pasetoken_lib::generate_keys(&pasetokeys_path,false) {
Ok(_) => println!("PaSeTo keys generated to: {}", &pasetokeys_path),
Err(e) => eprint!("Error generating keys: {}",e),
};
std::process::exit(0);
}
let output_path = if let Some(out_path) = args.output_path {
out_path
} else {
String::from("")
};
if let Some(def_path) = args.make_token {
match ConfigPaSeToken::token_from_file_defs(&def_path, &output_path) {
Ok(token) => {
if output_path.is_empty() {
println!("{}",&token)
} else {
println!("Token from defs {} generated to {}",&def_path,&output_path)
}
},
Err(e) => {
if output_path.is_empty() {
eprintln!("Error generating token from file defs {} error: {}",
&def_path, e
)
} else {
eprintln!("Error generating token from file defs {} to {} error: {}",
&def_path, &output_path, e
)
}
},
};
std::process::exit(0);
}
if args.create_id {
println!("{}",generate_uuid(String::from("abcdef0123456789")));
std::process::exit(0);
}
if args.version {
println!("{} version: {}",PKG_NAME,PKG_VERSION);
std::process::exit(0);
}
let config_path = args.config_path.unwrap_or(String::from(""));
if config_path.is_empty() {
eprintln!("No config-file found");
std::process::exit(2);
}
config_path
}