using System; using System.Diagnostics.CodeAnalysis; namespace StellaOps.Concelier.Connector.Ics.Kaspersky.Configuration; public sealed class KasperskyOptions { public static string HttpClientName => "source.ics.kaspersky"; public Uri FeedUri { get; set; } = new("https://ics-cert.kaspersky.com/feed-advisories/", UriKind.Absolute); public TimeSpan WindowSize { get; set; } = TimeSpan.FromDays(30); public TimeSpan WindowOverlap { get; set; } = TimeSpan.FromDays(2); public int MaxPagesPerFetch { get; set; } = 3; public TimeSpan RequestDelay { get; set; } = TimeSpan.FromMilliseconds(500); [MemberNotNull(nameof(FeedUri))] public void Validate() { if (FeedUri is null || !FeedUri.IsAbsoluteUri) { throw new InvalidOperationException("FeedUri must be an absolute URI."); } if (WindowSize <= TimeSpan.Zero) { throw new InvalidOperationException("WindowSize must be greater than zero."); } if (WindowOverlap < TimeSpan.Zero) { throw new InvalidOperationException("WindowOverlap cannot be negative."); } if (WindowOverlap >= WindowSize) { throw new InvalidOperationException("WindowOverlap must be smaller than WindowSize."); } if (MaxPagesPerFetch <= 0) { throw new InvalidOperationException("MaxPagesPerFetch must be positive."); } if (RequestDelay < TimeSpan.Zero) { throw new InvalidOperationException("RequestDelay cannot be negative."); } } }