|  | @@ -36,6 +36,7 @@ from searx.utils import highlight_content, html_to_text
 | 
	
		
			
			| 36 | 36 |  app = Flask(__name__)
 | 
	
		
			
			| 37 | 37 |  app.secret_key = settings.secret_key
 | 
	
		
			
			| 38 | 38 |  
 | 
	
		
			
			|  | 39 | +
 | 
	
		
			
			| 39 | 40 |  opensearch_xml = '''<?xml version="1.0" encoding="utf-8"?>
 | 
	
		
			
			| 40 | 41 |  <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
 | 
	
		
			
			| 41 | 42 |    <ShortName>searx</ShortName>
 | 
	
	
		
			
			|  | @@ -48,6 +49,18 @@ opensearch_xml = '''<?xml version="1.0" encoding="utf-8"?>
 | 
	
		
			
			| 48 | 49 |  </OpenSearchDescription>
 | 
	
		
			
			| 49 | 50 |  '''
 | 
	
		
			
			| 50 | 51 |  
 | 
	
		
			
			|  | 52 | +
 | 
	
		
			
			|  | 53 | +def get_base_url():
 | 
	
		
			
			|  | 54 | +    if settings.base_url:
 | 
	
		
			
			|  | 55 | +        hostname = settings.base_url
 | 
	
		
			
			|  | 56 | +    else:
 | 
	
		
			
			|  | 57 | +        scheme = 'http'
 | 
	
		
			
			|  | 58 | +        if request.is_secure:
 | 
	
		
			
			|  | 59 | +            scheme = 'https'
 | 
	
		
			
			|  | 60 | +        hostname = url_for('index', _external=True, _scheme=scheme)
 | 
	
		
			
			|  | 61 | +    return hostname
 | 
	
		
			
			|  | 62 | +
 | 
	
		
			
			|  | 63 | +
 | 
	
		
			
			| 51 | 64 |  def render(template_name, **kwargs):
 | 
	
		
			
			| 52 | 65 |      global categories
 | 
	
		
			
			| 53 | 66 |      kwargs['categories'] = sorted(categories.keys())
 | 
	
	
		
			
			|  | @@ -69,7 +82,8 @@ def parse_query(query):
 | 
	
		
			
			| 69 | 82 |          query = query.replace(query_parts[0], '', 1).strip()
 | 
	
		
			
			| 70 | 83 |      return query, query_engines
 | 
	
		
			
			| 71 | 84 |  
 | 
	
		
			
			| 72 |  | -@app.route('/', methods=['GET', 'POST'])
 | 
	
		
			
			|  | 85 | +
 | 
	
		
			
			|  | 86 | +@APp.route('/', methods=['GET', 'POST'])
 | 
	
		
			
			| 73 | 87 |  def index():
 | 
	
		
			
			| 74 | 88 |      global categories
 | 
	
		
			
			| 75 | 89 |  
 | 
	
	
		
			
			|  | @@ -132,6 +146,17 @@ def index():
 | 
	
		
			
			| 132 | 146 |          response = Response(csv.stream.read(), mimetype='application/csv')
 | 
	
		
			
			| 133 | 147 |          response.headers.add('Content-Disposition', 'attachment;Filename=searx_-_{0}.csv'.format('_'.join(query.split())))
 | 
	
		
			
			| 134 | 148 |          return response
 | 
	
		
			
			|  | 149 | +    elif request_data.get('format') == 'rss':
 | 
	
		
			
			|  | 150 | +        response_rss = render('opensearch_response_rss.xml'
 | 
	
		
			
			|  | 151 | +                              ,results=results
 | 
	
		
			
			|  | 152 | +                              ,q=request_data['q']
 | 
	
		
			
			|  | 153 | +                              ,number_of_results=len(results)
 | 
	
		
			
			|  | 154 | +                              ,base_url=get_base_url()
 | 
	
		
			
			|  | 155 | +                              )
 | 
	
		
			
			|  | 156 | +        response = Response(response_rss, mimetype='application/xml')
 | 
	
		
			
			|  | 157 | +        response.headers.add('Content-Disposition', 'attachment;Filename=searx_-_{0}.xml'.format('_'.join(query.split())))
 | 
	
		
			
			|  | 158 | +        return response
 | 
	
		
			
			|  | 159 | +
 | 
	
		
			
			| 135 | 160 |  
 | 
	
		
			
			| 136 | 161 |      return render('results.html'
 | 
	
		
			
			| 137 | 162 |                   ,results=results
 | 
	
	
		
			
			|  | @@ -187,17 +212,11 @@ Disallow: /stats
 | 
	
		
			
			| 187 | 212 |  def opensearch():
 | 
	
		
			
			| 188 | 213 |      global opensearch_xml
 | 
	
		
			
			| 189 | 214 |      method = 'post'
 | 
	
		
			
			| 190 |  | -    scheme = 'http'
 | 
	
		
			
			| 191 | 215 |      # chrome/chromium only supports HTTP GET....
 | 
	
		
			
			| 192 | 216 |      if request.headers.get('User-Agent', '').lower().find('webkit') >= 0:
 | 
	
		
			
			| 193 | 217 |          method = 'get'
 | 
	
		
			
			| 194 |  | -    if request.is_secure:
 | 
	
		
			
			| 195 |  | -        scheme = 'https'
 | 
	
		
			
			| 196 |  | -    if settings.base_url:
 | 
	
		
			
			| 197 |  | -        hostname = settings.base_url
 | 
	
		
			
			| 198 |  | -    else:
 | 
	
		
			
			| 199 |  | -        hostname = url_for('index', _external=True, _scheme=scheme)
 | 
	
		
			
			| 200 |  | -    ret = opensearch_xml.format(method=method, host=hostname)
 | 
	
		
			
			|  | 218 | +    base_url = get_base_url()
 | 
	
		
			
			|  | 219 | +    ret = opensearch_xml.format(method=method, host=base_url)
 | 
	
		
			
			| 201 | 220 |      resp = Response(response=ret,
 | 
	
		
			
			| 202 | 221 |                  status=200,
 | 
	
		
			
			| 203 | 222 |                  mimetype="application/xml")
 |