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
blob: ac15d1d1457547da8561b6f2482f3191f93472ff (plain)
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")
}