limiter.py 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # lint: pylint
  3. # pyright: basic
  4. """see :ref:`limiter src`"""
  5. import sys
  6. import flask
  7. from searx import redisdb
  8. from searx.plugins import logger
  9. from searx.botdetection import limiter
  10. name = "Request limiter"
  11. description = "Limit the number of request"
  12. default_on = False
  13. preference_section = 'service'
  14. logger = logger.getChild('limiter')
  15. def pre_request():
  16. """See :ref:`flask.Flask.before_request`"""
  17. return limiter.filter_request(flask.request)
  18. def init(app: flask.Flask, settings) -> bool:
  19. if not settings['server']['limiter'] and not settings['server']['public_instance']:
  20. return False
  21. if not redisdb.client():
  22. logger.error(
  23. "The limiter requires Redis, please consult the documentation: "
  24. + "https://docs.searxng.org/admin/searx.botdetection.html#limiter"
  25. )
  26. if settings['server']['public_instance']:
  27. sys.exit(1)
  28. return False
  29. app.before_request(pre_request)
  30. return True