Browse Source

add new parameter called server.public_instance

for enabling by default advanced limiter functions
in the future allow us to add features just for the public instances
Emilien Devos 1 year ago
parent
commit
47721a3485

+ 2 - 1
searx/botdetection/ip_limit.py

@@ -47,6 +47,7 @@ from ipaddress import (
 import flask
 import flask
 import werkzeug
 import werkzeug
 from searx.tools import config
 from searx.tools import config
+from searx import settings
 
 
 from searx import redisdb
 from searx import redisdb
 from searx.redislib import incr_sliding_window, drop_counter
 from searx.redislib import incr_sliding_window, drop_counter
@@ -109,7 +110,7 @@ def filter_request(
         if c > API_MAX:
         if c > API_MAX:
             return too_many_requests(network, "too many request in API_WINDOW")
             return too_many_requests(network, "too many request in API_WINDOW")
 
 
-    if cfg['botdetection.ip_limit.link_token']:
+    if settings['server']['public_instance'] or cfg['botdetection.ip_limit.link_token']:
 
 
         suspicious = link_token.is_suspicious(network, request, True)
         suspicious = link_token.is_suspicious(network, request, True)
 
 

+ 8 - 2
searx/plugins/limiter.py

@@ -3,6 +3,7 @@
 # pyright: basic
 # pyright: basic
 """see :ref:`limiter src`"""
 """see :ref:`limiter src`"""
 
 
+import sys
 import flask
 import flask
 
 
 from searx import redisdb
 from searx import redisdb
@@ -23,10 +24,15 @@ def pre_request():
 
 
 
 
 def init(app: flask.Flask, settings) -> bool:
 def init(app: flask.Flask, settings) -> bool:
-    if not settings['server']['limiter']:
+    if not settings['server']['limiter'] and not settings['server']['public_instance']:
         return False
         return False
     if not redisdb.client():
     if not redisdb.client():
-        logger.error("The limiter requires Redis")
+        logger.error(
+            "The limiter requires Redis, please consult the documentation: "
+            + "https://docs.searxng.org/admin/searx.botdetection.html#limiter"
+        )
+        if settings['server']['public_instance']:
+            sys.exit(1)
         return False
         return False
     app.before_request(pre_request)
     app.before_request(pre_request)
     return True
     return True

+ 2 - 1
searx/settings.yml

@@ -74,6 +74,7 @@ server:
   # by ${SEARXNG_URL}.
   # by ${SEARXNG_URL}.
   base_url: false  # "http://example.com/location"
   base_url: false  # "http://example.com/location"
   limiter: false  # rate limit the number of request on the instance, block some bots
   limiter: false  # rate limit the number of request on the instance, block some bots
+  public_instance: false  # enable features designed only for public instances
 
 
   # If your instance owns a /etc/searxng/settings.yml file, then set the following
   # If your instance owns a /etc/searxng/settings.yml file, then set the following
   # values there.
   # values there.
@@ -95,7 +96,7 @@ server:
 
 
 redis:
 redis:
   # URL to connect redis database. Is overwritten by ${SEARXNG_REDIS_URL}.
   # URL to connect redis database. Is overwritten by ${SEARXNG_REDIS_URL}.
-  # https://redis-py.readthedocs.io/en/stable/connections.html#redis.client.Redis.from_url
+  # https://docs.searxng.org/admin/settings/settings_redis.html#settings-redis
   url: false
   url: false
 
 
 ui:
 ui:

+ 1 - 0
searx/settings_defaults.py

@@ -174,6 +174,7 @@ SCHEMA = {
         'port': SettingsValue((int, str), 8888, 'SEARXNG_PORT'),
         'port': SettingsValue((int, str), 8888, 'SEARXNG_PORT'),
         'bind_address': SettingsValue(str, '127.0.0.1', 'SEARXNG_BIND_ADDRESS'),
         'bind_address': SettingsValue(str, '127.0.0.1', 'SEARXNG_BIND_ADDRESS'),
         'limiter': SettingsValue(bool, False),
         'limiter': SettingsValue(bool, False),
+        'public_instance': SettingsValue(bool, False),
         'secret_key': SettingsValue(str, environ_name='SEARXNG_SECRET'),
         'secret_key': SettingsValue(str, environ_name='SEARXNG_SECRET'),
         'base_url': SettingsValue((False, str), False, 'SEARXNG_BASE_URL'),
         'base_url': SettingsValue((False, str), False, 'SEARXNG_BASE_URL'),
         'image_proxy': SettingsValue(bool, False),
         'image_proxy': SettingsValue(bool, False),

+ 1 - 0
searx/webapp.py

@@ -1294,6 +1294,7 @@ def config():
             },
             },
             'doi_resolvers': list(settings['doi_resolvers'].keys()),
             'doi_resolvers': list(settings['doi_resolvers'].keys()),
             'default_doi_resolver': settings['default_doi_resolver'],
             'default_doi_resolver': settings['default_doi_resolver'],
+            'public_instance': settings['server']['public_instance'],
         }
         }
     )
     )