 87e4c47621
			
		
	
	
		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>
 |