From b4094ad2f5001d3d4c710ab4b73c7744a11a88d0 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 8 Feb 2023 17:51:35 +0200 Subject: [PATCH] feat: limit the number of filters a client can have --- client_manager.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/client_manager.py b/client_manager.py index 3762091..12d9d1f 100644 --- a/client_manager.py +++ b/client_manager.py @@ -198,6 +198,9 @@ class NostrClientConnection: async def _handle_request(self, subscription_id: str, filter: NostrFilter) -> List: filter.subscription_id = subscription_id self.remove_filter(subscription_id) + if self._can_add_filter(): + return [["NOTICE", f"Maximum number of filters ({self.client_config.max_client_filters}) exceeded."]] + self.filters.append(filter) events = await get_events(self.relay_id, filter) serialized_events = [ @@ -207,8 +210,11 @@ class NostrClientConnection: serialized_events.append(resp_nip15) return serialized_events + def remove_filter(self, subscription_id: str): + self.filters = [f for f in self.filters if f.subscription_id != subscription_id] + def _handle_close(self, subscription_id: str): self.remove_filter(subscription_id) - def remove_filter(self, subscription_id: str): - self.filters = [f for f in self.filters if f.subscription_id != subscription_id] + def _can_add_filter(self) -> bool: + return self.client_config.max_client_filters != 0 and len(self.filters) >= self.client_config.max_client_filters \ No newline at end of file