diff --git a/client_manager.py b/client_manager.py index 2aeae89..84f39ca 100644 --- a/client_manager.py +++ b/client_manager.py @@ -93,8 +93,7 @@ class NostrClientConnection: self.websocket = websocket self.relay_id = relay_id self.filters: List[NostrFilter] = [] - self.authenticated = False - self.pubkey: Optional[str] = None + self.pubkey: Optional[str] = None # set if authenticated self._auth_challenge: Optional[str] = None self._auth_challenge_created_at = 0 @@ -132,6 +131,9 @@ class NostrClientConnection: pass async def notify_event(self, event: NostrEvent) -> bool: + if self._is_direct_message_for_other(event): + return False + for filter in self.filters: if filter.matches(event): resp = event.serialize_response(filter.subscription_id) @@ -139,6 +141,17 @@ class NostrClientConnection: return True return False + def _is_direct_message_for_other(self, event: NostrEvent) -> bool: + if not event.is_direct_message: + return False + if not self.client_config.event_requires_auth(event.kind): + return False + if not self.pubkey: + return True + if event.has_tag_value("p", self.pubkey): + return False + return True + async def _broadcast_event(self, e: NostrEvent): if self.broadcast_event: await self.broadcast_event(self, e) @@ -172,11 +185,10 @@ class NostrClientConnection: resp_nip20 += [valid, message] await self._send_msg(resp_nip20) return None - self.authenticated = True self.pubkey = e.pubkey return None - if not self.authenticated and self.client_config.event_requires_auth(e.kind): + if not self.pubkey and self.client_config.event_requires_auth(e.kind): await self._send_msg(["AUTH", self._current_auth_challenge()]) resp_nip20 += [ False, @@ -229,7 +241,7 @@ class NostrClientConnection: await mark_events_deleted(self.relay_id, NostrFilter(ids=ids)) async def _handle_request(self, subscription_id: str, filter: NostrFilter) -> List: - if not self.authenticated and self.client_config.require_auth_filter: + if not self.pubkey and self.client_config.require_auth_filter: return [["AUTH", self._current_auth_challenge()]] filter.subscription_id = subscription_id diff --git a/static/components/relay-details/relay-details.js b/static/components/relay-details/relay-details.js index 193b222..3c8111f 100644 --- a/static/components/relay-details/relay-details.js +++ b/static/components/relay-details/relay-details.js @@ -238,7 +238,7 @@ async function relayDetails(path) { } this.relay.config.forcedAuthEvents.push(value) }, - removeSkipAuthForEvent: function (eventKind) { + removeForceAuthForEvent: function (eventKind) { value = +eventKind this.relay.config.forcedAuthEvents = this.relay.config.forcedAuthEvents.filter(e => e !== value)