112 lines
4.6 KiB
C#
112 lines
4.6 KiB
C#
using Microsoft.Data.SqlClient;
|
|
using ZA.CoreService.ESBCertificateManager.Models;
|
|
|
|
namespace ZA.CoreService.ESBCertificateManager.Data;
|
|
|
|
public sealed class SqlTargetRepository : ITargetRepository
|
|
{
|
|
private readonly string _connectionString;
|
|
|
|
public SqlTargetRepository(string connectionString)
|
|
{
|
|
_connectionString = connectionString;
|
|
}
|
|
|
|
public string SourceDescription => "SQL Server (dbo.DeploymentTargets)";
|
|
|
|
public async Task<IReadOnlyList<DeploymentTarget>> GetActiveTargetsAsync(
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(_connectionString))
|
|
{
|
|
throw new InvalidOperationException("Es ist keine SQL-Verbindungszeichenfolge konfiguriert.");
|
|
}
|
|
|
|
const string sql = """
|
|
SELECT
|
|
Id,
|
|
Name,
|
|
Environment,
|
|
IsActive,
|
|
CertificateTargetPath,
|
|
CertificateFileName,
|
|
ContainerName,
|
|
RestartType,
|
|
RestartCommand,
|
|
RestartArguments,
|
|
RestartTimeoutSeconds,
|
|
SonicConnectionName,
|
|
XapiSourcePath,
|
|
TlsHost,
|
|
TlsPort,
|
|
TlsServerName,
|
|
ExpectedFingerprint,
|
|
SortOrder
|
|
FROM dbo.DeploymentTargets
|
|
WHERE IsActive = 1
|
|
ORDER BY SortOrder, Name;
|
|
""";
|
|
|
|
List<DeploymentTarget> targets = [];
|
|
|
|
await using SqlConnection connection = new(_connectionString);
|
|
await connection.OpenAsync(cancellationToken);
|
|
|
|
await using SqlCommand command = new(sql, connection);
|
|
await using SqlDataReader reader = await command.ExecuteReaderAsync(cancellationToken);
|
|
|
|
int id = reader.GetOrdinal("Id");
|
|
int name = reader.GetOrdinal("Name");
|
|
int environment = reader.GetOrdinal("Environment");
|
|
int isActive = reader.GetOrdinal("IsActive");
|
|
int certificateTargetPath = reader.GetOrdinal("CertificateTargetPath");
|
|
int certificateFileName = reader.GetOrdinal("CertificateFileName");
|
|
int containerName = reader.GetOrdinal("ContainerName");
|
|
int restartType = reader.GetOrdinal("RestartType");
|
|
int restartCommand = reader.GetOrdinal("RestartCommand");
|
|
int restartArguments = reader.GetOrdinal("RestartArguments");
|
|
int restartTimeoutSeconds = reader.GetOrdinal("RestartTimeoutSeconds");
|
|
int sonicConnectionName = reader.GetOrdinal("SonicConnectionName");
|
|
int xapiSourcePath = reader.GetOrdinal("XapiSourcePath");
|
|
int tlsHost = reader.GetOrdinal("TlsHost");
|
|
int tlsPort = reader.GetOrdinal("TlsPort");
|
|
int tlsServerName = reader.GetOrdinal("TlsServerName");
|
|
int expectedFingerprint = reader.GetOrdinal("ExpectedFingerprint");
|
|
int sortOrder = reader.GetOrdinal("SortOrder");
|
|
|
|
while (await reader.ReadAsync(cancellationToken))
|
|
{
|
|
RestartType parsedRestartType = Enum.TryParse(
|
|
reader.GetString(restartType),
|
|
ignoreCase: true,
|
|
out RestartType parsed)
|
|
? parsed
|
|
: RestartType.None;
|
|
|
|
targets.Add(new DeploymentTarget
|
|
{
|
|
Id = reader.GetInt32(id),
|
|
Name = reader.GetString(name),
|
|
Environment = reader.GetString(environment),
|
|
IsActive = reader.GetBoolean(isActive),
|
|
TargetDirectory = reader.GetString(certificateTargetPath),
|
|
CertificateFileName = reader.GetString(certificateFileName),
|
|
ContainerName = reader.GetString(containerName),
|
|
RestartType = parsedRestartType,
|
|
RestartCommand = reader.IsDBNull(restartCommand) ? string.Empty : reader.GetString(restartCommand),
|
|
RestartArguments = reader.GetString(restartArguments),
|
|
RestartTimeoutSeconds = reader.GetInt32(restartTimeoutSeconds),
|
|
SonicConnectionName = reader.GetString(sonicConnectionName),
|
|
XapiSourcePath = reader.GetString(xapiSourcePath),
|
|
TlsHost = reader.GetString(tlsHost),
|
|
TlsPort = reader.IsDBNull(tlsPort) ? null : reader.GetInt32(tlsPort),
|
|
TlsServerName = reader.GetString(tlsServerName),
|
|
ExpectedFingerprint = reader.IsDBNull(expectedFingerprint) ? null : reader.GetString(expectedFingerprint),
|
|
SortOrder = reader.GetInt32(sortOrder)
|
|
});
|
|
}
|
|
|
|
return targets;
|
|
}
|
|
}
|