in client/securedrop_client/gui/auth/dialog.py [0:0]
def validate(self) -> None:
"""
Validate the user input -- we expect values for:
* username (free text)
* password (free text)
* TFA token (numerals)
"""
self.setDisabled(True)
username = self.username_field.text()
password = self.password_field.text()
tfa_token = self.tfa_field.text().replace(" ", "")
if username and password and tfa_token:
# Validate username
if len(username) < self.MIN_JOURNALIST_USERNAME:
self.setDisabled(False)
self.error(
_("That username won't work.\n" "It should be at least 3 characters long.")
)
return
# Validate password
if len(password) < self.MIN_PASSWORD_LEN or len(password) > self.MAX_PASSWORD_LEN:
self.setDisabled(False)
self.error(
_(
"That passphrase won't work.\n"
"It should be between 14 and 128 characters long."
)
)
return
# Validate 2FA token
try:
int(tfa_token)
except ValueError:
self.setDisabled(False)
self.error(
_("That two-factor code won't work.\n" "It should only contain numerals.")
)
return
self.submit.setText(_("SIGNING IN"))
# Changing the opacity of the link to .4 alpha of its' 100% value when authenticated
self.opacity_effect.setOpacity(0.4)
self.offline_mode.setGraphicsEffect(self.opacity_effect)
# If authentication is successful, clear error messages displayed priorly
self.error_bar.clear_message()
self.controller.login(username, password, tfa_token)
else:
self.setDisabled(False)
self.error(_("Please enter a username, passphrase and " "two-factor code."))