summaryrefslogtreecommitdiff
path: root/searx/plugins/hash_plugin.py
diff options
context:
space:
mode:
Diffstat (limited to 'searx/plugins/hash_plugin.py')
-rw-r--r--searx/plugins/hash_plugin.py97
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