Initial commit: ESB Certificate Manager.
EOF Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user