diff --git a/modoboa/core/models.py b/modoboa/core/models.py index db3d05f22..20b49ea01 100644 --- a/modoboa/core/models.py +++ b/modoboa/core/models.py @@ -492,12 +492,13 @@ def post_revision_commit(sender, **kwargs): @receiver(post_delete) -def post_delete_hook(sender, instance, **kwargs): +def log_object_removal(sender, instance, **kwargs): """Custom post-delete hook. We want to know who was responsible for an object deletion. """ from reversion.models import Version + from modoboa.lib.signals import get_request if not reversion.is_registered(sender): return @@ -510,6 +511,6 @@ def post_delete_hook(sender, instance, **kwargs): msg = _("%(object)s '%(name)s' %(action)s by user %(user)s") % { "object": unicode(version.content_type).capitalize(), "name": version.object_repr, "action": _("deleted"), - "user": version.revision.user.username + "user": get_request().user.username } logger.critical(msg) diff --git a/modoboa/extensions/admin/views/domain.py b/modoboa/extensions/admin/views/domain.py index 2dd635c65..63f928083 100644 --- a/modoboa/extensions/admin/views/domain.py +++ b/modoboa/extensions/admin/views/domain.py @@ -16,6 +16,7 @@ from modoboa.lib.exceptions import ( ModoboaException, PermDeniedException, BadRequest ) from modoboa.lib.templatetags.lib_tags import pagination_bar +from modoboa.core.models import log_object_removal from modoboa.extensions.admin.lib import get_sort_order, get_listing_page from modoboa.extensions.admin.models import Domain, Mailbox from modoboa.extensions.admin.forms import ( diff --git a/modoboa/extensions/admin/views/identity.py b/modoboa/extensions/admin/views/identity.py index 8e8fea69a..769de9c0f 100644 --- a/modoboa/extensions/admin/views/identity.py +++ b/modoboa/extensions/admin/views/identity.py @@ -8,7 +8,7 @@ from django.contrib.auth.decorators import ( from django.views.decorators.csrf import ensure_csrf_cookie from modoboa.lib import parameters, events from modoboa.lib.exceptions import ( - ModoboaException, PermDeniedException, BadRequest + PermDeniedException, BadRequest ) from modoboa.lib.webutils import ( _render_to_string, render_to_json_response diff --git a/modoboa/lib/middleware.py b/modoboa/lib/middleware.py index 44f08dd07..d32e3037a 100644 --- a/modoboa/lib/middleware.py +++ b/modoboa/lib/middleware.py @@ -1,4 +1,7 @@ # coding: utf-8 +""" +Custom middlewares. +""" import re from django.http import Http404, HttpResponseRedirect from modoboa.core.models import Extension @@ -7,6 +10,7 @@ from modoboa.lib.webutils import ( _render_error, ajax_response, render_to_json_response ) from modoboa.lib.exceptions import ModoboaException +from modoboa.lib.signals import request_accessor class ExtControlMiddleware(object): @@ -50,3 +54,19 @@ class CommonExceptionCatcher(object): return render_to_json_response( unicode(exception), status=exception.http_code ) + + +class RequestCatcherMiddleware(object): + """ + Simple middleware to store the current request. + """ + + def __init__(self): + self._request = None + request_accessor.connect(self) + + def process_request(self, request): + self._request = request + + def __call__(self, **kwargs): + return self._request