diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2026-02-11 09:20:48 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2026-02-11 15:54:51 +0000 |
| commit | 15bf0d0b6befae6c81631c0e5d0dc2947dd3318a (patch) | |
| tree | 3d12d8b104c7a36ac8d2a7194da26fb432c95f23 /src/lib/login | |
| parent | 459d33b6d7d3e5fdd55780670cd05d8141e670ac (diff) | |
feat: use fallback relays for bootstrapping only
- Add --relay flag to 'ngit account create' allowing users to specify
relay URLs (repeatable). Defaults to relay-default-set when not provided.
- Remove fallback relays from fetch when repo context exists (repo
coordinate provided). Only use them for bootstrapping (profile discovery
with no repo context).
- Remove fallback relays from publish when repo or user relays exist.
Only use them when neither is available (e.g. new account signup).
- Update --customize help text to reflect new relay-default-set behavior.
Diffstat (limited to 'src/lib/login')
| -rw-r--r-- | src/lib/login/fresh.rs | 17 | ||||
| -rw-r--r-- | src/lib/login/user.rs | 2 |
2 files changed, 14 insertions, 5 deletions
diff --git a/src/lib/login/fresh.rs b/src/lib/login/fresh.rs index 886b0e4..8e49085 100644 --- a/src/lib/login/fresh.rs +++ b/src/lib/login/fresh.rs | |||
| @@ -715,6 +715,7 @@ pub async fn signup_non_interactive( | |||
| 715 | #[cfg(not(test))] client: Option<&Client>, | 715 | #[cfg(not(test))] client: Option<&Client>, |
| 716 | save_local: bool, | 716 | save_local: bool, |
| 717 | publish: bool, | 717 | publish: bool, |
| 718 | relay_urls: Vec<String>, | ||
| 718 | ) -> Result<(Arc<dyn NostrSigner>, PublicKey, SignerInfo, Keys)> { | 719 | ) -> Result<(Arc<dyn NostrSigner>, PublicKey, SignerInfo, Keys)> { |
| 719 | // Generate new keypair | 720 | // Generate new keypair |
| 720 | let keys = nostr::Keys::generate(); | 721 | let keys = nostr::Keys::generate(); |
| @@ -783,10 +784,9 @@ pub async fn signup_non_interactive( | |||
| 783 | if let Some(client) = client { | 784 | if let Some(client) = client { |
| 784 | let profile = EventBuilder::metadata(&Metadata::new().name(name)).sign_with_keys(&keys)?; | 785 | let profile = EventBuilder::metadata(&Metadata::new().name(name)).sign_with_keys(&keys)?; |
| 785 | let relay_list = EventBuilder::relay_list( | 786 | let relay_list = EventBuilder::relay_list( |
| 786 | client | 787 | relay_urls |
| 787 | .get_relay_default_set() | ||
| 788 | .iter() | 788 | .iter() |
| 789 | .map(|s| (RelayUrl::parse(s).unwrap(), None)), | 789 | .filter_map(|s| RelayUrl::parse(s).ok().map(|url| (url, None))), |
| 790 | ) | 790 | ) |
| 791 | .sign_with_keys(&keys)?; | 791 | .sign_with_keys(&keys)?; |
| 792 | 792 | ||
| @@ -799,7 +799,7 @@ pub async fn signup_non_interactive( | |||
| 799 | client, | 799 | client, |
| 800 | git_repo_path, | 800 | git_repo_path, |
| 801 | vec![profile, relay_list], | 801 | vec![profile, relay_list], |
| 802 | client.get_relay_default_set().clone(), | 802 | relay_urls, |
| 803 | vec![], | 803 | vec![], |
| 804 | true, | 804 | true, |
| 805 | false, | 805 | false, |
| @@ -848,12 +848,19 @@ async fn signup( | |||
| 848 | } | 848 | } |
| 849 | } | 849 | } |
| 850 | 850 | ||
| 851 | // Call the non-interactive function | 851 | // Call the non-interactive function, using relay_default_set as the |
| 852 | // relay list for interactive signup | ||
| 853 | let relay_urls = if let Some(c) = client { | ||
| 854 | c.get_relay_default_set().clone() | ||
| 855 | } else { | ||
| 856 | vec![] | ||
| 857 | }; | ||
| 852 | let (signer, public_key, signer_info, _keys) = signup_non_interactive( | 858 | let (signer, public_key, signer_info, _keys) = signup_non_interactive( |
| 853 | name.clone(), | 859 | name.clone(), |
| 854 | client, | 860 | client, |
| 855 | false, // save_local = false (will be saved globally by caller) | 861 | false, // save_local = false (will be saved globally by caller) |
| 856 | true, // publish = true (always publish in interactive mode) | 862 | true, // publish = true (always publish in interactive mode) |
| 863 | relay_urls, | ||
| 857 | ) | 864 | ) |
| 858 | .await?; | 865 | .await?; |
| 859 | 866 | ||
diff --git a/src/lib/login/user.rs b/src/lib/login/user.rs index 0b702ef..b273363 100644 --- a/src/lib/login/user.rs +++ b/src/lib/login/user.rs | |||
| @@ -113,6 +113,8 @@ pub async fn get_user_details( | |||
| 113 | } | 113 | } |
| 114 | Ok(user_ref) | 114 | Ok(user_ref) |
| 115 | } else { | 115 | } else { |
| 116 | // No cached profile found. Fall back to fetching from default relays | ||
| 117 | // (bootstrapping). | ||
| 116 | let empty = UserRef { | 118 | let empty = UserRef { |
| 117 | public_key: public_key.to_owned(), | 119 | public_key: public_key.to_owned(), |
| 118 | metadata: extract_user_metadata(public_key, &[])?, | 120 | metadata: extract_user_metadata(public_key, &[])?, |