mirror of
https://github.com/FunnyWolf/agentic-soc-platform.git
synced 2026-08-22 13:12:56 +02:00
42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
from django.contrib.contenttypes.models import ContentType
|
|
|
|
from .context import get_current_actor
|
|
from .models import AuditLog
|
|
|
|
RESOURCE_KEYS = {
|
|
"case": "cases",
|
|
"alert": "alerts",
|
|
"artifact": "artifacts",
|
|
"enrichment": "enrichments",
|
|
"playbook": "playbooks",
|
|
"knowledge": "knowledge",
|
|
"user": "users",
|
|
}
|
|
|
|
|
|
def readable_label(obj):
|
|
if hasattr(obj, "get_full_name"):
|
|
return obj.get_full_name() or getattr(obj, "username", "") or str(obj.pk)
|
|
model_name = obj._meta.model_name
|
|
field_name = f"{model_name}_id"
|
|
return str(getattr(obj, field_name, "") or getattr(obj, "username", "") or obj.pk)
|
|
|
|
|
|
def resource_key_for_model(model):
|
|
return RESOURCE_KEYS.get(model._meta.model_name, f"{model._meta.model_name}s")
|
|
|
|
|
|
def write_relation_event(parent, action, relation, related_object, actor=None):
|
|
return AuditLog.objects.create(
|
|
content_type=ContentType.objects.get_for_model(type(parent)),
|
|
object_id=str(parent.id),
|
|
action=action,
|
|
actor=actor if actor is not None else get_current_actor(),
|
|
metadata={
|
|
"relation": relation,
|
|
"related_resource": resource_key_for_model(type(related_object)),
|
|
"related_id": str(related_object.id),
|
|
"related_label": readable_label(related_object),
|
|
},
|
|
)
|