journal_event_types: add user email change (#52567)

This commit is contained in:
Valentin Deniaud 2021-05-11 14:29:00 +02:00
parent 802fa84fea
commit 1469082e0e
4 changed files with 99 additions and 1 deletions

View File

@ -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)

View File

@ -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:

View File

@ -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

View File

@ -238,6 +238,19 @@ def events(db, freezer):
role=role_user,
admin_user=user,
)
make(
'user.email.change.request',
user=user,
session=session1,
new_email='new@example.com',
)
make(
'user.email.change',
user=user,
session=session1,
old_email='old@example.com',
new_email='new@example.com',
)
# verify we created at least one event for each type
assert set(Event.objects.values_list("type__name", flat=True)) == set(_registry)
@ -517,6 +530,18 @@ def test_global_journal(app, superuser, events):
'type': 'manager.role.administrator.user.removal',
'user': 'agent',
},
{
'message': 'email change request for email address "new@example.com"',
'timestamp': 'Jan. 2, 2020, 3 p.m.',
'type': 'user.email.change.request',
'user': 'Johnny doe',
},
{
'message': 'email address changed from "old@example.com" to "new@example.com"',
'timestamp': 'Jan. 2, 2020, 4 p.m.',
'type': 'user.email.change',
'user': 'Johnny doe',
},
]
@ -690,6 +715,18 @@ def test_user_journal(app, superuser, events):
'type': 'manager.role.administrator.user.removal',
'user': 'agent',
},
{
'message': 'email change request for email address "new@example.com"',
'timestamp': 'Jan. 2, 2020, 3 p.m.',
'type': 'user.email.change.request',
'user': 'Johnny doe',
},
{
'message': 'email address changed from "old@example.com" to "new@example.com"',
'timestamp': 'Jan. 2, 2020, 4 p.m.',
'type': 'user.email.change',
'user': 'Johnny doe',
},
]
@ -907,7 +944,7 @@ def test_search(app, superuser, events):
response.form.set('search', 'session:1234')
response = response.form.submit()
assert len(response.pyquery('tbody tr')) == 9
assert len(response.pyquery('tbody tr')) == 11
assert all(
text_content(node) == 'Johnny doe'
for node in response.pyquery('tbody tr td.journal-list--user-column')