mirror of
https://github.com/searxng/searxng.git
synced 2024-11-14 00:30:15 +01:00
87e4c47621
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 <markus@darmarit.de>
23 lines
1.0 KiB
XML
23 lines
1.0 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
|
<ShortName>{{ instance_name }}</ShortName>
|
|
<Description>a privacy-respecting, hackable metasearch engine</Description>
|
|
<InputEncoding>UTF-8</InputEncoding>
|
|
<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}"/>
|
|
{% else %}
|
|
<Url rel="results" type="text/html" method="post" template="{{ url_for('search', _external=True) }}">
|
|
<Param name="q" value="{searchTerms}" />
|
|
</Url>
|
|
{% endif %}
|
|
{% if autocomplete %}
|
|
<Url rel="suggestions" type="application/x-suggestions+json" template="{{ url_for('autocompleter', _external=True) }}?q={searchTerms}"/>
|
|
{% endif %}
|
|
|
|
<Url type="application/opensearchdescription+xml"
|
|
rel="self"
|
|
template="{{ opensearch_url }}" />
|
|
</OpenSearchDescription>
|