def validate()

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."))