diff --git a/clippable-cli/Cargo.toml b/clippable-cli/Cargo.toml new file mode 100644 index 0000000..8bd45ba --- /dev/null +++ b/clippable-cli/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "clippable-cli" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0" } + +# For commanline parsing +clap = "2.33.3" + +dblib = { path = "../dblib" } diff --git a/clippable-cli/src/main.rs b/clippable-cli/src/main.rs new file mode 100644 index 0000000..4b11c86 --- /dev/null +++ b/clippable-cli/src/main.rs @@ -0,0 +1,69 @@ +use clap::{App, Arg, AppSettings}; +use dblib::DB; + +const DEFAULT_STORAGE: &'static str = "store.json"; + +fn main() { + let matches = App::new("clippable-cli") + .version("0.1") + .author("shockrah") + .about("CLI Tool for clippable") + .setting(AppSettings::ArgRequiredElseHelp) + .arg(Arg::with_name("generate-key") + .short("g") + .long("generate-key") + .value_name("NAME") + .help("Generates a new API key to allow usage in this server")) + .arg(Arg::with_name("remove-key") + .short("r") + .long("remove-key") + .value_name("NAME") + .help("Removes a key based on the given name")) + .arg(Arg::with_name("update-key") + .short("u") + .long("update-key") + .value_name("NAME") + .help("Generate a new key for that user identified by NAME")) + .get_matches(); + + if let Some(name) = matches.value_of("generate-key") { + println!("Genating key for {}", name); + generate_key(String::from(name)); + } + + if let Some(name) = matches.value_of("remove-key") { + println!("Removing key for {}", name); + remove_key(String::from(name)); + } + + if let Some(name) = matches.value_of("update-key") { + println!("Updating key for {}", name); + update_key(String::from(name)); + } + +} + +fn generate_key(name: String) { + match DB::new_entry(String::from(DEFAULT_STORAGE), name.clone()) { + Ok(key) => println!("Key for {}\t{}", name, key), + Err(e) => eprintln!("Error: {}", e) + } +} + +fn remove_key(name: String) { + match DB::remove_entry(String::from(DEFAULT_STORAGE), name.clone()) { + Ok(removed) => { + match removed { + true => println!("Removed key for {}", name), + false => println!("Warning: unable to remove key for {}", name) + }; + }, + Err(e) => eprintln!("Error removing key: {}", e) + } +} + +fn update_key(name: String) { + remove_key(name.clone()); + generate_key(name); +} +