From f54d51510872b77cfb5c4d0ad11e7bac386d8b7b Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Mon, 13 Jun 2016 10:34:38 +0200 Subject: [PATCH] logger: allow callers to override request's user (fixes #11316) In certain cases (ex.: web service callback) our log filter will not be able to determine a related user or the related user is not the one currently logged, here we allow the application to handle that itself. --- hobo/logger.py | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/hobo/logger.py b/hobo/logger.py index 9843e2a..fe4cc1c 100644 --- a/hobo/logger.py +++ b/hobo/logger.py @@ -44,6 +44,13 @@ class RequestContextFilter(logging.Filter): Inspired by django-log-request-id ''' + if (hasattr(record, 'user') and hasattr(record.user, 'is_authenticated') and + record.user.is_authenticated()): + user = record.user + del record.user + else: + user = None + from hobo.middleware.utils import StoreRequestMiddleware from django.conf import settings from django.db import connection @@ -61,26 +68,31 @@ class RequestContextFilter(logging.Filter): if getattr(getattr(connection, 'tenant', None), 'domain_url', None): record.tenant = connection.tenant.domain_url request = StoreRequestMiddleware.get_request() + if not request is None: if not hasattr(record, 'request'): record.request = request record.ip = request.META.get('REMOTE_ADDR', self.DEFAULT_IP) record.path = request.get_full_path() record.request_id = 'r:' + hex(id(request))[2:].upper() - if hasattr(request, 'user') and request.user.is_authenticated(): + # if caller already passed an user, it means it knows better + if user is None and hasattr(request, 'user') and request.user.is_authenticated(): user = request.user - if getattr(user, 'email', None): - record.user_email = user.email - record.user = user.email - if getattr(user, 'username', None): - record.user_name = user.username - record.user = user.username - if hasattr(user, 'get_full_name') and user.get_full_name(): - record.user_display_name = user.get_full_name() - if hasattr(user, 'saml_identifiers'): - saml_identifiers = user.saml_identifiers.all() - if saml_identifiers: - record.user_uuid = saml_identifiers[0].name_id - if record.user == self.DEFAULT_USER: - record.user = record.user_uuid[:7] + + if user: + user = request.user + if getattr(user, 'email', None): + record.user_email = user.email + record.user = user.email + if getattr(user, 'username', None): + record.user_name = user.username + record.user = user.username + if hasattr(user, 'get_full_name') and user.get_full_name(): + record.user_display_name = user.get_full_name() + if hasattr(user, 'saml_identifiers'): + saml_identifiers = user.saml_identifiers.all() + if saml_identifiers: + record.user_uuid = saml_identifiers[0].name_id + if record.user == self.DEFAULT_USER: + record.user = record.user_uuid[:7] return True -- 2.1.4