# SPDX-License-Identifier: AGPL-3.0-or-later # lint: pylint # pyright: basic """see :ref:`limiter src`""" import sys import flask from searx import redisdb from searx.plugins import logger from searx.botdetection import limiter name = "Request limiter" description = "Limit the number of request" default_on = False preference_section = 'service' logger = logger.getChild('limiter') def pre_request(): """See :ref:`flask.Flask.before_request`""" return limiter.filter_request(flask.request) def init(app: flask.Flask, settings) -> bool: if not settings['server']['limiter'] and not settings['server']['public_instance']: return False if not redisdb.client(): 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