diff options
Diffstat (limited to 'searx/plugins/hash_plugin.py')
| -rw-r--r-- | searx/plugins/hash_plugin.py | 97 |
1 files changed, 60 insertions, 37 deletions
diff --git a/searx/plugins/hash_plugin.py b/searx/plugins/hash_plugin.py index c27e2a432..9db3748b3 100644 --- a/searx/plugins/hash_plugin.py +++ b/searx/plugins/hash_plugin.py @@ -1,43 +1,66 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -# pylint: disable=missing-module-docstring +# pylint: disable=missing-module-docstring, missing-class-docstring +from __future__ import annotations +import typing -import hashlib import re +import hashlib from flask_babel import gettext -name = "Hash plugin" -description = gettext("Converts strings to different hash digests.") -default_on = True -preference_section = 'query' -query_keywords = ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'] -query_examples = 'sha512 The quick brown fox jumps over the lazy dog' - -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 not string.strip(): - # 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 +from searx.plugins import Plugin, PluginInfo +from searx.result_types import Answer + +if typing.TYPE_CHECKING: + from searx.search import SearchWithPlugins + from searx.extended_types import SXNG_Request + + +class SXNGPlugin(Plugin): + """Plugin converts strings to different hash digests. The results are + displayed in area for the "answers". + """ + + id = "hash_plugin" + default_on = True + keywords = ["md5", "sha1", "sha224", "sha256", "sha384", "sha512"] + + def __init__(self): + super().__init__() + + self.parser_re = re.compile(f"({'|'.join(self.keywords)}) (.*)", re.I) + self.info = PluginInfo( + id=self.id, + name=gettext("Hash plugin"), + description=gettext("Converts strings to different hash digests."), + examples=["sha512 The quick brown fox jumps over the lazy dog"], + preference_section="query", + ) + + def post_search(self, request: "SXNG_Request", search: "SearchWithPlugins") -> list[Answer]: + """Returns a result list only for the first page.""" + results = [] + + if search.search_query.pageno > 1: + return results + + m = self.parser_re.match(search.search_query.query) + if not m: + # wrong query + return results + + function, string = m.groups() + if not string.strip(): + # end if the string is empty + return results + + # 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() + + Answer(results=results, answer=answer) + + return results |