From 318e467b158b158cf9eb843318dc14141d1b8c54 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Sun, 21 May 2023 11:27:04 +0000 Subject: main and remaining subcommands --- src/sub_commands/change_user.rs | 63 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/sub_commands/change_user.rs (limited to 'src/sub_commands/change_user.rs') diff --git a/src/sub_commands/change_user.rs b/src/sub_commands/change_user.rs new file mode 100644 index 0000000..ac15d1d --- /dev/null +++ b/src/sub_commands/change_user.rs @@ -0,0 +1,63 @@ + + +use clap::Args; +use dialoguer::{Select, theme::ColorfulTheme, Confirm, Password}; +use nostr::{Keys, prelude::{FromSkStr}}; + +use crate::{config::{load_config, save_conifg}}; + +#[derive(Args)] +pub struct ChangeUserSubCommand { +} + +pub fn change_user(_sub_command_args: &ChangeUserSubCommand) { + + let mut cfg = load_config(); + + if cfg.private_key.is_some() { + if !Confirm::with_theme(&ColorfulTheme::default()) + .with_prompt("overwrite existing?") + .default(false) + .interact() + .unwrap() { + return; + } + } + + let selection = Select::with_theme(&ColorfulTheme::default()) + .items(&vec!["enter existing private key", "generate new keys"]) + .default(0) + .with_prompt("no keys are stored") + .interact().unwrap(); + + let key = match selection { + 0 => { + let mut prompt = "secret key (nsec, hex, etc)"; + loop { + let pk: String = Password::with_theme(&ColorfulTheme::default()) + .with_prompt(prompt) + .interact() + .unwrap(); + match Keys::from_sk_str(&pk) { + Ok(key) => { break key; }, + Err(_e) => { prompt = "error interpeting secret key. try again with nsec, hex, etc"; }, + } + } + } + _ => Keys::generate(), + }; + cfg.private_key = Some(key.secret_key().unwrap()); + + if cfg.default_admin_group_event_serialized.is_some() { + if !Confirm::with_theme(&ColorfulTheme::default()) + .with_prompt("remove default admin group? If not permissions on new repositories can only be changed by the previous user.") + .default(true) + .interact() + .unwrap() { + cfg.default_admin_group_event_serialized = None; + } + } + + save_conifg(&cfg); + println!("private key updated") +} -- cgit v1.2.3