upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2024-12-10 12:12:14 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2024-12-10 12:12:14 +0000
commit36eb9395567dc0022b1700ec9cda1389baf22476 (patch)
treeb5ed71fc7431faacfa29690739db2fe77a0cdc7d /src/lib
parent8d8c21d05e4d8d7af30a96704a5919efc07010dc (diff)
fix(nostr_url): use nip05 in nostr url if cached
prioritise using nip05 nostr url format when the nip05, public key mapping is stored in the (usually local) git config.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/git/nostr_url.rs10
-rw-r--r--src/lib/repo_ref.rs20
2 files changed, 24 insertions, 6 deletions
diff --git a/src/lib/git/nostr_url.rs b/src/lib/git/nostr_url.rs
index 8bf458b..bc56e1a 100644
--- a/src/lib/git/nostr_url.rs
+++ b/src/lib/git/nostr_url.rs
@@ -237,6 +237,16 @@ fn resolve_nip05_from_git_config_cache(nip05: &str, git_repo: &Option<&Repo>) ->
237 } 237 }
238} 238}
239 239
240pub fn use_nip05_git_config_cache_to_find_nip05_from_public_key(
241 public_key: &PublicKey,
242 git_repo: &Option<&Repo>,
243) -> Result<Option<String>> {
244 let h = load_nip_cache(git_repo)?;
245 Ok(h.iter()
246 .find_map(|(k, v)| if *v == *public_key { Some(k) } else { None })
247 .cloned())
248}
249
240fn save_nip05_to_git_config_cache( 250fn save_nip05_to_git_config_cache(
241 nip05: &str, 251 nip05: &str,
242 public_key: &PublicKey, 252 public_key: &PublicKey,
diff --git a/src/lib/repo_ref.rs b/src/lib/repo_ref.rs
index 089befc..9a3c8f1 100644
--- a/src/lib/repo_ref.rs
+++ b/src/lib/repo_ref.rs
@@ -19,7 +19,10 @@ use crate::{
19 Interactor, InteractorPrompt, PromptChoiceParms, PromptConfirmParms, PromptInputParms, 19 Interactor, InteractorPrompt, PromptChoiceParms, PromptConfirmParms, PromptInputParms,
20 }, 20 },
21 client::{consolidate_fetch_reports, get_repo_ref_from_cache, sign_event, Connect}, 21 client::{consolidate_fetch_reports, get_repo_ref_from_cache, sign_event, Connect},
22 git::{nostr_url::NostrUrlDecoded, Repo, RepoActions}, 22 git::{
23 nostr_url::{use_nip05_git_config_cache_to_find_nip05_from_public_key, NostrUrlDecoded},
24 Repo, RepoActions,
25 },
23 login::user::get_user_details, 26 login::user::get_user_details,
24}; 27};
25 28
@@ -232,15 +235,20 @@ impl RepoRef {
232 .collect::<Vec<(Coordinate, Option<Timestamp>)>>() 235 .collect::<Vec<(Coordinate, Option<Timestamp>)>>()
233 } 236 }
234 237
235 pub fn to_nostr_git_url(&self) -> String { 238 pub fn to_nostr_git_url(&self, git_repo: &Option<&Repo>) -> String {
239 let c = self.coordinate_with_hint();
236 format!( 240 format!(
237 "{}", 241 "{}",
238 NostrUrlDecoded { 242 NostrUrlDecoded {
239 original_string: String::new(), 243 original_string: String::new(),
240 coordinate: self.coordinate_with_hint(), 244 nip05: use_nip05_git_config_cache_to_find_nip05_from_public_key(
245 &c.public_key,
246 git_repo,
247 )
248 .unwrap_or_default(),
249 coordinate: c,
241 protocol: None, 250 protocol: None,
242 user: None, 251 user: None,
243 nip05: None, // TODO: if nip05 for pubkey saved in local git config use it.
244 } 252 }
245 ) 253 )
246 } 254 }
@@ -446,10 +454,10 @@ fn set_or_create_git_remote_with_nostr_url(
446 repo_ref: &RepoRef, 454 repo_ref: &RepoRef,
447 git_repo: &Repo, 455 git_repo: &Repo,
448) -> Result<()> { 456) -> Result<()> {
449 let url = repo_ref.to_nostr_git_url(); 457 let url = repo_ref.to_nostr_git_url(&Some(git_repo));
450 if git_repo 458 if git_repo
451 .git_repo 459 .git_repo
452 .remote_set_url(name, &repo_ref.to_nostr_git_url()) 460 .remote_set_url(name, &repo_ref.to_nostr_git_url(&Some(git_repo)))
453 .is_err() 461 .is_err()
454 { 462 {
455 git_repo.git_repo.remote(name, &url)?; 463 git_repo.git_repo.remote(name, &url)?;