fix: cal correct action

This commit is contained in:
Vlad Stan 2023-02-16 17:54:11 +02:00
parent 94730ba464
commit 2c0bcce8c7
2 changed files with 18 additions and 6 deletions

View file

@ -93,8 +93,7 @@ class NostrClientConnection:
self.websocket = websocket self.websocket = websocket
self.relay_id = relay_id self.relay_id = relay_id
self.filters: List[NostrFilter] = [] self.filters: List[NostrFilter] = []
self.authenticated = False self.pubkey: Optional[str] = None # set if authenticated
self.pubkey: Optional[str] = None
self._auth_challenge: Optional[str] = None self._auth_challenge: Optional[str] = None
self._auth_challenge_created_at = 0 self._auth_challenge_created_at = 0
@ -132,6 +131,9 @@ class NostrClientConnection:
pass pass
async def notify_event(self, event: NostrEvent) -> bool: async def notify_event(self, event: NostrEvent) -> bool:
if self._is_direct_message_for_other(event):
return False
for filter in self.filters: for filter in self.filters:
if filter.matches(event): if filter.matches(event):
resp = event.serialize_response(filter.subscription_id) resp = event.serialize_response(filter.subscription_id)
@ -139,6 +141,17 @@ class NostrClientConnection:
return True return True
return False 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): async def _broadcast_event(self, e: NostrEvent):
if self.broadcast_event: if self.broadcast_event:
await self.broadcast_event(self, e) await self.broadcast_event(self, e)
@ -172,11 +185,10 @@ class NostrClientConnection:
resp_nip20 += [valid, message] resp_nip20 += [valid, message]
await self._send_msg(resp_nip20) await self._send_msg(resp_nip20)
return None return None
self.authenticated = True
self.pubkey = e.pubkey self.pubkey = e.pubkey
return None 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()]) await self._send_msg(["AUTH", self._current_auth_challenge()])
resp_nip20 += [ resp_nip20 += [
False, False,
@ -229,7 +241,7 @@ class NostrClientConnection:
await mark_events_deleted(self.relay_id, NostrFilter(ids=ids)) await mark_events_deleted(self.relay_id, NostrFilter(ids=ids))
async def _handle_request(self, subscription_id: str, filter: NostrFilter) -> List: 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()]] return [["AUTH", self._current_auth_challenge()]]
filter.subscription_id = subscription_id filter.subscription_id = subscription_id

View file

@ -238,7 +238,7 @@ async function relayDetails(path) {
} }
this.relay.config.forcedAuthEvents.push(value) this.relay.config.forcedAuthEvents.push(value)
}, },
removeSkipAuthForEvent: function (eventKind) { removeForceAuthForEvent: function (eventKind) {
value = +eventKind value = +eventKind
this.relay.config.forcedAuthEvents = this.relay.config.forcedAuthEvents =
this.relay.config.forcedAuthEvents.filter(e => e !== value) this.relay.config.forcedAuthEvents.filter(e => e !== value)