1
0

Merge pull request #9412 from f321x/plugin_hash

Add filehash of external plugins to PluginDialog
This commit is contained in:
ghost43
2025-01-09 17:54:24 +00:00
committed by GitHub
3 changed files with 13 additions and 1 deletions

View File

@@ -8,7 +8,7 @@ from electrum.gui import messages
from electrum.plugin import run_hook, BasePlugin
from . import util
from .util import WindowModalDialog, Buttons, CloseButton, HelpButton, WWLabel
from .util import WindowModalDialog, Buttons, CloseButton, HelpButton, WWLabel, insert_spaces
if TYPE_CHECKING:
@@ -23,6 +23,7 @@ class PluginDialog(WindowModalDialog):
description = metadata.get('description', '')
requires = metadata.get('requires')
version = metadata.get('version', 'n/a')
zip_hash = metadata.get('zip_hash_sha256', None)
WindowModalDialog.__init__(self, window, 'Plugin')
self.setMinimumSize(400,250)
@@ -39,6 +40,8 @@ class PluginDialog(WindowModalDialog):
form.addRow(QLabel(_('Author') + ':'), QLabel(author))
form.addRow(QLabel(_('Description') + ':'), WWLabel(description))
form.addRow(QLabel(_('Version') + ':'), QLabel(version))
if zip_hash:
form.addRow(QLabel('Hash [sha256]:'), WWLabel(insert_spaces(zip_hash, 8)))
if requires:
msg = '\n'.join(map(lambda x: x[1], requires))
form.addRow(QLabel(_('Requires') + ':'), WWLabel(msg))

View File

@@ -1473,6 +1473,9 @@ def qt_event_listener(func):
self.qt_callback_signal.emit( (func,) + args)
return decorator
def insert_spaces(text: str, every_chars: int) -> str:
'''Insert spaces at every Nth character to allow for WordWrap'''
return ' '.join(text[i:i+every_chars] for i in range(0, len(text), every_chars))
class _ABCQObjectMeta(type(QObject), ABCMeta): pass
class _ABCQWidgetMeta(type(QWidget), ABCMeta): pass

View File

@@ -45,6 +45,7 @@ from . import bip32
from . import plugins
from .simple_config import SimpleConfig
from .logging import get_logger, Logger
from .crypto import sha256
if TYPE_CHECKING:
from .plugins.hw_wallet import HW_PluginBase, HardwareClientBase, HardwareHandlerBase
@@ -222,6 +223,7 @@ class Plugins(DaemonThread):
if 'fullname' not in d:
continue
d['display_name'] = d['fullname']
d['zip_hash_sha256'] = get_file_hash256(path)
self.external_plugin_metadata[name] = d
def load_external_plugins(self):
@@ -359,6 +361,10 @@ class Plugins(DaemonThread):
self.run_jobs()
self.on_stop()
def get_file_hash256(path: str) -> str:
'''Get the sha256 hash of a file in hex, similar to `sha256sum`.'''
with open(path, 'rb') as f:
return sha256(f.read()).hex()
def hook(func):
hook_names.add(func.__name__)