From 4cf6cbae8528cf2546ee16e9fa85a903968d9afd Mon Sep 17 00:00:00 2001 From: rgraber Date: Mon, 13 Jan 2025 16:41:05 -0500 Subject: [PATCH] fixup!: be better about anonymous users --- kobo/apps/audit_log/models.py | 15 ++++++--------- kobo/apps/audit_log/serializers.py | 17 ++--------------- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/kobo/apps/audit_log/models.py b/kobo/apps/audit_log/models.py index 9fadc11a6f..2333322997 100644 --- a/kobo/apps/audit_log/models.py +++ b/kobo/apps/audit_log/models.py @@ -38,6 +38,7 @@ from kpi.fields.kpi_uid import UUID_LENGTH from kpi.models import Asset, ImportTask from kpi.utils.log import logging +from kpi.utils.object_permission import get_database_user ANONYMOUS_USER_PERMISSION_ACTIONS = { # key: (permission, granting?), value: ph log action @@ -81,7 +82,7 @@ class AuditLog(models.Model): db_index=True, ) user_uid = models.CharField( - db_index=True, max_length=UUID_LENGTH + 1, null=True + db_index=True, max_length=UUID_LENGTH + 1 ) # 1 is prefix length log_type = models.CharField(choices=AuditType.choices, db_index=True) @@ -610,7 +611,7 @@ def _create_from_submission_request(cls, request): instances: dict[int:SubmissionUpdate] = getattr(request, 'instances', {}) logs = [] url_name = request.resolver_match.url_name - + user = get_database_user(request.user) for instance in instances.values(): if instance.action == 'add': action = AuditAction.ADD_SUBMISSION @@ -627,17 +628,13 @@ def _create_from_submission_request(cls, request): } if 'validation-status' in url_name: metadata['submission']['status'] = instance.status - user_uid = ( - request.user.extra_details.uid - if not request.user.is_anonymous - else None - ) + logs.append( ProjectHistoryLog( - user=request.user if not request.user.is_anonymous else None, + user=user, object_id=request.asset.id, action=action, - user_uid=user_uid, + user_uid=user.extra_details.uid, metadata=metadata, ) ) diff --git a/kobo/apps/audit_log/serializers.py b/kobo/apps/audit_log/serializers.py index 1c96a237a8..5601c38609 100644 --- a/kobo/apps/audit_log/serializers.py +++ b/kobo/apps/audit_log/serializers.py @@ -45,7 +45,7 @@ def get_date_created(self, audit_log): return audit_log.date_created.strftime('%Y-%m-%dT%H:%M:%SZ') def get_username(self, audit_log): - return getattr(audit_log.user, 'username', None) + return audit_log.user.username class AccessLogSerializer(serializers.Serializer): @@ -66,14 +66,7 @@ def get_date_created(self, audit_log): return audit_log['date_created'].strftime('%Y-%m-%dT%H:%M:%SZ') -class ProjectHistoryLogSerializer(serializers.ModelSerializer): - user = serializers.HyperlinkedRelatedField( - queryset=get_user_model().objects.all(), - lookup_field='username', - view_name='user-kpi-detail', - ) - date_created = serializers.SerializerMethodField() - username = serializers.SerializerMethodField() +class ProjectHistoryLogSerializer(AuditLogSerializer): class Meta: model = ProjectHistoryLog @@ -94,9 +87,3 @@ class Meta: 'metadata', 'date_created', ) - - def get_date_created(self, audit_log): - return audit_log.date_created.strftime('%Y-%m-%dT%H:%M:%SZ') - - def get_username(self, audit_log): - return getattr(audit_log.user, 'username', None)