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; } }