From 46d5fdbc860fab8c5ebd53ac6bf0826bb522b8d6 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Thu, 16 Mar 2023 11:45:28 +0100 Subject: [PATCH] qml: PIN protect wallet seed display --- electrum/gui/qml/components/WalletDetails.qml | 12 +++++++++-- electrum/gui/qml/qewallet.py | 21 +++++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/electrum/gui/qml/components/WalletDetails.qml b/electrum/gui/qml/components/WalletDetails.qml index 80acb6227..7e5f60c56 100644 --- a/electrum/gui/qml/components/WalletDetails.qml +++ b/electrum/gui/qml/components/WalletDetails.qml @@ -259,8 +259,12 @@ Pane { MouseArea { anchors.fill: parent onClicked: { - seedText.visible = true - showSeedText.visible = false + if (showSeedText.visible) { + Daemon.currentWallet.requestShowSeed() + } else { + seedText.visible = false + showSeedText.visible = true + } } } } @@ -590,6 +594,10 @@ Pane { function onBalanceChanged() { piechart.updateSlices() } + function onSeedRetrieved() { + seedText.visible = true + showSeedText.visible = false + } } Component { diff --git a/electrum/gui/qml/qewallet.py b/electrum/gui/qml/qewallet.py index 0985f8737..52784947b 100644 --- a/electrum/gui/qml/qewallet.py +++ b/electrum/gui/qml/qewallet.py @@ -71,6 +71,7 @@ class QEWallet(AuthMixin, QObject, QtEventListener): otpSuccess = pyqtSignal() otpFailed = pyqtSignal([str,str], arguments=['code','message']) peersUpdated = pyqtSignal() + seedRetrieved = pyqtSignal() _network_signal = pyqtSignal(str, object) @@ -97,6 +98,7 @@ class QEWallet(AuthMixin, QObject, QtEventListener): self._lightningcanreceive = QEAmount() self._lightningcansend = QEAmount() + self._seed = '' self.tx_notification_queue = queue.Queue() self.tx_notification_last_time = 0 @@ -330,10 +332,7 @@ class QEWallet(AuthMixin, QObject, QtEventListener): @pyqtProperty(str, notify=dataChanged) def seed(self): - try: - return self.wallet.get_seed(self.password) - except: - return '' + return self._seed @pyqtProperty(str, notify=dataChanged) def txinType(self): @@ -736,3 +735,17 @@ class QEWallet(AuthMixin, QObject, QtEventListener): return True except Exception as e: return False + + @pyqtSlot() + def requestShowSeed(self): + self.retrieve_seed() + + @auth_protect + def retrieve_seed(self): + try: + self._seed = self.wallet.get_seed(self.password) + self.seedRetrieved.emit() + except: + self._seed = '' + + self.dataChanged.emit()