summaryrefslogtreecommitdiff
path: root/searx/webapp.py
diff options
context:
space:
mode:
authorMarkus Heiser <markus.heiser@darmarIT.de>2020-02-23 11:55:20 +0000
committerGitHub <noreply@github.com>2020-02-23 11:55:20 +0000
commit55aa7f96c17b46071616df3106219ff8230f7c7b (patch)
tree2e3af4d525d783d2fc61a1852564c5dd4385c0cd /searx/webapp.py
parent24472ce71832a2b516e0c96fe73587208eb33c65 (diff)
parent8c2609775755d991c9905a0852c2770a79d1c091 (diff)
Merge branch 'master' into docker/opencontainers
Diffstat (limited to 'searx/webapp.py')
-rw-r--r--searx/webapp.py64
1 files changed, 46 insertions, 18 deletions
diff --git a/searx/webapp.py b/searx/webapp.py
index 212c874c9..8712cc3c1 100644
--- a/searx/webapp.py
+++ b/searx/webapp.py
@@ -47,7 +47,7 @@ except:
from html import escape
from datetime import datetime, timedelta
from time import time
-from werkzeug.contrib.fixers import ProxyFix
+from werkzeug.middleware.proxy_fix import ProxyFix
from flask import (
Flask, request, render_template, url_for, Response, make_response,
redirect, send_from_directory
@@ -95,6 +95,8 @@ if sys.version_info[0] == 3:
PY3 = True
else:
PY3 = False
+ logger.warning('\033[1;31m *** Deprecation Warning ***\033[0m')
+ logger.warning('\033[1;31m Python2 is deprecated\033[0m')
# serve pages with HTTP/1.1
from werkzeug.serving import WSGIRequestHandler
@@ -155,20 +157,32 @@ _category_names = (gettext('files'),
outgoing_proxies = settings['outgoing'].get('proxies') or None
+def _get_browser_language(request, lang_list):
+ for lang in request.headers.get("Accept-Language", "en").split(","):
+ locale = match_language(lang, lang_list, fallback=None)
+ if locale is not None:
+ return locale
+
+
@babel.localeselector
def get_locale():
+ locale = _get_browser_language(request, settings['locales'].keys())
+
+ logger.debug("default locale from browser info is `%s`", locale)
+
+ if request.preferences.get_value('locale') != '':
+ locale = request.preferences.get_value('locale')
+
if 'locale' in request.form\
and request.form['locale'] in settings['locales']:
- return request.form['locale']
+ locale = request.form['locale']
- if 'locale' in request.args\
- and request.args['locale'] in settings['locales']:
- return request.args['locale']
+ if locale == 'zh_TW':
+ locale = 'zh_Hant_TW'
- if request.preferences.get_value('locale') != '':
- return request.preferences.get_value('locale')
+ logger.debug("selected locale is `%s`", locale)
- return request.accept_languages.best_match(settings['locales'].keys())
+ return locale
# code-highlighter
@@ -346,7 +360,9 @@ def render(template_name, override_theme=None, **kwargs):
if 'autocomplete' not in kwargs:
kwargs['autocomplete'] = request.preferences.get_value('autocomplete')
- if get_locale() in rtl_locales and 'rtl' not in kwargs:
+ locale = request.preferences.get_value('locale')
+
+ if locale in rtl_locales and 'rtl' not in kwargs:
kwargs['rtl'] = True
kwargs['searx_version'] = VERSION_STRING
@@ -358,8 +374,7 @@ def render(template_name, override_theme=None, **kwargs):
kwargs['language_codes'] = languages
if 'current_language' not in kwargs:
kwargs['current_language'] = match_language(request.preferences.get_value('language'),
- LANGUAGE_CODES,
- fallback=settings['search']['language'])
+ LANGUAGE_CODES)
# override url_for function in templates
kwargs['url_for'] = url_for_theme
@@ -429,6 +444,12 @@ def pre_request():
logger.exception('invalid settings')
request.errors.append(gettext('Invalid settings'))
+ # init search language and locale
+ if not preferences.get_value("language"):
+ preferences.parse_dict({"language": _get_browser_language(request, LANGUAGE_CODES)})
+ if not preferences.get_value("locale"):
+ preferences.parse_dict({"locale": get_locale()})
+
# request.user_plugins
request.user_plugins = []
allowed_plugins = preferences.plugins.get_enabled()
@@ -635,7 +656,7 @@ def index():
unresponsive_engines=result_container.unresponsive_engines,
current_language=match_language(search_query.lang,
LANGUAGE_CODES,
- fallback=settings['search']['language']),
+ fallback=request.preferences.get_value("language")),
base_url=get_base_url(),
theme=get_current_theme_name(),
favicons=global_favicons[themes.index(get_current_theme_name())],
@@ -729,8 +750,13 @@ def preferences():
# stats for preferences page
stats = {}
+ engines_by_category = {}
for c in categories:
+ engines_by_category[c] = []
for e in categories[c]:
+ if not request.preferences.validate_token(e):
+ continue
+
stats[e.name] = {'time': None,
'warn_timeout': False,
'warn_time': False}
@@ -738,9 +764,11 @@ def preferences():
stats[e.name]['warn_timeout'] = True
stats[e.name]['supports_selected_language'] = _is_selected_language_supported(e, request.preferences)
+ engines_by_category[c].append(e)
+
# get first element [0], the engine time,
# and then the second element [1] : the time (the first one is the label)
- for engine_stat in get_engines_stats()[0][1]:
+ for engine_stat in get_engines_stats(request.preferences)[0][1]:
stats[engine_stat.get('name')]['time'] = round(engine_stat.get('avg'), 3)
if engine_stat.get('avg') > settings['outgoing']['request_timeout']:
stats[engine_stat.get('name')]['warn_time'] = True
@@ -748,9 +776,9 @@ def preferences():
return render('preferences.html',
locales=settings['locales'],
- current_locale=get_locale(),
+ current_locale=request.preferences.get_value("locale"),
image_proxy=image_proxy,
- engines_by_category=categories,
+ engines_by_category=engines_by_category,
stats=stats,
answerers=[{'info': a.self_info(), 'keywords': a.keywords} for a in answerers],
disabled_engines=disabled_engines,
@@ -826,7 +854,7 @@ def image_proxy():
@app.route('/stats', methods=['GET'])
def stats():
"""Render engine statistics page."""
- stats = get_engines_stats()
+ stats = get_engines_stats(request.preferences)
return render(
'stats.html',
stats=stats,
@@ -889,7 +917,7 @@ def clear_cookies():
@app.route('/config')
def config():
return jsonify({'categories': list(categories.keys()),
- 'engines': [{'name': engine_name,
+ 'engines': [{'name': name,
'categories': engine.categories,
'shortcut': engine.shortcut,
'enabled': not engine.disabled,
@@ -902,7 +930,7 @@ def config():
'safesearch': engine.safesearch,
'time_range_support': engine.time_range_support,
'timeout': engine.timeout}
- for engine_name, engine in engines.items()],
+ for name, engine in engines.items() if request.preferences.validate_token(engine)],
'plugins': [{'name': plugin.name,
'enabled': plugin.default_on}
for plugin in plugins],