#!/usr/bin/env python3 import requests import urllib3 import subprocess import time import json # Disable SSL warnings urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) base_url = "https://localhost:443" admin_user = {"username": "rac00n", "password": "1248163264"} def login(session): """Login to admin panel""" login_data = { "username": admin_user["username"], "password": admin_user["password"] } response = session.post(f"{base_url}/login", data=login_data, verify=False, allow_redirects=False) return response.status_code == 302 def test_audit_table(): """Test if audit_log table exists""" print("1. Checking Audit Log Table:") print("-" * 40) result = subprocess.run([ "docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank", "-c", "\\d audit_log" ], capture_output=True, text=True) if "Table \"public.audit_log\"" in result.stdout: print("✓ Audit log table exists") print("\nTable structure:") print(result.stdout) return True else: print("✗ Audit log table not found - creating it") # Create table subprocess.run([ "docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank", "-f", "/docker-entrypoint-initdb.d/init.sql" ], capture_output=True) return False def test_audit_logging(): """Test various actions to generate audit logs""" session = requests.Session() print("\n2. Testing Audit Log Generation:") print("-" * 40) # Test 1: Login print("Testing LOGIN audit...") login(session) print("✓ Login performed") # Test 2: Create license print("\nTesting CREATE audit...") license_data = { "customer_name": "Audit Test GmbH", "email": "audit@test.de", "license_key": "AUDIT-TEST-001", "license_type": "test", "valid_from": "2025-01-01", "valid_until": "2025-12-31" } response = session.post(f"{base_url}/create", data=license_data, verify=False, allow_redirects=False) if response.status_code == 302: print("✓ License created") # Test 3: Export print("\nTesting EXPORT audit...") response = session.get(f"{base_url}/export/licenses?format=csv", verify=False) if response.status_code == 200: print("✓ Export performed") # Test 4: Logout print("\nTesting LOGOUT audit...") response = session.get(f"{base_url}/logout", verify=False, allow_redirects=False) if response.status_code == 302: print("✓ Logout performed") # Wait for logs to be written time.sleep(1) def test_audit_page(): """Test the audit log page""" session = requests.Session() login(session) print("\n3. Testing Audit Log Page:") print("-" * 40) response = session.get(f"{base_url}/audit", verify=False) if response.status_code == 200: print("✓ Audit log page accessible") content = response.text # Check for expected elements checks = [ ("Audit-Log", "Page title"), ("Zeitstempel", "Timestamp column"), ("Benutzer", "User column"), ("Aktion", "Action column"), ("Entität", "Entity column"), ("IP-Adresse", "IP address column"), ("LOGIN", "Login action"), ("LOGOUT", "Logout action"), ("CREATE", "Create action"), ("EXPORT", "Export action") ] found = 0 for check_text, description in checks: if check_text in content: found += 1 print(f"✓ Found {found}/{len(checks)} expected elements") # Check filters if '