From f79014235e85554e3661b3f2a02b8fa88bc192ff Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Thu, 21 Nov 2024 16:53:17 +0000 Subject: feat(login): overhaul login experience * simplify login menu, making it more accessable to newcomers and easier to select remote signer options * enable `ngit login` to work from anywhere (not just a git repo) * assume fresh login details saved to global git config but fallback to local repository * maintain local repository login via `ngit login --local` * maintain login via CLI arguments eg `ngit send --nsec nsec123` * nudge users to remember nsec when pasting in ncryptsec for a better UX, whilst maintaining the option to be prompted for password everytime * create placeholder menu items for help menu and create account --- src/lib/git/mod.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src/lib/git') diff --git a/src/lib/git/mod.rs b/src/lib/git/mod.rs index 5d14ce3..45ac58c 100644 --- a/src/lib/git/mod.rs +++ b/src/lib/git/mod.rs @@ -860,6 +860,44 @@ fn extract_sig_from_patch_tags<'a>(tags: &'a Tags, tag_name: &str) -> Result, item: &str) -> Result> { + if let Some(git_repo) = git_repo { + git_repo.get_git_config_item(item, Some(false)) + } else { + Ok( + match git2::Config::open_default()?.open_global()?.get_entry(item) { + Ok(item) => item.value().map(|v| v.to_string()), + Err(_) => None, + }, + ) + } +} + +pub fn save_git_config_item(git_repo: &Option<&Repo>, item: &str, value: &str) -> Result<()> { + if let Some(git_repo) = git_repo { + git_repo.save_git_config_item(item, value, false) + } else { + git2::Config::open_default()? + .open_global()? + .set_str(item, value) + .context(format!("cannot set global git config item {}", item)) + } +} + +pub fn remove_git_config_item(git_repo: &Option<&Repo>, item: &str) -> Result { + if let Some(git_repo) = git_repo { + git_repo.remove_git_config_item(item, false) + } else if get_git_config_item(&None, item)?.is_none() { + Ok(false) + } else { + git2::Config::open_default()? + .open_global()? + .remove(item) + .context(format!("cannot remove existing git config item {}", item))?; + Ok(true) + } +} + #[cfg(test)] mod tests { use std::fs; -- cgit v1.2.3