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.
This commit is contained in:
parent
9f665c9994
commit
b0ca9afc1e
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue