diff --git a/client_manager.py b/client_manager.py index 12d9d1f..1b7047e 100644 --- a/client_manager.py +++ b/client_manager.py @@ -200,7 +200,8 @@ class NostrClientConnection: self.remove_filter(subscription_id) if self._can_add_filter(): return [["NOTICE", f"Maximum number of filters ({self.client_config.max_client_filters}) exceeded."]] - + + filter.enforce_limit(self.client_config.limit_per_filter) self.filters.append(filter) events = await get_events(self.relay_id, filter) serialized_events = [ diff --git a/crud.py b/crud.py index 9d36059..5f2cc04 100644 --- a/crud.py +++ b/crud.py @@ -96,7 +96,7 @@ async def create_event(relay_id: str, e: NostrEvent): await create_event_tags(relay_id, e.id, name, value, extra) async def get_events(relay_id: str, filter: NostrFilter, include_tags = True) -> List[NostrEvent]: - values, query = build_select_events_query(relay_id, filter) + query, values = build_select_events_query(relay_id, filter) rows = await db.fetchall(query, tuple(values)) @@ -191,4 +191,4 @@ def build_select_events_query(relay_id:str, filter:NostrFilter): if filter.limit and filter.limit > 0: query += f" LIMIT {filter.limit}" - return values, query + return query, values diff --git a/models.py b/models.py index 57e639a..a9d80a9 100644 --- a/models.py +++ b/models.py @@ -10,8 +10,10 @@ from secp256k1 import PublicKey class ClientConfig(BaseModel): max_client_filters = Field(0, alias="maxClientFilters") + limit_per_filter = Field(1000, alias="limitPerFilter") allowed_public_keys = Field([], alias="allowedPublicKeys") blocked_public_keys = Field([], alias="blockedPublicKeys") + def is_author_allowed(self, p: str) -> bool: if p in self.blocked_public_keys: @@ -177,6 +179,10 @@ class NostrFilter(BaseModel): and (not self.until) ) + def enforce_limit(self, limit: int): + if not self.limit or self.limit > limit: + self.limit = limit + def to_sql_components(self, relay_id: str) -> Tuple[List[str], List[str], List[Any]]: inner_joins: List[str] = [] where = ["deleted=false", "nostrrelay.events.relay_id = ?"] diff --git a/static/components/relay-details/relay-details.html b/static/components/relay-details/relay-details.html index ad36d51..1a79416 100644 --- a/static/components/relay-details/relay-details.html +++ b/static/components/relay-details/relay-details.html @@ -156,6 +156,32 @@
+
+
Limit per filter:
+
+ +
+
+ No Limit + + Maximum number of events to be returned in the initial query + (default 1000) + +
+
Max Filters (per client):