Catalog/CatalogLite/ExpirationGuard.cs

39 lines
1.5 KiB
C#
Raw Permalink Normal View History

2026-05-26 21:47:55 +02:00
using System.Globalization;
using System.Reflection;
namespace CatalogLite;
internal static class ExpirationGuard
{
private const string GeneratedMetadataKey = "CatalogLiteGeneratedExpirationDate";
2026-05-26 21:47:55 +02:00
private const string MetadataKey = "CatalogLiteExpirationDate";
public static bool IsExpired(out DateOnly? expirationDate)
{
expirationDate = TryReadExpirationDate();
return expirationDate is null || DateOnly.FromDateTime(DateTime.Now) > expirationDate.Value;
2026-05-26 21:47:55 +02:00
}
private static DateOnly? TryReadExpirationDate()
{
if (TryParseDate(BuildExpiration.ExpirationDate, out var generatedDate))
{
return generatedDate;
}
2026-05-26 21:47:55 +02:00
var metadata = typeof(Program).Assembly.GetCustomAttributes<AssemblyMetadataAttribute>();
var metadataValue = metadata.FirstOrDefault(attribute => string.Equals(attribute.Key, GeneratedMetadataKey, StringComparison.Ordinal))?.Value
?? metadata.FirstOrDefault(attribute => string.Equals(attribute.Key, MetadataKey, StringComparison.Ordinal))?.Value;
return TryParseDate(metadataValue, out var metadataDate)
? metadataDate
2026-05-26 21:47:55 +02:00
: null;
}
private static bool TryParseDate(string? value, out DateOnly date)
{
var trimmedValue = value?.Trim();
return DateOnly.TryParseExact(trimmedValue, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)
|| DateOnly.TryParse(trimmedValue, CultureInfo.CurrentCulture, DateTimeStyles.None, out date);
}
2026-05-26 21:47:55 +02:00
}