electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit b0ca9afc1e62bfcb9b67e412d232e9722d06d237
parent 9f665c9994a19210b1aa8946f866f01867a6d5ab
Author: Neil Booth <kyuupichan@gmail.com>
Date:   Sat,  4 Jul 2015 18:13:26 +0900

Improved password wrapper.

Doesn't require any particular argument order of the wrapped
function.
Caller can tell if the user cancelled the request or not.
Optionally handles parent window hints.

Diffstat:
Mgui/qt/main_window.py | 55+++++++++++++++++++++++++++++--------------------------
1 file changed, 29 insertions(+), 26 deletions(-)

diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py @@ -1081,7 +1081,31 @@ class ElectrumWindow(QMainWindow): self.completions.setStringList(l) def protected(func): - return lambda s, *args: s.do_protect(func, args) + '''Password request wrapper. The password is passed to the function + as the 'password' named argument. Return value is a 2-element + tuple: (Cancelled, Result) where Cancelled is True if the user + cancels the password request, otherwise False. Result is the + return value of the wrapped function, or None if cancelled. + ''' + def request_password(self, *args, **kwargs): + parent = kwargs.get('parent', self) + if self.wallet.use_encryption: + while True: + password = self.password_dialog(parent=parent) + if not password: + return True, None + try: + self.wallet.check_password(password) + break + except Exception as e: + QMessageBox.warning(parent, _('Error'), str(e), _('OK')) + continue + else: + password = None + + kwargs['password'] = password + return False, func(self, *args, **kwargs) + return request_password def read_send_tab(self): if self.payment_request and self.payment_request.has_expired(): @@ -1896,29 +1920,6 @@ class ElectrumWindow(QMainWindow): d = QRDialog(data, self, title) d.exec_() - - def do_protect(self, func, args): - if self.wallet.use_encryption: - while True: - password = self.password_dialog() - if not password: - return - try: - self.wallet.check_password(password) - break - except Exception as e: - QMessageBox.warning(self, _('Error'), str(e), _('OK')) - continue - else: - password = None - - if args != (False,): - args = (self,) + args + (password,) - else: - args = (self, password) - apply(func, args) - - def show_public_keys(self, address): if not address: return try: @@ -2098,8 +2099,10 @@ class ElectrumWindow(QMainWindow): def show_warning(self, msg): QMessageBox.warning(self, _('Warning'), msg, _('OK')) - def password_dialog(self, msg=None): - d = QDialog(self) + def password_dialog(self, msg=None, parent=None): + if parent == None: + parent = self + d = QDialog(parent) d.setModal(1) d.setWindowTitle(_("Enter Password")) pw = QLineEdit()