{"openapi":"3.1.0","info":{"title":"VulnManager API","description":"Vulnerability Management Dashboard mit Wazuh & KI-Integration","version":"1.0.0"},"paths":{"/health":{"get":{"tags":["Health"],"summary":"Health Check","description":"Health-Check-Endpoint für Load-Balancer & Monitoring\n\nReturns:\n Status und Version","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"tags":["Root"],"summary":"Root","description":"Root-Endpoint mit API-Info","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/login":{"post":{"tags":["Authentication"],"summary":"Login","description":"User-Login mit JWT-Token-Generierung\n\nSecurity:\n - Account-Lockout nach 5 fehlgeschlagenen Versuchen\n - Audit-Logging aller Login-Versuche\n - Brute-Force-Protection via Rate-Limiting (siehe main.py)","operationId":"login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/logout":{"post":{"tags":["Authentication"],"summary":"Logout","description":"User-Logout\n\nHinweis: JWT-Tokens sind stateless und können nicht serverseitig invalidiert werden.\nIn Production: Implementiere Token-Blacklist in Redis.","operationId":"logout_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/refresh":{"post":{"tags":["Authentication"],"summary":"Refresh Token","description":"Erneuert Access-Token mit Refresh-Token\n\nSecurity:\n - Prüft Token-Type (muss \"refresh\" sein)\n - Validiert Token-Signature und Expiry","operationId":"refresh_token_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/me":{"get":{"tags":["Authentication"],"summary":"Get Current User Info","description":"Gibt Informationen über aktuellen User zurück","operationId":"get_current_user_info_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/register":{"post":{"tags":["Authentication"],"summary":"Register User","description":"Registriert neuen User (Admin-only)\n\nSecurity:\n - Passwort-Stärke-Prüfung (OWASP)\n - Unique Username/Email\n - Audit-Logging","operationId":"register_user_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/change-password":{"post":{"tags":["Authentication"],"summary":"Change Password","description":"Ändert Passwort des aktuellen Users\n\nSecurity:\n - Verifiziert altes Passwort\n - Prüft neue Passwort-Stärke\n - Audit-Logging","operationId":"change_password_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordChangeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/users/{user_id}/reset-password":{"post":{"tags":["Authentication"],"summary":"Admin Reset Password","description":"Admin-Force-Reset für User-Passwort","operationId":"admin_reset_password_auth_users__user_id__reset_password_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminResetPasswordRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/users":{"get":{"tags":["Authentication"],"summary":"List Users","description":"Listet alle Benutzer auf.","operationId":"list_users_auth_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vulnerabilities":{"get":{"tags":["Vulnerabilities"],"summary":"List Vulnerabilities","description":"Liste aller Vulnerabilities mit Filterung und Sortierung\n\nSortier-Optionen:\n - priority: Nach berechnetem Priority-Score (CVSS + Exploitability + Age)\n - cvss: Nach CVSS-Score\n - detected_at: Nach Erkennungsdatum","operationId":"list_vulnerabilities_api_v1_vulnerabilities_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/VulnerabilitySeverity"},{"type":"null"}],"description":"Filter nach Severity","title":"Severity"},"description":"Filter nach Severity"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/VulnerabilityStatus"},{"type":"null"}],"description":"Filter nach Status","title":"Status"},"description":"Filter nach Status"},{"name":"exploitable","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Nur exploitable CVEs","title":"Exploitable"},"description":"Nur exploitable CVEs"},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter nach Asset","title":"Asset Id"},"description":"Filter nach Asset"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Suche in CVE-ID, Package, Title","title":"Search"},"description":"Suche in CVE-ID, Package, Title"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sortierung: priority, cvss, detected_at","default":"priority","title":"Sort By"},"description":"Sortierung: priority, cvss, detected_at"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"Reihenfolge: asc, desc","default":"desc","title":"Sort Order"},"description":"Reihenfolge: asc, desc"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VulnerabilityResponse"},"title":"Response List Vulnerabilities Api V1 Vulnerabilities Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vulnerabilities/{vuln_id}":{"get":{"tags":["Vulnerabilities"],"summary":"Get Vulnerability Detail","description":"Detail-Ansicht einer Vulnerability inkl. KI-Analyse (falls vorhanden)","operationId":"get_vulnerability_detail_api_v1_vulnerabilities__vuln_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vuln_id","in":"path","required":true,"schema":{"type":"integer","title":"Vuln Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Vulnerabilities"],"summary":"Update Vulnerability Status","description":"Ändert Status einer Vulnerability\n\nPatch-Verifizierungs-Workflow:\n 1. User markiert CVE als \"patched\"\n 2. Status wird auf \"pending_verification\" gesetzt\n 3. Wazuh Syscollector-Scan wird getriggert (Background-Task)\n 4. Nach Scan-Completion: Automatische Verifizierung","operationId":"update_vulnerability_status_api_v1_vulnerabilities__vuln_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vuln_id","in":"path","required":true,"schema":{"type":"integer","title":"Vuln Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vulnerabilities/{vuln_id}/analyze":{"post":{"tags":["Vulnerabilities"],"summary":"Analyze Vulnerability With Ai","description":"Triggert KI-Analyse für eine Vulnerability\n\nNutzt Infomaniak AI API mit Web-Search für:\n - Exploit-Detection\n - Threat-Intelligence\n - Workarounds\n - Remediation-Steps","operationId":"analyze_vulnerability_with_ai_api_v1_vulnerabilities__vuln_id__analyze_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vuln_id","in":"path","required":true,"schema":{"type":"integer","title":"Vuln Id"}},{"name":"force_refresh","in":"query","required":false,"schema":{"type":"boolean","description":"Cache ignorieren","default":false,"title":"Force Refresh"},"description":"Cache ignorieren"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vulnerabilities/reports/dashboard":{"get":{"tags":["Vulnerabilities"],"summary":"Get Dashboard Statistics","description":"Dashboard-Statistiken für Frontend\n\nLiefert aggregierte Daten:\n - Anzahl Vulnerabilities pro Severity\n - Offene vs. Geschlossene\n - Exploitable-Count\n - Durchschnittlicher CVSS-Score\n - Betroffene Assets\n - Älteste offene Vulnerability","operationId":"get_dashboard_statistics_api_v1_vulnerabilities_reports_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardStatsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/vulnerabilities/sync/wazuh":{"post":{"tags":["Vulnerabilities"],"summary":"Sync Vulnerabilities From Wazuh","description":"Synchronisiert Vulnerabilities aus Wazuh\n\nBackground-Task der:\n 1. Alle aktiven Wazuh-Agents fetcht\n 2. Pro Agent: Vulnerabilities abruft\n 3. In Datenbank upserted (dedupliziert)","operationId":"sync_vulnerabilities_from_wazuh_api_v1_vulnerabilities_sync_wazuh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/assets":{"get":{"tags":["Assets"],"summary":"List Assets","description":"Liste aller Assets mit Filterung","operationId":"list_assets_api_v1_assets_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetStatus"},{"type":"null"}],"title":"Status"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetSource"},{"type":"null"}],"title":"Source"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Suche in Hostname, IP","title":"Search"},"description":"Suche in Hostname, IP"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetResponse"},"title":"Response List Assets Api V1 Assets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Assets"],"summary":"Create Asset","description":"Erstellt manuelles Asset (für Systeme ohne Wazuh-Agent)","operationId":"create_asset_api_v1_assets_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}":{"get":{"tags":["Assets"],"summary":"Get Asset Detail","description":"Asset-Details","operationId":"get_asset_detail_api_v1_assets__asset_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Assets"],"summary":"Update Asset","description":"Aktualisiert Asset-Daten","operationId":"update_asset_api_v1_assets__asset_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Assets"],"summary":"Delete Asset","description":"Löscht Asset (Admin-only)\n\nACHTUNG: Löscht auch alle zugehörigen Vulnerabilities (CASCADE)","operationId":"delete_asset_api_v1_assets__asset_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/vulnerabilities":{"get":{"tags":["Assets"],"summary":"Get Asset Vulnerabilities","description":"Alle Vulnerabilities eines Assets","operationId":"get_asset_vulnerabilities_api_v1_assets__asset_id__vulnerabilities_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/policies":{"get":{"tags":["Policies"],"summary":"List Policies","description":"List all policies","operationId":"list_policies_api_v1_policies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PolicyResponse"},"type":"array","title":"Response List Policies Api V1 Policies Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Policies"],"summary":"Create Policy","description":"Create a new policy","operationId":"create_policy_api_v1_policies_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/policies/{policy_id}":{"put":{"tags":["Policies"],"summary":"Update Policy","description":"Update a policy","operationId":"update_policy_api_v1_policies__policy_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"integer","title":"Policy Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Policies"],"summary":"Delete Policy","description":"Delete a policy","operationId":"delete_policy_api_v1_policies__policy_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"integer","title":"Policy Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scans":{"get":{"tags":["Scans"],"summary":"List Scans","description":"List scans with optional filtering","operationId":"list_scans_api_v1_scans_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ScanStatus"},{"type":"null"}],"title":"Status"}},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScanResponse"},"title":"Response List Scans Api V1 Scans Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Scans"],"summary":"Create Scan","description":"Trigger/Record a new scan for an asset","operationId":"create_scan_api_v1_scans_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AdminResetPasswordRequest":{"properties":{"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["new_password"],"title":"AdminResetPasswordRequest"},"AssetCreateRequest":{"properties":{"hostname":{"type":"string","title":"Hostname"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"operating_system":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operating System"},"os_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Version"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"policy_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Policy Id"}},"type":"object","required":["hostname"],"title":"AssetCreateRequest"},"AssetResponse":{"properties":{"id":{"type":"integer","title":"Id"},"hostname":{"type":"string","title":"Hostname"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"wazuh_agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wazuh Agent Id"},"operating_system":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operating System"},"os_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Version"},"source":{"$ref":"#/components/schemas/AssetSource"},"status":{"$ref":"#/components/schemas/AssetStatus"},"last_scan":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Scan"},"last_seen":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen"},"vulnerability_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vulnerability Count","default":0},"policy_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Policy Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"}},"type":"object","required":["id","hostname","ip_address","wazuh_agent_id","operating_system","os_version","source","status","last_scan","last_seen"],"title":"AssetResponse"},"AssetSource":{"type":"string","enum":["wazuh","manual"],"title":"AssetSource","description":"Quelle des Assets"},"AssetStatus":{"type":"string","enum":["active","inactive","decommissioned"],"title":"AssetStatus","description":"Status des Assets"},"AssetUpdateRequest":{"properties":{"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hostname"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"operating_system":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operating System"},"os_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Version"},"status":{"anyOf":[{"$ref":"#/components/schemas/AssetStatus"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"policy_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Policy Id"}},"type":"object","title":"AssetUpdateRequest"},"DashboardStatsResponse":{"properties":{"total_vulnerabilities":{"type":"integer","title":"Total Vulnerabilities"},"open_vulnerabilities":{"type":"integer","title":"Open Vulnerabilities"},"critical_count":{"type":"integer","title":"Critical Count"},"high_count":{"type":"integer","title":"High Count"},"medium_count":{"type":"integer","title":"Medium Count"},"low_count":{"type":"integer","title":"Low Count"},"exploitable_count":{"type":"integer","title":"Exploitable Count"},"avg_cvss_score":{"type":"number","title":"Avg Cvss Score"},"affected_assets":{"type":"integer","title":"Affected Assets"},"oldest_vulnerability_days":{"type":"integer","title":"Oldest Vulnerability Days"}},"type":"object","required":["total_vulnerabilities","open_vulnerabilities","critical_count","high_count","medium_count","low_count","exploitable_count","avg_cvss_score","affected_assets","oldest_vulnerability_days"],"title":"DashboardStatsResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LoginRequest":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["username","password"],"title":"LoginRequest"},"LoginResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"user":{"type":"object","title":"User"}},"type":"object","required":["access_token","refresh_token","user"],"title":"LoginResponse"},"PasswordChangeRequest":{"properties":{"old_password":{"type":"string","title":"Old Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["old_password","new_password"],"title":"PasswordChangeRequest"},"PolicyCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"type":"string","title":"Category"},"status":{"$ref":"#/components/schemas/PolicyStatus","default":"active"},"critical_sla_days":{"type":"integer","title":"Critical Sla Days","default":2},"high_sla_days":{"type":"integer","title":"High Sla Days","default":7},"medium_sla_days":{"type":"integer","title":"Medium Sla Days","default":30},"low_sla_days":{"type":"integer","title":"Low Sla Days","default":90}},"type":"object","required":["name","category"],"title":"PolicyCreate"},"PolicyResponse":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"type":"string","title":"Category"},"status":{"$ref":"#/components/schemas/PolicyStatus","default":"active"},"critical_sla_days":{"type":"integer","title":"Critical Sla Days","default":2},"high_sla_days":{"type":"integer","title":"High Sla Days","default":7},"medium_sla_days":{"type":"integer","title":"Medium Sla Days","default":30},"low_sla_days":{"type":"integer","title":"Low Sla Days","default":90},"id":{"type":"integer","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"compliance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Compliance","default":0.0}},"type":"object","required":["name","category","id","created_at","updated_at"],"title":"PolicyResponse"},"PolicyStatus":{"type":"string","enum":["active","warning","disabled"],"title":"PolicyStatus"},"PolicyUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"status":{"anyOf":[{"$ref":"#/components/schemas/PolicyStatus"},{"type":"null"}]},"critical_sla_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Critical Sla Days"},"high_sla_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"High Sla Days"},"medium_sla_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Medium Sla Days"},"low_sla_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Low Sla Days"}},"type":"object","title":"PolicyUpdate"},"RefreshTokenRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshTokenRequest"},"RegisterRequest":{"properties":{"username":{"type":"string","title":"Username"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"role":{"$ref":"#/components/schemas/UserRole","default":"readonly"}},"type":"object","required":["username","email","password"],"title":"RegisterRequest"},"ScanCreateRequest":{"properties":{"asset_id":{"type":"integer","title":"Asset Id"},"scan_type":{"$ref":"#/components/schemas/ScanType","default":"manual"}},"type":"object","required":["asset_id"],"title":"ScanCreateRequest"},"ScanResponse":{"properties":{"id":{"type":"integer","title":"Id"},"asset_id":{"type":"integer","title":"Asset Id"},"scan_type":{"$ref":"#/components/schemas/ScanType"},"status":{"$ref":"#/components/schemas/ScanStatus"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"vulnerabilities_found":{"type":"integer","title":"Vulnerabilities Found"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"asset_hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Hostname"}},"type":"object","required":["id","asset_id","scan_type","status","started_at","completed_at","vulnerabilities_found","error_message"],"title":"ScanResponse"},"ScanStatus":{"type":"string","enum":["pending","running","completed","failed"],"title":"ScanStatus","description":"Status des Scans"},"ScanType":{"type":"string","enum":["full","syscollector","manual"],"title":"ScanType","description":"Typ des Scans"},"UserRole":{"type":"string","enum":["admin","editor","readonly"],"title":"UserRole","description":"User-Rollen für RBAC"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VulnerabilityDetailResponse":{"properties":{"id":{"type":"integer","title":"Id"},"cve_id":{"type":"string","title":"Cve Id"},"asset_id":{"type":"integer","title":"Asset Id"},"asset_hostname":{"type":"string","title":"Asset Hostname"},"cvss_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cvss Score"},"severity":{"$ref":"#/components/schemas/VulnerabilitySeverity"},"status":{"$ref":"#/components/schemas/VulnerabilityStatus"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"package_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Package Name"},"package_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Package Version"},"fixed_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fixed Version"},"exploitable":{"type":"boolean","title":"Exploitable"},"exploit_available":{"type":"boolean","title":"Exploit Available"},"detected_at":{"type":"string","format":"date-time","title":"Detected At"},"priority_score":{"type":"number","title":"Priority Score"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"cvss_vector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvss Vector"},"exploit_maturity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exploit Maturity"},"published_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published Date"},"patched_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Patched At"},"references":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"References"},"cwe_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cwe Id"},"ai_analysis":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Ai Analysis"}},"type":"object","required":["id","cve_id","asset_id","asset_hostname","cvss_score","severity","status","title","package_name","package_version","fixed_version","exploitable","exploit_available","detected_at","priority_score","description","cvss_vector","exploit_maturity","published_date","patched_at","references","cwe_id","ai_analysis"],"title":"VulnerabilityDetailResponse"},"VulnerabilityResponse":{"properties":{"id":{"type":"integer","title":"Id"},"cve_id":{"type":"string","title":"Cve Id"},"asset_id":{"type":"integer","title":"Asset Id"},"asset_hostname":{"type":"string","title":"Asset Hostname"},"cvss_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cvss Score"},"severity":{"$ref":"#/components/schemas/VulnerabilitySeverity"},"status":{"$ref":"#/components/schemas/VulnerabilityStatus"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"package_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Package Name"},"package_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Package Version"},"fixed_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fixed Version"},"exploitable":{"type":"boolean","title":"Exploitable"},"exploit_available":{"type":"boolean","title":"Exploit Available"},"detected_at":{"type":"string","format":"date-time","title":"Detected At"},"priority_score":{"type":"number","title":"Priority Score"}},"type":"object","required":["id","cve_id","asset_id","asset_hostname","cvss_score","severity","status","title","package_name","package_version","fixed_version","exploitable","exploit_available","detected_at","priority_score"],"title":"VulnerabilityResponse"},"VulnerabilitySeverity":{"type":"string","enum":["critical","high","medium","low","none"],"title":"VulnerabilitySeverity","description":"CVSS-basierte Severity-Levels"},"VulnerabilityStatus":{"type":"string","enum":["open","patched","pending_verification","patch_failed","accepted_risk","false_positive"],"title":"VulnerabilityStatus","description":"Status der Vulnerability"},"VulnerabilityUpdateRequest":{"properties":{"status":{"$ref":"#/components/schemas/VulnerabilityStatus"}},"type":"object","required":["status"],"title":"VulnerabilityUpdateRequest"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}