diff options
| -rw-r--r-- | AUTHORS.rst | 5 | ||||
| -rw-r--r-- | Dockerfile | 19 | ||||
| -rw-r--r-- | searx/plugins/tracker_url_remover.py | 1 | ||||
| -rw-r--r-- | searx/templates/__common__/opensearch.xml | 4 | ||||
| -rwxr-xr-x | searx/webapp.py | 52 |
5 files changed, 45 insertions, 36 deletions
diff --git a/AUTHORS.rst b/AUTHORS.rst index 34d2dc25e..57834514b 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -1,4 +1,4 @@ -Searx was created by Adam Tauber and is maintained by Adam Tauber, Alexandre Flament, Noémi Ványi, @pofilo, Gaspard d'Hautefeuille and Markus Heiser. +Searx was created by Adam Tauber and is maintained by Adam Tauber, Noémi Ványi, @pofilo, Gaspard d'Hautefeuille and Émilien Devos. Major contributing authors: @@ -12,8 +12,9 @@ Major contributing authors: - @pofilo - Markus Heiser @return42 - Émilien Devos @unixfox +- Alexandre Flament -People who have submitted patches/translates, reported bugs, consulted features or +People who have submitted patches/translations, reported bugs, consulted features or generally made searx better: - Laszlo Hammerl diff --git a/Dockerfile b/Dockerfile index 3894aa968..d1a5632b5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,21 +4,12 @@ EXPOSE 8080 VOLUME /etc/searx VOLUME /var/log/uwsgi -ARG GIT_URL=unknown -ARG VERSION_GITCOMMIT=unknown -ARG SEARX_GIT_VERSION=unknown - ARG SEARX_GID=977 ARG SEARX_UID=977 RUN addgroup -g ${SEARX_GID} searx && \ adduser -u ${SEARX_UID} -D -h /usr/local/searx -s /bin/sh -G searx searx -ARG TIMESTAMP_SETTINGS=0 -ARG TIMESTAMP_UWSGI=0 -ARG LABEL_VCS_REF= -ARG LABEL_VCS_URL= - ENV INSTANCE_NAME=searx \ AUTOCOMPLETE= \ BASE_URL= \ @@ -60,6 +51,10 @@ RUN apk upgrade --no-cache \ COPY --chown=searx:searx . . +ARG TIMESTAMP_SETTINGS=0 +ARG TIMESTAMP_UWSGI=0 +ARG VERSION_GITCOMMIT=unknown + RUN su searx -c "/usr/bin/python3 -m compileall -q searx"; \ touch -c --date=@${TIMESTAMP_SETTINGS} searx/settings.yml; \ touch -c --date=@${TIMESTAMP_UWSGI} dockerfiles/uwsgi.ini; \ @@ -70,8 +65,12 @@ RUN su searx -c "/usr/bin/python3 -m compileall -q searx"; \ -o -name '*.svg' -o -name '*.ttf' -o -name '*.eot' \) \ -type f -exec gzip -9 -k {} \+ -exec brotli --best {} \+ -# Keep this argument at the end since it change each time +# Keep these arguments at the end to prevent redundant layer rebuilds ARG LABEL_DATE= +ARG GIT_URL=unknown +ARG SEARX_GIT_VERSION=unknown +ARG LABEL_VCS_REF= +ARG LABEL_VCS_URL= LABEL maintainer="searx <${GIT_URL}>" \ description="A privacy-respecting, hackable metasearch engine." \ version="${SEARX_GIT_VERSION}" \ diff --git a/searx/plugins/tracker_url_remover.py b/searx/plugins/tracker_url_remover.py index 742f39013..98ddddbcd 100644 --- a/searx/plugins/tracker_url_remover.py +++ b/searx/plugins/tracker_url_remover.py @@ -21,6 +21,7 @@ from urllib.parse import urlunparse, parse_qsl, urlencode regexes = {re.compile(r'utm_[^&]+'), re.compile(r'(wkey|wemail)[^&]*'), + re.compile(r'(_hsenc|_hsmi|hsCtaTracking|__hssc|__hstc|__hsfp)[^&]*'), re.compile(r'&$')} name = gettext('Tracker URL remover') diff --git a/searx/templates/__common__/opensearch.xml b/searx/templates/__common__/opensearch.xml index 2476258c0..230f327a5 100644 --- a/searx/templates/__common__/opensearch.xml +++ b/searx/templates/__common__/opensearch.xml @@ -3,7 +3,7 @@ <ShortName>{{ instance_name }}</ShortName> <Description>a privacy-respecting, hackable metasearch engine</Description> <InputEncoding>UTF-8</InputEncoding> - <Image>{{ urljoin(host, url_for('static', filename='img/favicon.png')) }}</Image> + <Image>{{ url_for('static', filename='img/favicon.png', _external=True) }}</Image> <LongName>searx metasearch</LongName> {% if opensearch_method == 'get' %} <Url rel="results" type="text/html" method="get" template="{{ url_for('search', _external=True) }}?q={searchTerms}"/> @@ -13,7 +13,7 @@ </Url> {% endif %} {% if autocomplete %} - <Url rel="suggestions" type="application/x-suggestions+json" template="{{ host }}autocompleter?q={searchTerms}"/> + <Url rel="suggestions" type="application/x-suggestions+json" template="{{ url_for('autocompleter', _external=True) }}?q={searchTerms}"/> {% endif %} <Url type="application/opensearchdescription+xml" diff --git a/searx/webapp.py b/searx/webapp.py index 7f874d3aa..4c09f0ac6 100755 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -40,7 +40,7 @@ from datetime import datetime, timedelta from time import time from html import escape from io import StringIO -from urllib.parse import urlencode, urljoin, urlparse +from urllib.parse import urlencode, urlparse from pygments import highlight from pygments.lexers import get_lexer_by_name @@ -270,14 +270,7 @@ def extract_domain(url): def get_base_url(): - if settings['server']['base_url']: - hostname = settings['server']['base_url'] - else: - scheme = 'http' - if request.is_secure: - scheme = 'https' - hostname = url_for('index', _external=True, _scheme=scheme) - return hostname + return url_for('index', _external=True) def get_current_theme_name(override=None): @@ -310,10 +303,6 @@ def url_for_theme(endpoint, override_theme=None, **values): if filename_with_theme in static_files: values['filename'] = filename_with_theme url = url_for(endpoint, **values) - if settings['server']['base_url']: - if url.startswith('/'): - url = url[1:] - url = urljoin(settings['server']['base_url'], url) return url @@ -824,7 +813,7 @@ def preferences(): # save preferences if request.method == 'POST': - resp = make_response(redirect(urljoin(settings['server']['base_url'], url_for('index')))) + resp = make_response(url_for('index', _external=True)) try: request.preferences.parse_form(request.form) except ValidationException: @@ -1013,11 +1002,11 @@ def opensearch(): if request.headers.get('User-Agent', '').lower().find('webkit') >= 0: method = 'get' - ret = render('opensearch.xml', - opensearch_method=method, - host=get_base_url(), - urljoin=urljoin, - override_theme='__common__') + ret = render( + 'opensearch.xml', + opensearch_method=method, + override_theme='__common__' + ) resp = Response(response=ret, status=200, @@ -1038,7 +1027,7 @@ def favicon(): @app.route('/clear_cookies') def clear_cookies(): - resp = make_response(redirect(urljoin(settings['server']['base_url'], url_for('index')))) + resp = make_response(redirect(url_for('index', _external=True))) for cookie_name in request.cookies: resp.delete_cookie(cookie_name) return resp @@ -1131,19 +1120,38 @@ class ReverseProxyPathFix: ''' def __init__(self, app): + self.app = app + self.script_name = None + self.scheme = None + self.server = None + + if settings['server']['base_url']: + + # If base_url is specified, then these values from are given + # preference over any Flask's generics. + + base_url = urlparse(settings['server']['base_url']) + self.script_name = base_url.path + self.scheme = base_url.scheme + self.server = base_url.netloc def __call__(self, environ, start_response): - script_name = environ.get('HTTP_X_SCRIPT_NAME', '') + + script_name = self.script_name or environ.get('HTTP_X_SCRIPT_NAME', '') if script_name: environ['SCRIPT_NAME'] = script_name path_info = environ['PATH_INFO'] if path_info.startswith(script_name): environ['PATH_INFO'] = path_info[len(script_name):] - scheme = environ.get('HTTP_X_SCHEME', '') + scheme = self.scheme or environ.get('HTTP_X_SCHEME', '') if scheme: environ['wsgi.url_scheme'] = scheme + + server = self.server or environ.get('HTTP_X_FORWARDED_HOST', '') + if server: + environ['HTTP_HOST'] = server return self.app(environ, start_response) |