Ejemplo n.º 1
0
    def recover_password(cls, recover_data):
        user = UserDatabaseClient.get_user_by_email(recover_data.email)

        if user is not None:
            old_password_recovery = UserDatabaseClient.get_password_recovery_by_id(
                user.id)

            if old_password_recovery is not None:
                cls.logger().debug(
                    f"It already exists a recovery token for user {user.username}. Resending token."
                )
                recovery_token = old_password_recovery.token

            else:
                recovery_token = Authenticator.generate_recovery_token()
                cls.logger().debug("Generating recovery token")
                password_recovery = PasswordRecovery(user_id=user.id,
                                                     token=recovery_token)
                UserDatabaseClient.add_password_recovery(password_recovery)
                DatabaseClient.commit()

            email_data = RecoveryPasswordEmailDTO(
                email=user.email,
                username=user.username,
                token=recovery_token,
                message_template=EmailService.recovery_token_message)
            EmailService.send_email(email_data)

            cls.logger().info(
                f"Sending recovery token email for user {user.username}.")
            return SuccessfulUserMessageResponse("Recovery token sent!",
                                                 UserResponseStatus.OK.value)

        else:
            cls.logger().info(f"User {recover_data.email} not found.")
            raise UserNotFoundError("User not found.",
                                    UserResponseStatus.USER_NOT_FOUND.value)
 def test_recovery_tokens_generated_are_different(self):
     self.assertNotEqual(Authenticator.generate_recovery_token(),
                         Authenticator.generate_recovery_token())