.oO SearXNG Developer Documentation Oo.
Loading...
Searching...
No Matches
searx.botdetection._helpers Namespace Reference

Functions

 dump_request (flask.Request request)
werkzeug.Response|None too_many_requests (IPv4Network|IPv6Network network, str log_msg)
IPv4Network|IPv6Network get_network (IPv4Address|IPv6Address real_ip, config.Config cfg)
 log_error_only_once (str err_msg)

Variables

list __all__ = ["log_error_only_once", "dump_request", "get_network", "logger", "too_many_requests"]
 logger = logger.getChild('botdetection')
list _logged_errors = []

Function Documentation

◆ dump_request()

searx.botdetection._helpers.dump_request ( flask.Request request)

Definition at line 26 of file _helpers.py.

26def dump_request(request: flask.Request):
27 return (
28 request.path
29 + " || X-Forwarded-For: %s" % request.headers.get('X-Forwarded-For')
30 + " || X-Real-IP: %s" % request.headers.get('X-Real-IP')
31 + " || form: %s" % request.form
32 + " || Accept: %s" % request.headers.get('Accept')
33 + " || Accept-Language: %s" % request.headers.get('Accept-Language')
34 + " || Accept-Encoding: %s" % request.headers.get('Accept-Encoding')
35 + " || Content-Type: %s" % request.headers.get('Content-Type')
36 + " || Content-Length: %s" % request.headers.get('Content-Length')
37 + " || Connection: %s" % request.headers.get('Connection')
38 + " || User-Agent: %s" % request.headers.get('User-Agent')
39 + " || Sec-Fetch-Site: %s" % request.headers.get('Sec-Fetch-Site')
40 + " || Sec-Fetch-Mode: %s" % request.headers.get('Sec-Fetch-Mode')
41 + " || Sec-Fetch-Dest: %s" % request.headers.get('Sec-Fetch-Dest')
42 )
43
44

◆ get_network()

IPv4Network | IPv6Network searx.botdetection._helpers.get_network ( IPv4Address | IPv6Address real_ip,
config.Config cfg )
Returns the (client) network of whether the ``real_ip`` is part of.

The ``ipv4_prefix`` and ``ipv6_prefix`` define the number of leading bits in
an address that are compared to determine whether or not an address is part
of a (client) network.

.. code:: toml

   [botdetection]

   ipv4_prefix = 32
   ipv6_prefix = 48

Definition at line 56 of file _helpers.py.

56def get_network(real_ip: IPv4Address | IPv6Address, cfg: config.Config) -> IPv4Network | IPv6Network:
57 """Returns the (client) network of whether the ``real_ip`` is part of.
58
59 The ``ipv4_prefix`` and ``ipv6_prefix`` define the number of leading bits in
60 an address that are compared to determine whether or not an address is part
61 of a (client) network.
62
63 .. code:: toml
64
65 [botdetection]
66
67 ipv4_prefix = 32
68 ipv6_prefix = 48
69
70 """
71
72 prefix: int = cfg["botdetection.ipv4_prefix"]
73 if real_ip.version == 6:
74 prefix: int = cfg["botdetection.ipv6_prefix"]
75 network = ip_network(f"{real_ip}/{prefix}", strict=False)
76 # logger.debug("get_network(): %s", network.compressed)
77 return network
78
79

◆ log_error_only_once()

searx.botdetection._helpers.log_error_only_once ( str err_msg)

Definition at line 83 of file _helpers.py.

83def log_error_only_once(err_msg: str):
84 if err_msg not in _logged_errors:
85 logger.error(err_msg)
86 _logged_errors.append(err_msg)

◆ too_many_requests()

werkzeug.Response | None searx.botdetection._helpers.too_many_requests ( IPv4Network | IPv6Network network,
str log_msg )
Returns a HTTP 429 response object and writes a ERROR message to the
'botdetection' logger.  This function is used in part by the filter methods
to return the default ``Too Many Requests`` response.

Definition at line 45 of file _helpers.py.

45def too_many_requests(network: IPv4Network | IPv6Network, log_msg: str) -> werkzeug.Response | None:
46 """Returns a HTTP 429 response object and writes a ERROR message to the
47 'botdetection' logger. This function is used in part by the filter methods
48 to return the default ``Too Many Requests`` response.
49
50 """
51
52 logger.debug("BLOCK %s: %s", network.compressed, log_msg)
53 return flask.make_response(('Too Many Requests', 429))
54
55

Variable Documentation

◆ __all__

list searx.botdetection._helpers.__all__ = ["log_error_only_once", "dump_request", "get_network", "logger", "too_many_requests"]
private

Definition at line 6 of file _helpers.py.

◆ _logged_errors

list searx.botdetection._helpers._logged_errors = []
protected

Definition at line 80 of file _helpers.py.

◆ logger

searx.botdetection._helpers.logger = logger.getChild('botdetection')

Definition at line 23 of file _helpers.py.