upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/sub_commands/change_user.rs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2023-05-21 11:27:04 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2023-05-21 11:27:04 +0000
commit318e467b158b158cf9eb843318dc14141d1b8c54 (patch)
tree46ec99fccfac487b1ff2dd29d3b01fb970fcb88d /src/sub_commands/change_user.rs
parent2ce71c5434fb7245aad4d070e08bbf6792d79b4d (diff)
main and remaining subcommands
Diffstat (limited to 'src/sub_commands/change_user.rs')
-rw-r--r--src/sub_commands/change_user.rs63
1 files changed, 63 insertions, 0 deletions
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 @@
1
2
3use clap::Args;
4use dialoguer::{Select, theme::ColorfulTheme, Confirm, Password};
5use nostr::{Keys, prelude::{FromSkStr}};
6
7use crate::{config::{load_config, save_conifg}};
8
9#[derive(Args)]
10pub struct ChangeUserSubCommand {
11}
12
13pub fn change_user(_sub_command_args: &ChangeUserSubCommand) {
14
15 let mut cfg = load_config();
16
17 if cfg.private_key.is_some() {
18 if !Confirm::with_theme(&ColorfulTheme::default())
19 .with_prompt("overwrite existing?")
20 .default(false)
21 .interact()
22 .unwrap() {
23 return;
24 }
25 }
26
27 let selection = Select::with_theme(&ColorfulTheme::default())
28 .items(&vec!["enter existing private key", "generate new keys"])
29 .default(0)
30 .with_prompt("no keys are stored")
31 .interact().unwrap();
32
33 let key = match selection {
34 0 => {
35 let mut prompt = "secret key (nsec, hex, etc)";
36 loop {
37 let pk: String = Password::with_theme(&ColorfulTheme::default())
38 .with_prompt(prompt)
39 .interact()
40 .unwrap();
41 match Keys::from_sk_str(&pk) {
42 Ok(key) => { break key; },
43 Err(_e) => { prompt = "error interpeting secret key. try again with nsec, hex, etc"; },
44 }
45 }
46 }
47 _ => Keys::generate(),
48 };
49 cfg.private_key = Some(key.secret_key().unwrap());
50
51 if cfg.default_admin_group_event_serialized.is_some() {
52 if !Confirm::with_theme(&ColorfulTheme::default())
53 .with_prompt("remove default admin group? If not permissions on new repositories can only be changed by the previous user.")
54 .default(true)
55 .interact()
56 .unwrap() {
57 cfg.default_admin_group_event_serialized = None;
58 }
59 }
60
61 save_conifg(&cfg);
62 println!("private key updated")
63}