forked from zaclys/searxng
		
	[mod] compress saved preferences in url
This commit is contained in:
		
							parent
							
								
									b34124fd8a
								
							
						
					
					
						commit
						5f758b2d39
					
				
					 4 changed files with 27 additions and 10 deletions
				
			
		| 
						 | 
					@ -1,6 +1,13 @@
 | 
				
			||||||
 | 
					from base64 import urlsafe_b64encode, urlsafe_b64decode
 | 
				
			||||||
 | 
					from zlib import compress, decompress
 | 
				
			||||||
 | 
					from sys import version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from searx import settings, autocomplete
 | 
					from searx import settings, autocomplete
 | 
				
			||||||
from searx.languages import language_codes as languages
 | 
					from searx.languages import language_codes as languages
 | 
				
			||||||
from searx.url_utils import urlencode
 | 
					from searx.url_utils import parse_qs, urlencode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if version[0] == '3':
 | 
				
			||||||
 | 
					    unicode = str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5  # 5 years
 | 
					COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5  # 5 years
 | 
				
			||||||
| 
						 | 
					@ -279,7 +286,11 @@ class Preferences(object):
 | 
				
			||||||
        settings_kv['disabled_plugins'] = ','.join(self.plugins.disabled)
 | 
					        settings_kv['disabled_plugins'] = ','.join(self.plugins.disabled)
 | 
				
			||||||
        settings_kv['enabled_plugins'] = ','.join(self.plugins.enabled)
 | 
					        settings_kv['enabled_plugins'] = ','.join(self.plugins.enabled)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return urlencode(settings_kv)
 | 
					        return urlsafe_b64encode(compress(urlencode(settings_kv).encode('utf-8'))).decode('utf-8')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def parse_encoded_data(self, input_data):
 | 
				
			||||||
 | 
					        decoded_data = decompress(urlsafe_b64decode(input_data.encode('utf-8')))
 | 
				
			||||||
 | 
					        self.parse_dict({x: y[0] for x,y in parse_qs(unicode(decoded_data)).items()})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def parse_dict(self, input_data):
 | 
					    def parse_dict(self, input_data):
 | 
				
			||||||
        for user_setting_name, user_setting in input_data.items():
 | 
					        for user_setting_name, user_setting in input_data.items():
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -287,7 +287,7 @@
 | 
				
			||||||
        {{ _("These cookies serve your sole convenience, we don't use these cookies to track you.") }}
 | 
					        {{ _("These cookies serve your sole convenience, we don't use these cookies to track you.") }}
 | 
				
			||||||
        </p>
 | 
					        </p>
 | 
				
			||||||
        <p style="margin:20px 0;">{{ _('Search URL of the currently saved preferences') }} <small class="text-muted">({{ _('Note: specifying custom settings in the search URL can reduce privacy by leaking data to the clicked result sites.') }})</small>:<br/>
 | 
					        <p style="margin:20px 0;">{{ _('Search URL of the currently saved preferences') }} <small class="text-muted">({{ _('Note: specifying custom settings in the search URL can reduce privacy by leaking data to the clicked result sites.') }})</small>:<br/>
 | 
				
			||||||
          <input readonly="" class="form-control select-all-on-click cursor-text" type="url" value="{{ url_for('index', _external=True) }}?{{ preferences_url_params|e }}{% raw %}&q=%s{% endraw %}">
 | 
					          <input readonly="" class="form-control select-all-on-click cursor-text" type="url" value="{{ url_for('index', _external=True) }}?preferences={{ preferences_url_params|e }}{% raw %}&q=%s{% endraw %}">
 | 
				
			||||||
        </p>
 | 
					        </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <input type="submit" class="btn btn-primary" value="{{ _('save') }}" />
 | 
					        <input type="submit" class="btn btn-primary" value="{{ _('save') }}" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,9 +2,10 @@ from sys import version_info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if version_info[0] == 2:
 | 
					if version_info[0] == 2:
 | 
				
			||||||
    from urllib import quote, quote_plus, unquote, urlencode
 | 
					    from urllib import quote, quote_plus, unquote, urlencode
 | 
				
			||||||
    from urlparse import parse_qsl, urljoin, urlparse, urlunparse, ParseResult
 | 
					    from urlparse import parse_qs, parse_qsl, urljoin, urlparse, urlunparse, ParseResult
 | 
				
			||||||
else:
 | 
					else:
 | 
				
			||||||
    from urllib.parse import (
 | 
					    from urllib.parse import (
 | 
				
			||||||
 | 
					        parse_qs,
 | 
				
			||||||
        parse_qsl,
 | 
					        parse_qsl,
 | 
				
			||||||
        quote,
 | 
					        quote,
 | 
				
			||||||
        quote_plus,
 | 
					        quote_plus,
 | 
				
			||||||
| 
						 | 
					@ -17,7 +18,8 @@ else:
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__export__ = (parse_qsl,
 | 
					__export__ = (parse_qs,
 | 
				
			||||||
 | 
					              parse_qsl,
 | 
				
			||||||
              quote,
 | 
					              quote,
 | 
				
			||||||
              quote_plus,
 | 
					              quote_plus,
 | 
				
			||||||
              unquote,
 | 
					              unquote,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -403,11 +403,15 @@ def pre_request():
 | 
				
			||||||
    for k, v in request.args.items():
 | 
					    for k, v in request.args.items():
 | 
				
			||||||
        if k not in request.form:
 | 
					        if k not in request.form:
 | 
				
			||||||
            request.form[k] = v
 | 
					            request.form[k] = v
 | 
				
			||||||
    try:
 | 
					
 | 
				
			||||||
        preferences.parse_dict(request.form)
 | 
					    if request.form.get('preferences'):
 | 
				
			||||||
    except Exception as e:
 | 
					        preferences.parse_encoded_data(request.form['preferences'])
 | 
				
			||||||
        logger.exception('invalid settings')
 | 
					    else:
 | 
				
			||||||
        request.errors.append(gettext('Invalid settings'))
 | 
					        try:
 | 
				
			||||||
 | 
					            preferences.parse_dict(request.form)
 | 
				
			||||||
 | 
					        except Exception as e:
 | 
				
			||||||
 | 
					            logger.exception('invalid settings')
 | 
				
			||||||
 | 
					            request.errors.append(gettext('Invalid settings'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # request.user_plugins
 | 
					    # request.user_plugins
 | 
				
			||||||
    request.user_plugins = []
 | 
					    request.user_plugins = []
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue