23 lines
804 B
Python
23 lines
804 B
Python
from apps.audit.models import AuditEvent
|
|
|
|
|
|
def record(actor, action, object_type, object_id="", before=None, after=None, metadata=None, request=None):
|
|
"""Write an immutable audit event. Never raises to avoid breaking business flows."""
|
|
ip = None
|
|
if request is not None:
|
|
xff = request.META.get("HTTP_X_FORWARDED_FOR")
|
|
ip = (xff.split(",")[0].strip() if xff else request.META.get("REMOTE_ADDR"))
|
|
try:
|
|
AuditEvent.objects.create(
|
|
actor=actor if actor and actor.is_authenticated else None,
|
|
action=action,
|
|
object_type=object_type,
|
|
object_id=str(object_id),
|
|
ip=ip,
|
|
before=before or {},
|
|
after=after or {},
|
|
metadata=metadata or {},
|
|
)
|
|
except Exception:
|
|
pass
|