35 lines
806 B
Python
35 lines
806 B
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.db.models import AuditLog, User
|
|
|
|
|
|
def log_event(
|
|
session: Session,
|
|
*,
|
|
action: str,
|
|
target: str = "",
|
|
detail: dict[str, Any] | None = None,
|
|
request=None,
|
|
actor: User | None = None,
|
|
) -> None:
|
|
ip = ""
|
|
user_agent = ""
|
|
if request is not None:
|
|
ip = request.client.host if getattr(request, "client", None) else ""
|
|
user_agent = request.headers.get("User-Agent", "") if getattr(request, "headers", None) else ""
|
|
|
|
log = AuditLog(
|
|
actor_user_id=actor.id if actor else None,
|
|
action=action,
|
|
target=target,
|
|
detail=detail or {},
|
|
ip=ip,
|
|
user_agent=user_agent,
|
|
)
|
|
session.add(log)
|
|
session.commit()
|