Exemplo n.º 1
0
    def test_send_reset_password_email(self):
        """
        Com:
            - Um email válido para: recipient_email = '*****@*****.**'
        Quando:
            - Enviamos a notificação de resetar a senha.
        Verificamos:
            - Que ``app.utils.send_email`` seja invocado como os parámetros:
                - recipient = '*****@*****.**'
                - subject =   "Instruções para recuperar sua senha"
                - html = render_template('email/recover.html', recover_url=recover_url)
            - Que o valor de retorno da função: send_confirmation_email seja: (True, '')
        """

        recipient_email = '*****@*****.**'
        ts = utils.get_timed_serializer()
        token = ts.dumps(recipient_email, salt='recover-key')
        recover_url = url_for('admin.reset_with_token', token=token, _external=True)

        with patch('webapp.utils.send_email') as mock:

            result = send_reset_password_email(recipient_email)
            expected = (True, '')

            mock.assert_called_with(
                recipient_email,
                "Instruções para recuperar sua senha",
                render_template('email/recover.html', recover_url=recover_url)
            )

            self.assertEqual(expected, result)
Exemplo n.º 2
0
    def test_send_confirmation_email(self):
        """
        Com:
            - Um email válido para: recipient_email = '*****@*****.**'
        Quando:
            - Enviamos a notificação de confirmação de email.
        Verificamos:
            - Que ``app.utils.send_email`` seja invocado como os parámetros:
                - recipient = '*****@*****.**'
                - subject =   "Confirmação de email"
                - html = render_template('email/activate.html', confirm_url=confirm_url)
            - Que o valor de retorno da função: send_confirmation_email seja: (True, '')
        """

        recipient_email = '*****@*****.**'
        ts = utils.get_timed_serializer()
        token = ts.dumps(recipient_email, salt='email-confirm-key')
        confirm_url = url_for('admin.confirm_email', token=token, _external=True)

        with patch('webapp.utils.send_email') as mock:

            result = send_confirmation_email(recipient_email)
            expected = (True, '')

            mock.assert_called_with(
                recipient_email,
                "Confirmação de email",
                render_template('email/activate.html', confirm_url=confirm_url)
            )

            self.assertEqual(expected, result)
Exemplo n.º 3
0
    def confirm_email(self, token):
        try:
            ts = get_timed_serializer()
            email = ts.loads(token, salt="email-confirm-key",
                             max_age=current_app.config['TOKEN_MAX_AGE'])
        except Exception as e:  # possiveis exceções: https://pythonhosted.org/itsdangerous/#exceptions
            # qualquer exeção invalida a operação de confirmação
            abort(404)  # melhorar mensagem de erro para o usuário

        user = controllers.get_user_by_email(email=email)
        if not user:
            abort(404, _('Usuário não encontrado'))

        controllers.set_user_email_confirmed(user)
        flash(_('Email: %(email)s confirmado com sucesso!', email=user.email))
        return redirect(url_for('.index'))
Exemplo n.º 4
0
    def reset_with_token(self, token):
        try:
            ts = get_timed_serializer()
            email = ts.loads(token, salt="recover-key",
                             max_age=current_app.config['TOKEN_MAX_AGE'])
        except Exception as e:
            abort(404)

        form = forms.PasswordForm(request.form)
        if admin.helpers.validate_form_on_submit(form):
            user = controllers.get_user_by_email(email=email)
            if not user.email_confirmed:
                return self.render('admin/auth/unconfirm_email.html')

            controllers.set_user_password(user, form.password.data)
            flash(_('Nova senha salva com sucesso!!'))
            return redirect(url_for('.index'))

        self._template_args['form'] = form
        self._template_args['token'] = token
        return self.render('admin/auth/reset_with_token.html')
Exemplo n.º 5
0
    def reset_with_token(self, token):
        try:
            ts = get_timed_serializer()
            email = ts.loads(token,
                             salt="recover-key",
                             max_age=current_app.config['TOKEN_MAX_AGE'])
        except Exception:
            abort(404)

        form = forms.PasswordForm(request.form)
        if admin.helpers.validate_form_on_submit(form):
            user = controllers.get_user_by_email(email=email)
            if not user.email_confirmed:
                return self.render('admin/auth/unconfirm_email.html')

            controllers.set_user_password(user, form.password.data)
            flash(_('Nova senha salva com sucesso!!'))
            return redirect(url_for('.index'))

        self._template_args['form'] = form
        self._template_args['token'] = token
        return self.render('admin/auth/reset_with_token.html')
Exemplo n.º 6
0
    def test_invalid_token_reset_password(self):
        """
        Quando:
            - current_app.config["SECRET_KEY"] não tem valor
        Verifcamos:
            - Que ocorra uma exeção qunado é criado um token com
              get_timed_serializer ao enviar a notificação de resetar a senha.
        """

        recipient_email = '*****@*****.**'

        with patch('webapp.utils.get_timed_serializer') as mock:
            mock.return_value = URLSafeTimedSerializer(None)

            expected = None
            try:
                ts = utils.get_timed_serializer()
                ts.dumps(recipient_email)
            except Exception, e:
                expected = (False, 'Invalid Token: %s' % str(e))

            result = send_reset_password_email(recipient_email)
            self.assertEqual(expected, result)