namespace ZA.CoreService.ESBCertificateManager.Models;
public sealed class DeploymentTarget
{
public int Id { get; init; }
public required string Name { get; init; }
public required string Environment { get; init; }
public bool IsActive { get; init; } = true;
public required string TargetDirectory { get; init; }
public required string CertificateFileName { get; init; }
/// Vollständiger Dateipfad (UNC oder lokal) zur Zieldatei.
public string FullTargetPath =>
Path.Combine(TargetDirectory, CertificateFileName);
public bool BackupEnabled { get; init; } = true;
public string BackupDirectoryName { get; init; } = "Backup";
public int? BackupRetentionDays { get; init; }
/// Name des Sonic-ESB-Containers (z.B. "sonic-container-a").
public string ContainerName { get; init; } = string.Empty;
public RestartType RestartType { get; init; } = RestartType.None;
// --- Command-basierter Neustart ---
public string RestartCommand { get; init; } = string.Empty;
public string RestartArguments { get; init; } = string.Empty;
public int RestartTimeoutSeconds { get; init; } = 60;
// --- Sonic-ESB-Management-Neustart ---
///
/// Referenz auf den Namen einer in AppSettings.
/// Pflichtfeld bei RestartType = SonicContainer oder SonicContainerWithXapi.
///
public string SonicConnectionName { get; init; } = string.Empty;
///
/// Pfad zur XApi-Ressourcendatei (.xml/.zip), die vor dem Neustart importiert wird.
/// Pflichtfeld bei RestartType = SonicContainerWithXapi.
///
public string XapiSourcePath { get; init; } = string.Empty;
// --- TLS-Probe nach Deployment ---
public string TlsHost { get; init; } = string.Empty;
public int? TlsPort { get; init; }
///
/// Hostname, der im TLS-Handshake als ServerName (SNI) verwendet wird.
/// Wichtig wenn TlsHost eine IP-Adresse ist, das Zertifikat aber einen DNS-Namen trägt.
/// Ist leer, wird TlsHost als ServerName verwendet.
///
public string TlsServerName { get; init; } = string.Empty;
///
/// Erwarteter SHA-256-Fingerprint des Zertifikats nach dem Deployment (ohne Trennzeichen).
/// Wenn gesetzt, schlägt der TLS-Probe fehl wenn der Fingerprint abweicht.
///
public string? ExpectedFingerprint { get; init; }
public int SortOrder { get; init; }
}
public enum RestartType
{
None = 0,
/// Neustart über einen lokalen Betriebssystem-Prozess (RestartCommand).
Command = 1,
/// Container-Neustart wie in der Sonic Management Console (stop/startcontainer bzw. SMC-API).
SonicContainer = 2,
/// XApi-Ressourcen importieren und danach Container neu starten (Sonic ESB).
SonicContainerWithXapi = 3
}