From 067b80cd3ccfcd691b6c3de235f43b4d4242fc7d Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sun, 9 Oct 2016 12:20:21 +0200 Subject: [PATCH] Account history view --- src/pretix/base/models/auth.py | 9 +++++++ src/pretix/base/models/log.py | 7 +++--- src/pretix/control/logdisplay.py | 25 +++++++++++++++++++ .../templates/pretixcontrol/user/history.html | 15 +++++++++++ .../pretixcontrol/user/settings.html | 9 +++++++ src/pretix/control/urls.py | 1 + src/pretix/control/views/user.py | 20 ++++++++++++--- 7 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 src/pretix/control/templates/pretixcontrol/user/history.html diff --git a/src/pretix/base/models/auth.py b/src/pretix/base/models/auth.py index cbda18363..0ee8da1ab 100644 --- a/src/pretix/base/models/auth.py +++ b/src/pretix/base/models/auth.py @@ -2,9 +2,11 @@ from django.conf import settings from django.contrib.auth.models import ( AbstractBaseUser, BaseUserManager, PermissionsMixin, ) +from django.contrib.contenttypes.models import ContentType from django.db import models from django.utils.translation import ugettext_lazy as _ from django_otp.models import Device + from pretix.base.i18n import language from pretix.helpers.urls import build_absolute_uri @@ -152,6 +154,13 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin): except SendMailException: pass # Already logged + @property + def all_logentries(self): + from pretix.base.models import LogEntry + + return LogEntry.objects.filter(content_type=ContentType.objects.get_for_model(User), + object_id=self.pk) + class U2FDevice(Device): json_data = models.TextField() diff --git a/src/pretix/base/models/log.py b/src/pretix/base/models/log.py index 608225b56..02de810f8 100644 --- a/src/pretix/base/models/log.py +++ b/src/pretix/base/models/log.py @@ -37,8 +37,7 @@ class LogEntry(models.Model): def display(self): from ..signals import logentry_display - if self.event: - for receiver, response in logentry_display.send(self.event, logentry=self): - if response: - return response + for receiver, response in logentry_display.send(self.event, logentry=self): + if response: + return response return self.action_type diff --git a/src/pretix/control/logdisplay.py b/src/pretix/control/logdisplay.py index c9043a85b..18c4c140a 100644 --- a/src/pretix/control/logdisplay.py +++ b/src/pretix/control/logdisplay.py @@ -62,9 +62,34 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs): 'pretix.event.order.contact.changed': _('The email address has been changed.'), 'pretix.event.order.payment.changed': _('The payment method has been changed.'), 'pretix.event.order.expire_warning_sent': _('An email has been sent with a warning that the order is about to expire.'), + 'pretix.user.settings.2fa.enabled': _('Two-factor authentication has been enabled.'), + 'pretix.user.settings.2fa.disabled': _('Two-factor authentication has been disabled.'), + 'pretix.user.settings.2fa.regenemergency': _('Your two-factor emergency codes have been regenerated.'), + 'pretix.control.auth.user.forgot_password.mail_sent': _('Password reset mail sent.'), + 'pretix.control.auth.user.forgot_password.recovered': _('The password has been reset.') + } if logentry.action_type in plains: return plains[logentry.action_type] if logentry.action_type.startswith('pretix.event.order.changed'): return _display_order_changed(sender, logentry) + + if logentry.action_type == 'pretix.user.settings.2fa.device.added': + data = json.loads(logentry.data) + return _('A new two-factor authentication device "{name}" has been added to your account.').format( + name=data['name'] + ) + if logentry.action_type == 'pretix.user.settings.2fa.device.deleted': + data = json.loads(logentry.data) + return _('The two-factor authentication device "{name}" has been removed from your account.').format( + name=data['name'] + ) + if logentry.action_type == 'pretix.user.settings.changed': + data = json.loads(logentry.data) + text = str(_('Your account settings have been changed.')) + if 'email' in data: + text = text + ' ' + str(_('Your email address has been changed to {email}.').format(email=data['email'])) + if 'new_pw' in data: + text = text + ' ' + str(_('Your password has been changed.')) + return text diff --git a/src/pretix/control/templates/pretixcontrol/user/history.html b/src/pretix/control/templates/pretixcontrol/user/history.html new file mode 100644 index 000000000..7567d9457 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/user/history.html @@ -0,0 +1,15 @@ +{% extends "pretixcontrol/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block title %}{% trans "Account history" %}{% endblock %} +{% block content %} +

{% trans "Account history" %}

+
+
+

+ {% trans "Account history" %} +

+
+ {% include "pretixcontrol/includes/logs.html" with obj=user %} +
+{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/user/settings.html b/src/pretix/control/templates/pretixcontrol/user/settings.html index 145485b2b..781089e67 100644 --- a/src/pretix/control/templates/pretixcontrol/user/settings.html +++ b/src/pretix/control/templates/pretixcontrol/user/settings.html @@ -35,6 +35,15 @@ {% endif %} +
+ + +