85 lines
2.8 KiB
Python
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()}"
|
|
) |