1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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")
}
|