From 0cbf73a1f4d8ae894f56d89a20646f5244264a44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9on=20Tiek=C3=B6tter?= Date: Sat, 22 Jan 2022 19:51:40 +0100 Subject: [PATCH] Allow 'using_tor_proxy' to be set for each engine individually Check 'using_tor_proxy' for each engine individually instead of checking globally [fix] searx.network: update _rdns test to the last httpx version Co-authored-by: Alexandre Flament --- searx/engines/__init__.py | 12 +++++++++--- searx/network/network.py | 15 ++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/searx/engines/__init__.py b/searx/engines/__init__.py index b762c0dd9..ae132f48d 100644 --- a/searx/engines/__init__.py +++ b/searx/engines/__init__.py @@ -42,6 +42,7 @@ ENGINE_DEFAULT_ARGS = { "safesearch": False, "time_range_support": False, "enable_http": False, + "using_tor_proxy": False, "display_error_messages": True, "tokens": [], "about": {}, @@ -230,8 +231,8 @@ def set_language_attributes(engine: Engine): ) -def update_attributes_for_tor(engine): - if settings['outgoing'].get('using_tor_proxy') and hasattr(engine, 'onion_url'): +def update_attributes_for_tor(engine: Engine) -> bool: + if using_tor_proxy(engine) and hasattr(engine, 'onion_url'): engine.search_url = engine.onion_url + getattr(engine, 'search_path', '') engine.timeout += settings['outgoing'].get('extra_proxy_timeout', 0) @@ -249,13 +250,18 @@ def is_missing_required_attributes(engine): return missing +def using_tor_proxy(engine: Engine): + """Return True if the engine configuration declares to use Tor.""" + return settings['outgoing'].get('using_tor_proxy') or getattr(engine, 'using_tor_proxy', False) + + def is_engine_active(engine: Engine): # check if engine is inactive if engine.inactive is True: return False # exclude onion engines if not using tor - if 'onions' in engine.categories and not settings['outgoing'].get('using_tor_proxy'): + if 'onions' in engine.categories and not using_tor_proxy(engine): return False return True diff --git a/searx/network/network.py b/searx/network/network.py index c9af97649..69af3b7c4 100644 --- a/searx/network/network.py +++ b/searx/network/network.py @@ -167,13 +167,14 @@ class Network: for transport in client._mounts.values(): # pylint: disable=protected-access if isinstance(transport, AsyncHTTPTransportNoHttp): continue - if not getattr(transport, '_rdns', False): - result = False - break - else: - response = await client.get('https://check.torproject.org/api/ip') - if not response.json()['IsTor']: - result = False + if getattr(transport, "_pool") and getattr( + transport._pool, "_rdns", False # pylint: disable=protected-access + ): + continue + return False + response = await client.get("https://check.torproject.org/api/ip", timeout=10) + if not response.json()["IsTor"]: + result = False Network._TOR_CHECK_RESULT[proxies] = result return result