settings.yml: set default values for result_proxy

* initialize result_proxy with searx/settings_defaults.py
* allow result_proxy.key to be a string

this commit supersedes #1522
This commit is contained in:
Alexandre FLAMENT 2022-08-27 10:01:04 +00:00
parent 56000d5162
commit 341ad46303
3 changed files with 23 additions and 7 deletions

View file

@ -121,6 +121,7 @@ ui:
# #
# result_proxy: # result_proxy:
# url: http://127.0.0.1:3000/ # url: http://127.0.0.1:3000/
# # the key is a base64 encoded string, the YAML !!binary prefix is optional
# key: !!binary "your_morty_proxy_key" # key: !!binary "your_morty_proxy_key"
# # [true|false] enable the "proxy" button next to each result # # [true|false] enable the "proxy" button next to each result
# proxify_results: true # proxify_results: true

View file

@ -9,6 +9,7 @@ import numbers
import errno import errno
import os import os
import logging import logging
from base64 import b64decode
from os.path import dirname, abspath from os.path import dirname, abspath
from searx.languages import language_codes as languages from searx.languages import language_codes as languages
@ -117,6 +118,15 @@ class SettingsDirectoryValue(SettingsValue):
return super().__call__(value) return super().__call__(value)
class SettingsBytesValue(SettingsValue):
"""str are base64 decoded"""
def __call__(self, value: typing.Any) -> typing.Any:
if isinstance(value, str):
value = b64decode(value)
return super().__call__(value)
def apply_schema(settings, schema, path_list): def apply_schema(settings, schema, path_list):
error = False error = False
for key, value in schema.items(): for key, value in schema.items():
@ -215,6 +225,11 @@ SCHEMA = {
'extra_proxy_timeout': SettingsValue(int, 0), 'extra_proxy_timeout': SettingsValue(int, 0),
'networks': {}, 'networks': {},
}, },
'result_proxy': {
'url': SettingsValue((None, str), None),
'key': SettingsBytesValue((None, bytes), None),
'proxify_results': SettingsValue(bool, False),
},
'plugins': SettingsValue(list, []), 'plugins': SettingsValue(list, []),
'enabled_plugins': SettingsValue((None, list), None), 'enabled_plugins': SettingsValue((None, list), None),
'checker': { 'checker': {

View file

@ -315,16 +315,16 @@ def custom_url_for(endpoint: str, **values):
return url_for(endpoint, **values) + suffix return url_for(endpoint, **values) + suffix
def proxify(url: str): def morty_proxify(url: str):
if url.startswith('//'): if url.startswith('//'):
url = 'https:' + url url = 'https:' + url
if not settings.get('result_proxy'): if not settings['result_proxy']['url']:
return url return url
url_params = dict(mortyurl=url) url_params = dict(mortyurl=url)
if settings['result_proxy'].get('key'): if settings['result_proxy']['key']:
url_params['mortyhash'] = hmac.new(settings['result_proxy']['key'], url.encode(), hashlib.sha256).hexdigest() url_params['mortyhash'] = hmac.new(settings['result_proxy']['key'], url.encode(), hashlib.sha256).hexdigest()
return '{0}?{1}'.format(settings['result_proxy']['url'], urlencode(url_params)) return '{0}?{1}'.format(settings['result_proxy']['url'], urlencode(url_params))
@ -349,8 +349,8 @@ def image_proxify(url: str):
return url return url
return None return None
if settings.get('result_proxy'): if settings['result_proxy']['url']:
return proxify(url) return morty_proxify(url)
h = new_hmac(settings['server']['secret_key'], url.encode()) h = new_hmac(settings['server']['secret_key'], url.encode())
@ -462,8 +462,8 @@ def render(template_name: str, **kwargs):
# helpers to create links to other pages # helpers to create links to other pages
kwargs['url_for'] = custom_url_for # override url_for function in templates kwargs['url_for'] = custom_url_for # override url_for function in templates
kwargs['image_proxify'] = image_proxify kwargs['image_proxify'] = image_proxify
kwargs['proxify'] = proxify if settings.get('result_proxy', {}).get('url') else None kwargs['proxify'] = morty_proxify if settings['result_proxy']['url'] is not None else None
kwargs['proxify_results'] = settings.get('result_proxy', {}).get('proxify_results', True) kwargs['proxify_results'] = settings['result_proxy']['proxify_results']
kwargs['get_result_template'] = get_result_template kwargs['get_result_template'] = get_result_template
kwargs['opensearch_url'] = ( kwargs['opensearch_url'] = (
url_for('opensearch') url_for('opensearch')