limiter.py 758 B

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