summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--searx/botdetection/ip_limit.py3
-rw-r--r--searx/plugins/limiter.py10
-rw-r--r--searx/settings.yml3
-rw-r--r--searx/settings_defaults.py1
-rwxr-xr-xsearx/webapp.py1
5 files changed, 14 insertions, 4 deletions
diff --git a/searx/botdetection/ip_limit.py b/searx/botdetection/ip_limit.py
index 70863265e..5ff3c87ca 100644
--- a/searx/botdetection/ip_limit.py
+++ b/searx/botdetection/ip_limit.py
@@ -47,6 +47,7 @@ from ipaddress import (
import flask
import werkzeug
from searx.tools import config
+from searx import settings
from searx import redisdb
from searx.redislib import incr_sliding_window, drop_counter
@@ -109,7 +110,7 @@ def filter_request(
if c > API_MAX:
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)
diff --git a/searx/plugins/limiter.py b/searx/plugins/limiter.py
index a8beb5e88..24b14f3b4 100644
--- a/searx/plugins/limiter.py
+++ b/searx/plugins/limiter.py
@@ -3,6 +3,7 @@
# pyright: basic
"""see :ref:`limiter src`"""
+import sys
import flask
from searx import redisdb
@@ -23,10 +24,15 @@ def pre_request():
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
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
app.before_request(pre_request)
return True
diff --git a/searx/settings.yml b/searx/settings.yml
index af3e96ee0..45f6b773b 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -74,6 +74,7 @@ server:
# by ${SEARXNG_URL}.
base_url: false # "http://example.com/location"
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
# values there.
@@ -95,7 +96,7 @@ server:
redis:
# 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
ui:
diff --git a/searx/settings_defaults.py b/searx/settings_defaults.py
index aa95e9394..ad45f8617 100644
--- a/searx/settings_defaults.py
+++ b/searx/settings_defaults.py
@@ -174,6 +174,7 @@ SCHEMA = {
'port': SettingsValue((int, str), 8888, 'SEARXNG_PORT'),
'bind_address': SettingsValue(str, '127.0.0.1', 'SEARXNG_BIND_ADDRESS'),
'limiter': SettingsValue(bool, False),
+ 'public_instance': SettingsValue(bool, False),
'secret_key': SettingsValue(str, environ_name='SEARXNG_SECRET'),
'base_url': SettingsValue((False, str), False, 'SEARXNG_BASE_URL'),
'image_proxy': SettingsValue(bool, False),
diff --git a/searx/webapp.py b/searx/webapp.py
index 9c7dbba1b..13a31d3e5 100755
--- a/searx/webapp.py
+++ b/searx/webapp.py
@@ -1294,6 +1294,7 @@ def config():
},
'doi_resolvers': list(settings['doi_resolvers'].keys()),
'default_doi_resolver': settings['default_doi_resolver'],
+ 'public_instance': settings['server']['public_instance'],
}
)