diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/client.rs | 20 | ||||
| -rw-r--r-- | src/lib/login/fresh.rs | 17 | ||||
| -rw-r--r-- | src/lib/login/user.rs | 2 |
3 files changed, 32 insertions, 7 deletions
diff --git a/src/lib/client.rs b/src/lib/client.rs index 9c49653..89fcaf7 100644 --- a/src/lib/client.rs +++ b/src/lib/client.rs | |||
| @@ -1577,7 +1577,14 @@ async fn create_relays_request( | |||
| 1577 | }; | 1577 | }; |
| 1578 | 1578 | ||
| 1579 | let relays = { | 1579 | let relays = { |
| 1580 | let mut relays = fallback_relays; | 1580 | // Only use fallback relays for bootstrapping (no repo context). |
| 1581 | // When we have a repo coordinate, rely on repo relays and coordinate | ||
| 1582 | // hint relays instead of always merging in the default set. | ||
| 1583 | let mut relays = if trusted_maintainer_coordinate.is_none() { | ||
| 1584 | fallback_relays | ||
| 1585 | } else { | ||
| 1586 | HashSet::new() | ||
| 1587 | }; | ||
| 1581 | if let Some(repo_ref) = &repo_ref { | 1588 | if let Some(repo_ref) = &repo_ref { |
| 1582 | for r in repo_ref.relays.clone() { | 1589 | for r in repo_ref.relays.clone() { |
| 1583 | relays.insert(r); | 1590 | relays.insert(r); |
| @@ -1588,6 +1595,8 @@ async fn create_relays_request( | |||
| 1588 | relays.insert(r.clone()); | 1595 | relays.insert(r.clone()); |
| 1589 | } | 1596 | } |
| 1590 | } | 1597 | } |
| 1598 | // When bootstrapping with no repo context and no coordinate hints, | ||
| 1599 | // we need at least the fallback relays to discover the user profile. | ||
| 1591 | relays | 1600 | relays |
| 1592 | }; | 1601 | }; |
| 1593 | 1602 | ||
| @@ -2238,8 +2247,15 @@ pub async fn send_events( | |||
| 2238 | animate: bool, | 2247 | animate: bool, |
| 2239 | silent: bool, | 2248 | silent: bool, |
| 2240 | ) -> Result<()> { | 2249 | ) -> Result<()> { |
| 2250 | // Only include default relays as fallback when there are no repo relays | ||
| 2251 | // (bootstrapping case, e.g. new account signup). When repo relays exist, | ||
| 2252 | // trust the repo and user relay configuration. | ||
| 2241 | let fallback = [ | 2253 | let fallback = [ |
| 2242 | client.get_relay_default_set().clone(), | 2254 | if repo_read_relays.is_empty() && my_write_relays.is_empty() { |
| 2255 | client.get_relay_default_set().clone() | ||
| 2256 | } else { | ||
| 2257 | vec![] | ||
| 2258 | }, | ||
| 2243 | if events.iter().any(|e| e.kind.eq(&Kind::GitRepoAnnouncement)) { | 2259 | if events.iter().any(|e| e.kind.eq(&Kind::GitRepoAnnouncement)) { |
| 2244 | client.get_blaster_relays().clone() | 2260 | client.get_blaster_relays().clone() |
| 2245 | } else { | 2261 | } else { |
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, &[])?, |