Browse Source

Merge pull request #1655 from return42/fix-opensearch

[fix] improve OpenSearch description
Markus Heiser 2 years ago
parent
commit
0043190643
3 changed files with 21 additions and 22 deletions
  1. 13 14
      searx/templates/simple/opensearch.xml
  2. 5 7
      searx/webapp.py
  3. 3 1
      tests/unit/test_webapp.py

+ 13 - 14
searx/templates/simple/opensearch.xml

@@ -1,22 +1,21 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
-<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
   <ShortName>{{ instance_name }}</ShortName>
   <ShortName>{{ instance_name }}</ShortName>
-  <Description>a privacy-respecting, hackable metasearch engine</Description>
+  <LongName>SearXNG metasearch</LongName>
+  <Description>SearXNG is a metasearch engine that respects your privacy.</Description>
   <InputEncoding>UTF-8</InputEncoding>
   <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}"/>
+  <Image type="image/png">{{ url_for('static', filename='img/favicon.png', _external=True) }}</Image>
+  {% if opensearch_method == 'GET' %}
+  <Url rel="results" type="text/html" method="{{ opensearch_method }}" template="{{ url_for('search', _external=True) }}?q={searchTerms}"/>
   {% else %}
   {% else %}
-    <Url rel="results" type="text/html" method="post" template="{{ url_for('search', _external=True) }}">
-        <Param name="q" value="{searchTerms}" />
-    </Url>
+  <Url rel="results" type="text/html" method="{{ opensearch_method }}" template="{{ url_for('search', _external=True) }}">
+    <Param name="q" value="{searchTerms}" />
+  </Url>
   {% endif %}
   {% endif %}
   {% if autocomplete %}
   {% if autocomplete %}
-    <Url rel="suggestions" type="application/x-suggestions+json" template="{{ url_for('autocompleter', _external=True) }}?q={searchTerms}"/>
+    <Url rel="suggestions" type="application/x-suggestions+json" method="{{ opensearch_method }}" template="{{ url_for('autocompleter', _external=True) }}?q={searchTerms}"/>
   {% endif %}
   {% endif %}
-
-  <Url type="application/opensearchdescription+xml"
-      rel="self"
-      template="{{ opensearch_url }}" />
+  <Url rel="self" type="application/opensearchdescription+xml"  method="{{ opensearch_method }}" template="{{ opensearch_url }}" />
+  <Query role="example" searchTerms="SearXNG" />
+  <moz:SearchForm>{{ url_for('search', _external=True) }}</moz:SearchForm>
 </OpenSearchDescription>
 </OpenSearchDescription>

+ 5 - 7
searx/webapp.py

@@ -1282,19 +1282,17 @@ Disallow: /*?*q=*
 
 
 @app.route('/opensearch.xml', methods=['GET'])
 @app.route('/opensearch.xml', methods=['GET'])
 def opensearch():
 def opensearch():
-    method = 'post'
-
-    if request.preferences.get_value('method') == 'GET':
-        method = 'get'
+    method = request.preferences.get_value('method')
+    autocomplete = request.preferences.get_value('autocomplete')
 
 
     # chrome/chromium only supports HTTP GET....
     # chrome/chromium only supports HTTP GET....
     if request.headers.get('User-Agent', '').lower().find('webkit') >= 0:
     if request.headers.get('User-Agent', '').lower().find('webkit') >= 0:
-        method = 'get'
+        method = 'GET'
 
 
-    autocomplete = request.preferences.get_value('autocomplete')
+    if method not in ('POST', 'GET'):
+        method = 'POST'
 
 
     ret = render('opensearch.xml', opensearch_method=method, autocomplete=autocomplete)
     ret = render('opensearch.xml', opensearch_method=method, autocomplete=autocomplete)
-
     resp = Response(response=ret, status=200, mimetype="application/opensearchdescription+xml")
     resp = Response(response=ret, status=200, mimetype="application/opensearchdescription+xml")
     return resp
     return resp
 
 

+ 3 - 1
tests/unit/test_webapp.py

@@ -244,7 +244,9 @@ class ViewsTestCase(SearxTestCase):
     def test_opensearch_xml(self):
     def test_opensearch_xml(self):
         result = self.app.get('/opensearch.xml')
         result = self.app.get('/opensearch.xml')
         self.assertEqual(result.status_code, 200)
         self.assertEqual(result.status_code, 200)
-        self.assertIn(b'<Description>a privacy-respecting, hackable metasearch engine</Description>', result.data)
+        self.assertIn(
+            b'<Description>SearXNG is a metasearch engine that respects your privacy.</Description>', result.data
+        )
 
 
     def test_favicon(self):
     def test_favicon(self):
         result = self.app.get('/favicon.ico')
         result = self.app.get('/favicon.ico')