Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions nostr-sdk/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@

## Unreleased

### Added

- local-relay: Add `LocalRelayBuilderNip42::relay_url` (https://github.com/nostrdevkit/nostr/pull/1476) to make it possible to configure a custom `relay_url` for the nip42 challenge validation

### Deprecated

- Deprecate `LocalRelayBuilder::max_query_results` and `LocalRelayBuilder::default_filter_limit` (https://github.com/nostrdevkit/nostr/pull/1461)
Expand Down
14 changes: 14 additions & 0 deletions nostr-sdk/src/local_relay/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,10 @@ pub struct LocalRelayBuilderNip42 {
pub mode: LocalRelayBuilderNip42Mode,
// /// Allowed public keys
// pub allowed: HashSet<PublicKey>,
/// Relay URL expected in NIP-42 authentication events.
///
/// If not set, the local relay's listening URL is used.
pub relay_url: Option<RelayUrl>,
}

impl LocalRelayBuilderNip42 {
Expand All @@ -238,6 +242,7 @@ impl LocalRelayBuilderNip42 {
pub fn write() -> Self {
Self {
mode: LocalRelayBuilderNip42Mode::Write,
relay_url: None,
}
}

Expand All @@ -246,6 +251,7 @@ impl LocalRelayBuilderNip42 {
pub fn read() -> Self {
Self {
mode: LocalRelayBuilderNip42Mode::Read,
relay_url: None,
}
}

Expand All @@ -254,8 +260,16 @@ impl LocalRelayBuilderNip42 {
pub fn read_and_write() -> Self {
Self {
mode: LocalRelayBuilderNip42Mode::Both,
relay_url: None,
}
}

/// Set the relay URL expected in NIP-42 authentication events.
#[inline]
pub fn relay_url(mut self, url: RelayUrl) -> Self {
self.relay_url = Some(url);
self
}
}

#[allow(missing_docs)]
Expand Down
7 changes: 6 additions & 1 deletion nostr-sdk/src/local_relay/local/inner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -917,7 +917,12 @@ impl InnerLocalRelay {
.await;
}

match session.nip42.check_challenge(&event, &self.url().await) {
let relay_url: RelayUrl =
match self.nip42.as_ref().and_then(|opts| opts.relay_url.as_ref()) {
Some(url) => url.clone(),
None => self.url().await,
};
match session.nip42.check_challenge(&event, &relay_url) {
Ok(()) => {
send_msg(
ws_tx,
Expand Down
2 changes: 2 additions & 0 deletions nostr-sdk/src/relay/api/send_event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,7 @@ mod tests {
// Mock relay
let opts = LocalRelayBuilderNip42 {
mode: LocalRelayBuilderNip42Mode::Write,
relay_url: None,
};
let mock = LocalRelay::builder().nip42(opts).build();
mock.run().await.unwrap();
Expand Down Expand Up @@ -370,6 +371,7 @@ mod tests {
// Mock relay
let opts = LocalRelayBuilderNip42 {
mode: LocalRelayBuilderNip42Mode::Write,
relay_url: None,
};
let mock = LocalRelay::builder().nip42(opts).build();
mock.run().await.unwrap();
Expand Down