Files
Projektarbeit-MYP/backend/utils/audit_logger.py

85 lines
2.8 KiB
Python

"""
Audit Logger für Production Environment
=======================================
Minimale Implementierung für Compliance und Audit-Anforderungen.
"""
import logging
from datetime import datetime
from typing import Optional, Dict, Any
from utils.logging_config import get_logger
# Logger für Audit-Events
audit_logger = get_logger("audit")
def init_audit_logging(app) -> None:
"""
Initialisiert das Audit-Logging-System für die Flask-Anwendung.
Args:
app: Flask-Anwendungsinstanz
"""
try:
# Audit-Logger konfigurieren
audit_logger.info("[AUDIT] Audit-Logging-System initialisiert")
# Request-Handler für Audit-Logs registrieren
@app.before_request
def log_audit_event():
"""Loggt relevante Anfragen für Audit-Zwecke"""
from flask import request
from flask_login import current_user
# Nur sicherheitsrelevante Endpunkte loggen
sensitive_paths = ['/auth/', '/admin/', '/api/admin/', '/users/']
if any(path in request.path for path in sensitive_paths):
audit_logger.info(
f"[AUDIT] {request.method} {request.path} | "
f"User: {getattr(current_user, 'username', 'Anonymous')} | "
f"IP: {request.remote_addr}"
)
audit_logger.info("[AUDIT] ✅ Audit-Logging erfolgreich konfiguriert")
except Exception as e:
audit_logger.error(f"[AUDIT] ❌ Fehler bei Audit-Logging-Initialisierung: {str(e)}")
raise
def log_admin_action(action: str, user_id: Optional[int] = None,
details: Optional[Dict[str, Any]] = None) -> None:
"""
Loggt Admin-Aktionen für Audit-Zwecke.
Args:
action: Beschreibung der durchgeführten Aktion
user_id: ID des Benutzers, der die Aktion durchgeführt hat
details: Zusätzliche Details zur Aktion
"""
audit_logger.info(
f"[ADMIN_ACTION] {action} | "
f"User ID: {user_id} | "
f"Details: {details or 'None'} | "
f"Timestamp: {datetime.now().isoformat()}"
)
def log_security_event(event_type: str, description: str,
ip_address: Optional[str] = None,
user_id: Optional[int] = None) -> None:
"""
Loggt sicherheitsrelevante Events.
Args:
event_type: Art des Security-Events (LOGIN, LOGOUT, FAILED_LOGIN, etc.)
description: Beschreibung des Events
ip_address: IP-Adresse des Clients
user_id: Benutzer-ID falls verfügbar
"""
audit_logger.warning(
f"[SECURITY_EVENT] {event_type}: {description} | "
f"User ID: {user_id} | "
f"IP: {ip_address} | "
f"Timestamp: {datetime.now().isoformat()}"
)