From cb92d2ac8a7e014eac28ddf9ad1e6500b840739f Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Wed, 27 Nov 2024 09:42:37 +0000 Subject: feat(account): move login/out cmds to account move login, logout export-keys commands to sub commands under account --- src/bin/ngit/cli.rs | 16 ++++++++++++++-- src/bin/ngit/main.rs | 12 +++++++----- tests/ngit_login.rs | 25 +++++++++++++------------ 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/bin/ngit/cli.rs b/src/bin/ngit/cli.rs index fce5664..851dd70 100644 --- a/src/bin/ngit/cli.rs +++ b/src/bin/ngit/cli.rs @@ -57,8 +57,6 @@ pub enum Commands { Fetch(sub_commands::fetch::SubCommandArgs), /// signal you are this repo's maintainer accepting proposals via nostr Init(sub_commands::init::SubCommandArgs), - /// export nostr keys to login to other nostr clients - ExportKeys, /// issue commits as a proposal Send(sub_commands::send::SubCommandArgs), /// list proposals; checkout, apply or download selected @@ -67,8 +65,22 @@ pub enum Commands { Push(sub_commands::push::SubCommandArgs), /// fetch and apply new proposal commits / revisions linked to branch Pull, + /// login, logout or export keys + Account(AccountSubCommandArgs), +} + +#[derive(Subcommand)] +pub enum AccountCommands { /// run with --nsec flag to change npub Login(sub_commands::login::SubCommandArgs), /// remove nostr account details stored in git config Logout, + /// export nostr keys to login to other nostr clients + ExportKeys, +} + +#[derive(clap::Parser)] +pub struct AccountSubCommandArgs { + #[command(subcommand)] + pub account_command: AccountCommands, } diff --git a/src/bin/ngit/main.rs b/src/bin/ngit/main.rs index cdd0e97..a49267b 100644 --- a/src/bin/ngit/main.rs +++ b/src/bin/ngit/main.rs @@ -4,7 +4,7 @@ use anyhow::Result; use clap::Parser; -use cli::{Cli, Commands}; +use cli::{AccountCommands, Cli, Commands}; mod cli; use ngit::{cli_interactor, client, git, git_events, login, repo_ref}; @@ -15,14 +15,16 @@ mod sub_commands; async fn main() -> Result<()> { let cli = Cli::parse(); match &cli.command { + Commands::Account(args) => match &args.account_command { + AccountCommands::Login(sub_args) => sub_commands::login::launch(&cli, sub_args).await, + AccountCommands::Logout => sub_commands::logout::launch().await, + AccountCommands::ExportKeys => sub_commands::export_keys::launch().await, + }, Commands::Fetch(args) => sub_commands::fetch::launch(&cli, args).await, - Commands::Login(args) => sub_commands::login::launch(&cli, args).await, - Commands::Logout => sub_commands::logout::launch().await, Commands::Init(args) => sub_commands::init::launch(&cli, args).await, - Commands::ExportKeys => sub_commands::export_keys::launch().await, - Commands::Send(args) => sub_commands::send::launch(&cli, args, false).await, Commands::List => sub_commands::list::launch().await, Commands::Pull => sub_commands::pull::launch().await, Commands::Push(args) => sub_commands::push::launch(&cli, args).await, + Commands::Send(args) => sub_commands::send::launch(&cli, args, false).await, } } diff --git a/tests/ngit_login.rs b/tests/ngit_login.rs index 0a8bc19..3d74c4a 100644 --- a/tests/ngit_login.rs +++ b/tests/ngit_login.rs @@ -38,7 +38,7 @@ fn first_time_login_choices_succeeds_with_nsec(p: &mut CliTester, nsec: &str) -> fn standard_first_time_login_with_nsec() -> Result { let test_repo = GitTestRepo::default(); - let mut p = CliTester::new_from_dir(&test_repo.dir, ["login", "--offline"]); + let mut p = CliTester::new_from_dir(&test_repo.dir, ["account", "login", "--offline"]); first_time_login_choices_succeeds_with_nsec(&mut p, TEST_KEY_1_NSEC)?; @@ -77,7 +77,7 @@ mod with_relays { let cli_tester_handle = std::thread::spawn(move || -> Result<()> { let test_repo = GitTestRepo::default(); - let mut p = CliTester::new_from_dir(&test_repo.dir, ["login"]); + let mut p = CliTester::new_from_dir(&test_repo.dir, ["account", "login"]); first_time_login_choices_succeeds_with_nsec(&mut p, TEST_KEY_1_NSEC)?; @@ -108,7 +108,7 @@ mod with_relays { let cli_tester_handle = std::thread::spawn(move || -> Result<()> { let test_repo = GitTestRepo::default(); - let mut p = CliTester::new_from_dir(&test_repo.dir, ["login"]); + let mut p = CliTester::new_from_dir(&test_repo.dir, ["account", "login"]); first_time_login_choices_succeeds_with_nsec(&mut p, TEST_KEY_1_NSEC)?; @@ -416,7 +416,7 @@ mod with_relays { let test_repo = GitTestRepo::default(); let mut p = CliTester::new_from_dir( &test_repo.dir, - ["login", "--nsec", TEST_KEY_1_NSEC], + ["account", "login", "--nsec", TEST_KEY_1_NSEC], ); p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?; @@ -458,7 +458,7 @@ mod with_relays { let cli_tester_handle = std::thread::spawn(move || -> Result<()> { let test_repo = GitTestRepo::default(); - let mut p = CliTester::new_from_dir(&test_repo.dir, ["login"]); + let mut p = CliTester::new_from_dir(&test_repo.dir, ["account", "login"]); first_time_login_choices_succeeds_with_nsec(&mut p, TEST_KEY_1_NSEC)?; @@ -512,7 +512,7 @@ mod with_relays { let cli_tester_handle = std::thread::spawn(move || -> Result<()> { let test_repo = GitTestRepo::default(); - let mut p = CliTester::new_from_dir(&test_repo.dir, ["login"]); + let mut p = CliTester::new_from_dir(&test_repo.dir, ["account", "login"]); first_time_login_choices_succeeds_with_nsec(&mut p, TEST_KEY_1_NSEC)?; @@ -553,7 +553,7 @@ mod with_relays { let cli_tester_handle = std::thread::spawn(move || -> Result<()> { let test_repo = GitTestRepo::default(); - let mut p = CliTester::new_from_dir(&test_repo.dir, ["login"]); + let mut p = CliTester::new_from_dir(&test_repo.dir, ["account", "login"]); first_time_login_choices_succeeds_with_nsec(&mut p, TEST_KEY_1_NSEC)?; @@ -628,7 +628,7 @@ mod with_offline_flag { #[test] fn succeeds_with_text_logged_in_as_npub() -> Result<()> { let test_repo = GitTestRepo::default(); - let mut p = CliTester::new_from_dir(&test_repo.dir, ["login", "--offline"]); + let mut p = CliTester::new_from_dir(&test_repo.dir, ["account", "login", "--offline"]); show_first_time_login_choices(&mut p)?.succeeds_with(0, false, Some(0))?; @@ -643,7 +643,7 @@ mod with_offline_flag { #[test] fn succeeds_with_hex_secret_key_in_place_of_nsec() -> Result<()> { let test_repo = GitTestRepo::default(); - let mut p = CliTester::new_from_dir(&test_repo.dir, ["login", "--offline"]); + let mut p = CliTester::new_from_dir(&test_repo.dir, ["account", "login", "--offline"]); show_first_time_login_choices(&mut p)?.succeeds_with(0, false, Some(0))?; @@ -661,7 +661,8 @@ mod with_offline_flag { #[test] fn prompts_for_nsec_until_valid() -> Result<()> { let test_repo = GitTestRepo::default(); - let mut p = CliTester::new_from_dir(&test_repo.dir, ["login", "--offline"]); + let mut p = + CliTester::new_from_dir(&test_repo.dir, ["account", "login", "--offline"]); show_first_time_login_choices(&mut p)?.succeeds_with(0, false, Some(0))?; @@ -698,7 +699,7 @@ mod with_offline_flag { let test_repo = GitTestRepo::default(); let mut p = CliTester::new_from_dir( &test_repo.dir, - ["login", "--offline", "--nsec", TEST_KEY_1_NSEC], + ["account", "login", "--offline", "--nsec", TEST_KEY_1_NSEC], ); p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?; @@ -713,7 +714,7 @@ mod with_offline_flag { let test_repo = GitTestRepo::default(); let mut p = CliTester::new_from_dir( &test_repo.dir, - ["login", "--offline", "--nsec", TEST_INVALID_NSEC], + ["account", "login", "--offline", "--nsec", TEST_INVALID_NSEC], ); p.expect_end_with( -- cgit v1.2.3