.oO SearXNG Developer Documentation Oo.
Loading...
Searching...
No Matches
ahmia_filter.py
Go to the documentation of this file.
1# SPDX-License-Identifier: AGPL-3.0-or-later
2# pylint: disable=missing-module-docstring
3
4import typing as t
5from hashlib import md5
6
7from flask_babel import gettext # pyright: ignore[reportUnknownVariableType]
8
9from searx.data import ahmia_blacklist_loader
10from searx import get_setting
11from searx.plugins import Plugin, PluginInfo
12
13if t.TYPE_CHECKING:
14 import flask
15 from searx.search import SearchWithPlugins
16 from searx.extended_types import SXNG_Request
17 from searx.result_types import Result
18 from searx.plugins import PluginCfg
19
20ahmia_blacklist: list[str] = []
21
22
23@t.final
25 """Filter out onion results that appear in Ahmia's blacklist (See https://ahmia.fi/blacklist)."""
26
27 id = "ahmia_filter"
28
29 def __init__(self, plg_cfg: "PluginCfg") -> None:
30 super().__init__(plg_cfg)
32 id=self.id,
33 name=gettext("Ahmia blacklist"),
34 description=gettext("Filter out onion results that appear in Ahmia's blacklist."),
35 preference_section="general",
36 )
37
39 self, request: "SXNG_Request", search: "SearchWithPlugins", result: "Result"
40 ) -> bool: # pylint: disable=unused-argument
41 if not getattr(result, "is_onion", False) or not getattr(result, "parsed_url", False):
42 return True
43 result_hash = md5(result["parsed_url"].hostname.encode()).hexdigest()
44 return result_hash not in ahmia_blacklist
45
46 def init(self, app: "flask.Flask") -> bool: # pylint: disable=unused-argument
47 global ahmia_blacklist # pylint: disable=global-statement
48 if not get_setting("outgoing.using_tor_proxy"):
49 # disable the plugin
50 return False
51 ahmia_blacklist = ahmia_blacklist_loader()
52 return True
bool on_result(self, "SXNG_Request" request, "SearchWithPlugins" search, "Result" result)
None __init__(self, "PluginCfg" plg_cfg)
bool init(self, "flask.Flask" app)
t.Any get_setting(str name, t.Any default=_unset)
Definition __init__.py:74