forked from zaclys/searxng
		
	[enh] image proxy base
This commit is contained in:
		
							parent
							
								
									306c644fa7
								
							
						
					
					
						commit
						60eb831966
					
				
					 1 changed files with 36 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -27,6 +27,7 @@ import cStringIO
 | 
			
		|||
import os
 | 
			
		||||
 | 
			
		||||
from datetime import datetime, timedelta
 | 
			
		||||
from requests import get as http_get
 | 
			
		||||
from itertools import chain
 | 
			
		||||
from flask import (
 | 
			
		||||
    Flask, request, render_template, url_for, Response, make_response,
 | 
			
		||||
| 
						 | 
				
			
			@ -39,7 +40,7 @@ from searx.engines import (
 | 
			
		|||
)
 | 
			
		||||
from searx.utils import (
 | 
			
		||||
    UnicodeWriter, highlight_content, html_to_text, get_themes,
 | 
			
		||||
    get_static_files, get_result_templates
 | 
			
		||||
    get_static_files, get_result_templates, gen_useragent
 | 
			
		||||
)
 | 
			
		||||
from searx.version import VERSION_STRING
 | 
			
		||||
from searx.languages import language_codes
 | 
			
		||||
| 
						 | 
				
			
			@ -531,6 +532,40 @@ def preferences():
 | 
			
		|||
                  theme=get_current_theme_name())
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@app.route('/image_proxy', methods=['GET'])
 | 
			
		||||
def image_proxy():
 | 
			
		||||
    url = request.args.get('url')
 | 
			
		||||
 | 
			
		||||
    if not url:
 | 
			
		||||
        return '', 400
 | 
			
		||||
 | 
			
		||||
    resp = http_get(url,
 | 
			
		||||
                    stream=True,
 | 
			
		||||
                    timeout=settings['server'].get('request_timeout', 2),
 | 
			
		||||
                    headers={'User-Agent': gen_useragent()})
 | 
			
		||||
 | 
			
		||||
    if resp.status_code != 200:
 | 
			
		||||
        logger.debug('image-proxy: wrong response code: {0}'.format(resp.status_code))
 | 
			
		||||
        if resp.status_code >= 400:
 | 
			
		||||
            return '', resp.status_code
 | 
			
		||||
        return '', 400
 | 
			
		||||
 | 
			
		||||
    if not resp.headers.get('content-type', '').startswith('image/'):
 | 
			
		||||
        logger.debug('image-proxy: wrong content-type: {0}'.format(resp.get('content-type')))
 | 
			
		||||
        return '', 400
 | 
			
		||||
 | 
			
		||||
    img = ''
 | 
			
		||||
    chunk_counter = 0
 | 
			
		||||
 | 
			
		||||
    for chunk in resp.iter_content(1024*1024):
 | 
			
		||||
        chunk_counter += 1
 | 
			
		||||
        if chunk_counter > 5:
 | 
			
		||||
            return '', 502  # Bad gateway - file is too big (>5M)
 | 
			
		||||
        img += chunk
 | 
			
		||||
 | 
			
		||||
    return Response(img, mimetype=resp.headers['content-type'])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@app.route('/stats', methods=['GET'])
 | 
			
		||||
def stats():
 | 
			
		||||
    """Render engine statistics page."""
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue