on master help sign in
[fix] preference query parameter decoding (#1599)

Fix issue #1598

commit8f44014627ff26019c0ffc01f77394f56dfb7db1 authorrachmadani haryono <rachmadaniHaryono@users.noreply.github.com> dateWed 17 Jul 2019, 15:42 (7 years ago) parent582f3bf
2 files changed+24−1
searx/preferences.py+4−1 tests/unit/test_preferences.py+20
searx/preferences.py+4−1
@@ -292,7 +292,10 @@ class Preferences(object):
292292
293293 def parse_encoded_data(self, input_data):
294294 decoded_data = decompress(urlsafe_b64decode(input_data.encode('utf-8')))
295− self.parse_dict({x: y[0] for x, y in parse_qs(unicode(decoded_data)).items()})
295+ dict_data = {}
296+ for x, y in parse_qs(decoded_data).items():
297+ dict_data[x.decode('utf8')] = y[0].decode('utf8')
298+ self.parse_dict(dict_data)
296299
297300 def parse_dict(self, input_data):
298301 for user_setting_name, user_setting in input_data.items():
tests/unit/test_preferences.py+20
@@ -122,3 +122,23 @@ class TestSettings(SearxTestCase):
122122 plugin3 = PluginStub('plugin3', True)
123123 setting = PluginsSetting('name', choices=[plugin1, plugin2, plugin3])
124124 self.assertEquals(setting.get_enabled(), set(['plugin1', 'plugin3']))
125+
126+
127+class TestPreferences(SearxTestCase):
128+
129+ def test_encode(self):
130+ from searx.preferences import Preferences
131+ pref = Preferences(['oscar'], ['general'], {}, [])
132+ url_params = 'eJx1VMmO2zAM_Zr6YrTocujJh6JF0QEKzKAz7VVgJNohLIseUU7ivy-VcWy5yyGOTVGP73GLKJNPYjiYgGeT4NB8BS9YOSY' \
133+ 'TUdifMDYM-vmGY1d5CN0EHTYOK88W_PXNkcDBozOjnzoK0vyi4bWnHs2RU4-zvHr_-RF9a-5Cy3GARByy7X7EkKMoBeMp9CuPQ-SzYMx' \
134+ '8Vr9P1qKI-XJ_p1fOkRJWNCgVM0a-zAttmBJbHkaPSZlNts-_jiuBFgUh2mPztkpHHLBhsRArDHvm356eHh5vATS0Mqagr0ZsZO_V8hT' \
135+ 'B9srt54_v6jewJugqL4Nn_hYSdhxnI-jRpi05GDQCStOT7UGVmJY8ZnltRKyF23SGiLWjqNcygKGkpyeGZIywJfD1gI5AjRTAmBM55Aw' \
136+ 'Q0Tn626lj7jzWo4e5hnEsIlprX6dTgdBRpyRBFKTDgBF8AasVyT4gvSTEoXRpXWRyG3CYQYld65I_V6lboILTMAlZY65_ejRDcHgp0Tv' \
137+ 'EPtGAsqTiBf3m76g7pP9B84mwjPvuUtASRDei1nDF2ix_JXW91UJkXrPh6RAhznVmKyQl7dwJdMJ6bz1QOmgzYlrEzHDMcEUuo44AgS1' \
138+ 'CvkjaOb2Q2AyY5oGDTs_OLXE_c2I5cg9hk3kEJZ0fu4SuktsIA2RhuJwP86AdripThCBeO9uVUejyPGmFSxPrqEYcuWi25zOEXV9tc1m' \
139+ '_KP1nafYtdfv6Q9hKfWmGm9A_3G635UwiVndLGdFCiLWkONk0xUxGLGGweGWTa2nZYZ0fS1YKlE3Uuw8fPl52E5U8HJYbC7sbjXUsrnT' \
140+ 'XHXRbELfO-1fGSqskiGnMK7B0dV3t8Lq08pbdtYpuVdoKWA2Yjuyah_vHp2rZWjo0zXL8Gw8DTj0='
141+ pref.parse_encoded_data(url_params)
142+ self.assertEqual(
143+ vars(pref.key_value_settings['categories']),
144+ {'value': ['general'], 'choices': ['general', 'none']})