From 87e4c476216ab25206b4e583b4206e762c3b9fe0 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Sat, 3 Apr 2021 13:56:47 +0200 Subject: [fix] url_for(..., _external=True) in templates The `url_for` function in the template context is not the one from Flask, it is the one from `webapp`. The `webapp.url_for_theme` is different from its namesake of Flask and has it quirks, when called with argument `_external=True`. The `webapp.url_for_theme` can't handle absolute URLs since it pokes a leading '/', here is the snippet of the old code:: url = url_for(endpoint, **values) if settings['server']['base_url']: if url.startswith('/'): url = url[1:] url = urljoin(settings['server']['base_url'], url) Next drawback of (Flask's) `_external=True` is, that it will not return the HTTP scheme when searx (the Flask app) listens on http and is proxied by a https server. To get the right scheme `HTTP_X_SCHEME` is needed by Flask (werkzeug). Since this is not provided in every environment (e.g. behind Apache mod_wsgi or the HTTP header is not fully set for some other reasons) it is recommended to get *script_name*, *server* and *scheme* from the configured `base_url`. If `base_url` is specified, then these values from are given preference over any Flask's generics. BTW this patch normalize to use `url_for` in the `opensearch.xml` and drop the need of `host` and `urljoin` in template's context. Signed-off-by: Markus Heiser --- searx/templates/__common__/opensearch.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'searx/templates/__common__') 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 @@ {{ instance_name }} a privacy-respecting, hackable metasearch engine UTF-8 - {{ urljoin(host, url_for('static', filename='img/favicon.png')) }} + {{ url_for('static', filename='img/favicon.png', _external=True) }} searx metasearch {% if opensearch_method == 'get' %} @@ -13,7 +13,7 @@ {% endif %} {% if autocomplete %} - + {% endif %}