namespace ZA.CoreService.ESBCertificateManager.Services; /// /// Erkennt typische Sonic-/MfApi-Fehlermeldungen und liefert /// verständliche Hinweise für die UI. /// public static class SonicErrorClassifier { private static readonly string[] PermissionMarkers = [ "ManagePermissionDenied", "ConfigurePermissionDenied", "ManagementPermissionDenied", "PermissionDenied", "MFSecurityException", "SecurityException", "Access is denied", "Access denied", "not authorized", "nicht autorisiert", "permission denied", "keine Berechtigung", "Insufficient privileges", "Unauthorized" ]; public static bool LooksLikeMissingPermission(string? text) { if (string.IsNullOrWhiteSpace(text)) { return false; } foreach (string marker in PermissionMarkers) { if (text.Contains(marker, StringComparison.OrdinalIgnoreCase)) { return true; } } return false; } public static string PermissionDeniedUserMessage => "Keine Rechte für den Neustart.\n\n" + "Der hinterlegte Sonic-Benutzer darf diesen Container " + "nicht neu starten (Manage-/Restart-Recht fehlt).\n\n" + "Bitte in der Sonic Management Console die Rechte prüfen " + "oder ein Profil mit ausreichenden Rechten verwenden."; public static string FormatRestartFailure( string? status, string? detail) { string combined = string.Join( Environment.NewLine, new[] { status, detail } .Where(value => !string.IsNullOrWhiteSpace(value))); if (LooksLikeMissingPermission(combined)) { return PermissionDeniedUserMessage + Environment.NewLine + Environment.NewLine + "--- Technische Details ---" + Environment.NewLine + combined; } return string.IsNullOrWhiteSpace(combined) ? "Neustart fehlgeschlagen (keine Details)." : combined; } }