forked from zaclys/searxng
		
	Merge pull request #1246 from Venca24/devel_hash
[enh] add plugin converting strings into hash digests
This commit is contained in:
		
						commit
						9b872871fe
					
				
					 4 changed files with 111 additions and 1 deletions
				
			
		|  | @ -96,7 +96,7 @@ generally made searx better: | |||
| - Alice Ferrazzi @aliceinwire | ||||
| - @LiquidLemon | ||||
| - @dadosch | ||||
| - @Venca24 | ||||
| - Václav Zouzalík @Venca24 | ||||
| - @ZEROF | ||||
| - Ivan Skytte Jørgensen @isj-privacore | ||||
| - @miicha | ||||
|  |  | |||
|  | @ -28,6 +28,7 @@ from searx import logger, settings, static_path | |||
| logger = logger.getChild('plugins') | ||||
| 
 | ||||
| from searx.plugins import (oa_doi_rewrite, | ||||
|                            hash_plugin, | ||||
|                            https_rewrite, | ||||
|                            infinite_scroll, | ||||
|                            self_info, | ||||
|  | @ -163,6 +164,7 @@ def sha_sum(filename): | |||
| 
 | ||||
| plugins = PluginStore() | ||||
| plugins.register(oa_doi_rewrite) | ||||
| plugins.register(hash_plugin) | ||||
| plugins.register(https_rewrite) | ||||
| plugins.register(infinite_scroll) | ||||
| plugins.register(self_info) | ||||
|  |  | |||
							
								
								
									
										54
									
								
								searx/plugins/hash_plugin.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								searx/plugins/hash_plugin.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | |||
| ''' | ||||
| searx is free software: you can redistribute it and/or modify | ||||
| it under the terms of the GNU Affero General Public License as published by | ||||
| the Free Software Foundation, either version 3 of the License, or | ||||
| (at your option) any later version. | ||||
| 
 | ||||
| searx is distributed in the hope that it will be useful, | ||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| GNU Affero General Public License for more details. | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with searx. If not, see < http://www.gnu.org/licenses/ >. | ||||
| 
 | ||||
| (C) 2015 by Adam Tauber, <asciimoo@gmail.com> | ||||
| (C) 2018, 2020 by Vaclav Zouzalik | ||||
| ''' | ||||
| 
 | ||||
| from flask_babel import gettext | ||||
| import hashlib | ||||
| import re | ||||
| 
 | ||||
| name = "Hash plugin" | ||||
| description = gettext("Converts strings to different hash digests.") | ||||
| default_on = True | ||||
| 
 | ||||
| parser_re = re.compile('(md5|sha1|sha224|sha256|sha384|sha512) (.*)', re.I) | ||||
| 
 | ||||
| 
 | ||||
| def post_search(request, search): | ||||
|     # process only on first page | ||||
|     if search.search_query.pageno > 1: | ||||
|         return True | ||||
|     m = parser_re.match(search.search_query.query) | ||||
|     if not m: | ||||
|         # wrong query | ||||
|         return True | ||||
| 
 | ||||
|     function, string = m.groups() | ||||
|     if string.strip().__len__() == 0: | ||||
|         # end if the string is empty | ||||
|         return True | ||||
| 
 | ||||
|     # select hash function | ||||
|     f = hashlib.new(function.lower()) | ||||
| 
 | ||||
|     # make digest from the given string | ||||
|     f.update(string.encode('utf-8').strip()) | ||||
|     answer = function + " " + gettext('hash digest') + ": " + f.hexdigest() | ||||
| 
 | ||||
|     # print result | ||||
|     search.result_container.answers.clear() | ||||
|     search.result_container.answers['hash'] = {'answer': answer} | ||||
|     return True | ||||
|  | @ -83,3 +83,57 @@ class SelfIPTest(SearxTestCase): | |||
|         search = get_search_mock(query='What is my User-Agent?', pageno=2) | ||||
|         store.call(store.plugins, 'post_search', request, search) | ||||
|         self.assertFalse('user-agent' in search.result_container.answers) | ||||
| 
 | ||||
| 
 | ||||
| class HashPluginTest(SearxTestCase): | ||||
| 
 | ||||
|     def test_PluginStore_init(self): | ||||
|         store = plugins.PluginStore() | ||||
|         store.register(plugins.hash_plugin) | ||||
| 
 | ||||
|         self.assertTrue(len(store.plugins) == 1) | ||||
| 
 | ||||
|         request = Mock(remote_addr='127.0.0.1') | ||||
|         request.headers.getlist.return_value = [] | ||||
| 
 | ||||
|         # MD5 | ||||
|         search = get_search_mock(query='md5 test', pageno=1) | ||||
|         store.call(store.plugins, 'post_search', request, search) | ||||
|         self.assertTrue('md5 hash digest: 098f6bcd4621d373cade4e832627b4f6' | ||||
|                         in search.result_container.answers['hash']['answer']) | ||||
| 
 | ||||
|         search = get_search_mock(query=b'md5 test', pageno=2) | ||||
|         store.call(store.plugins, 'post_search', request, search) | ||||
|         self.assertFalse('hash' in search.result_container.answers) | ||||
| 
 | ||||
|         # SHA1 | ||||
|         search = get_search_mock(query='sha1 test', pageno=1) | ||||
|         store.call(store.plugins, 'post_search', request, search) | ||||
|         self.assertTrue('sha1 hash digest: a94a8fe5ccb19ba61c4c0873d391e9879' | ||||
|                         '82fbbd3' in search.result_container.answers['hash']['answer']) | ||||
| 
 | ||||
|         # SHA224 | ||||
|         search = get_search_mock(query='sha224 test', pageno=1) | ||||
|         store.call(store.plugins, 'post_search', request, search) | ||||
|         self.assertTrue('sha224 hash digest: 90a3ed9e32b2aaf4c61c410eb9254261' | ||||
|                         '19e1a9dc53d4286ade99a809' in search.result_container.answers['hash']['answer']) | ||||
| 
 | ||||
|         # SHA256 | ||||
|         search = get_search_mock(query='sha256 test', pageno=1) | ||||
|         store.call(store.plugins, 'post_search', request, search) | ||||
|         self.assertTrue('sha256 hash digest: 9f86d081884c7d659a2feaa0c55ad015a' | ||||
|                         '3bf4f1b2b0b822cd15d6c15b0f00a08' in search.result_container.answers['hash']['answer']) | ||||
| 
 | ||||
|         # SHA384 | ||||
|         search = get_search_mock(query='sha384 test', pageno=1) | ||||
|         store.call(store.plugins, 'post_search', request, search) | ||||
|         self.assertTrue('sha384 hash digest: 768412320f7b0aa5812fce428dc4706b3c' | ||||
|                         'ae50e02a64caa16a782249bfe8efc4b7ef1ccb126255d196047dfedf1' | ||||
|                         '7a0a9' in search.result_container.answers['hash']['answer']) | ||||
| 
 | ||||
|         # SHA512 | ||||
|         search = get_search_mock(query='sha512 test', pageno=1) | ||||
|         store.call(store.plugins, 'post_search', request, search) | ||||
|         self.assertTrue('sha512 hash digest: ee26b0dd4af7e749aa1a8ee3c10ae9923f6' | ||||
|                         '18980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5' | ||||
|                         'fa9ad8e6f57f50028a8ff' in search.result_container.answers['hash']['answer']) | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Noémi Ványi
						Noémi Ványi