From 8326171d5c3c0d210371891ed2fc9633f0a3559c Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Tue, 11 May 2021 14:29:00 +0200 Subject: [PATCH] journal_event_types: add user email change (#52567) --- src/authentic2/journal_event_types.py | 37 +++++++++++++++++++++++++++ src/authentic2/views.py | 10 ++++++++ tests/test_change_email.py | 14 ++++++++++ 3 files changed, 61 insertions(+) diff --git a/src/authentic2/journal_event_types.py b/src/authentic2/journal_event_types.py index 7629fd13..95d1a834 100644 --- a/src/authentic2/journal_event_types.py +++ b/src/authentic2/journal_event_types.py @@ -309,3 +309,40 @@ class UserServiceSSOUnauthorization(EventTypeWithService): def get_message(cls, event, context): service_name = cls.get_service_name(event) return _('unauthorization of single sign on with "{service}"').format(service=service_name) + + +class UserEmailChangeRequest(EventTypeDefinition): + name = 'user.email.change.request' + label = _('email change request') + + @classmethod + def record(cls, user, session, new_email): + data = { + 'old_email': user.email, + 'email': new_email, + } + super().record(user=user, session=session, data=data) + + @classmethod + def get_message(cls, event, context): + new_email = event.get_data('email') + return _('email change request for email address "{0}"').format(new_email) + + +class UserEmailChange(EventTypeDefinition): + name = 'user.email.change' + label = _('email change') + + @classmethod + def record(cls, user, session, old_email, new_email): + data = { + 'old_email': old_email, + 'email': new_email, + } + super().record(user=user, session=session, data=data) + + @classmethod + def get_message(cls, event, context): + new_email = event.get_data('email') + old_email = event.get_data('old_email') + return _('email address changed from "{0}" to "{1}"').format(old_email, new_email) diff --git a/src/authentic2/views.py b/src/authentic2/views.py index 5416c583..50332513 100644 --- a/src/authentic2/views.py +++ b/src/authentic2/views.py @@ -190,6 +190,9 @@ class EmailChangeView(cbv.TemplateNamesMixin, FormView): ), ) logger.info('email change request') + self.request.journal.record( + 'user.email.change.request', user=self.request.user, session=self.request.session, new_email=email + ) return super(EmailChangeView, self).form_valid(form) @@ -224,6 +227,13 @@ class EmailChangeVerifyView(TemplateView): ) logger.info('user %s changed its email from %s to %s', user, old_email, email) hooks.call_hooks('event', name='change-email-confirm', user=user, email=email) + request.journal.record( + 'user.email.change', + user=user, + session=request.session, + old_email=old_email, + new_email=user.email, + ) except signing.SignatureExpired: messages.error(request, _('your request for changing your email is too old, try again')) except signing.BadSignature: diff --git a/tests/test_change_email.py b/tests/test_change_email.py index 83df14d1..6e14e65b 100644 --- a/tests/test_change_email.py +++ b/tests/test_change_email.py @@ -30,8 +30,22 @@ def change_email(app, user, email, mailoutbox): def test_change_email(app, simple_user, user_ou1, mailoutbox): email = change_email(app, simple_user, user_ou1.email, mailoutbox) + utils.assert_event( + 'user.email.change.request', + user=simple_user, + session=app.session, + old_email=simple_user.email, + email=user_ou1.email, + ) link = utils.get_link_from_mail(email) app.get(link) + utils.assert_event( + 'user.email.change', + user=simple_user, + session=app.session, + old_email=simple_user.email, + email=user_ou1.email, + ) simple_user.refresh_from_db() # ok it worked assert simple_user.email == user_ou1.email -- 2.20.1