Add live TLS certificate probing and improve restart error handling.

Configure CertificateCheckUrl per container for curl-like TLS checks, classify Sonic permission errors, and extend setup wizard for container management.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-03 13:16:21 +02:00
co-authored by Cursor
parent d20e0df618
commit 58b7826162
1430 changed files with 358394 additions and 71 deletions
@@ -0,0 +1,75 @@
namespace ZA.CoreService.ESBCertificateManager.Services;
/// <summary>
/// Erkennt typische Sonic-/MfApi-Fehlermeldungen und liefert
/// verständliche Hinweise für die UI.
/// </summary>
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;
}
}