48 lines
1.5 KiB
C#
48 lines
1.5 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using static StellaOps.Localization.T;
|
|
|
|
namespace StellaOps.Cryptography.Kms;
|
|
|
|
public sealed partial class FileKmsClient
|
|
{
|
|
private static string GetMetadataPath(string root, string keyId)
|
|
=> Path.Combine(root, keyId, "metadata.json");
|
|
|
|
private string GetKeyDirectory(string keyId)
|
|
{
|
|
var path = Path.Combine(_options.RootPath, keyId);
|
|
Directory.CreateDirectory(path);
|
|
return path;
|
|
}
|
|
|
|
private static KeyVersionRecord ResolveVersion(KeyMetadataRecord record, string? keyVersion)
|
|
{
|
|
KeyVersionRecord? version = null;
|
|
if (!string.IsNullOrWhiteSpace(keyVersion))
|
|
{
|
|
version = record.Versions.SingleOrDefault(v => string.Equals(v.VersionId, keyVersion, StringComparison.Ordinal));
|
|
if (version is null)
|
|
{
|
|
throw new InvalidOperationException(_t("crypto.kms.key_version_not_found", keyVersion, record.KeyId));
|
|
}
|
|
}
|
|
else if (!string.IsNullOrWhiteSpace(record.ActiveVersion))
|
|
{
|
|
version = record.Versions.SingleOrDefault(v => string.Equals(v.VersionId, record.ActiveVersion, StringComparison.Ordinal));
|
|
}
|
|
|
|
version ??= record.Versions
|
|
.Where(v => v.State == KmsKeyState.Active)
|
|
.OrderByDescending(v => v.CreatedAt)
|
|
.FirstOrDefault();
|
|
|
|
if (version is null)
|
|
{
|
|
throw new InvalidOperationException(_t("crypto.kms.key_no_active_version", record.KeyId));
|
|
}
|
|
|
|
return version;
|
|
}
|
|
} |