50 lines
2.2 KiB
C#
50 lines
2.2 KiB
C#
using ScadaLink.Commons.Entities.Audit;
|
|
using ScadaLink.Commons.Types.Enums;
|
|
|
|
namespace ScadaLink.AuditLog.Configuration;
|
|
|
|
/// <summary>
|
|
/// Configuration for Audit Log (#23). Bound from the <c>AuditLog</c> section of
|
|
/// <c>appsettings.json</c>. Defaults reflect the design (alog.md §6, §10): an
|
|
/// 8 KiB payload-summary cap, a 64 KiB cap on error rows, and a 365-day central
|
|
/// retention window with monthly partition-switch purge. The default
|
|
/// header-redact list covers HTTP auth headers; per-target overrides extend
|
|
/// (never replace) the global redactor set.
|
|
/// </summary>
|
|
public sealed class AuditLogOptions
|
|
{
|
|
/// <summary>Default payload-summary cap in bytes (default 8 KiB).</summary>
|
|
public int DefaultCapBytes { get; set; } = 8192;
|
|
|
|
/// <summary>Payload-summary cap on error rows in bytes (default 64 KiB).</summary>
|
|
public int ErrorCapBytes { get; set; } = 65536;
|
|
|
|
/// <summary>HTTP headers redacted by default before persistence.</summary>
|
|
public List<string> HeaderRedactList { get; set; } = new()
|
|
{
|
|
"Authorization",
|
|
"X-Api-Key",
|
|
"Cookie",
|
|
"Set-Cookie",
|
|
};
|
|
|
|
/// <summary>Body-content redactors applied globally (regex patterns).</summary>
|
|
public List<string> GlobalBodyRedactors { get; set; } = new();
|
|
|
|
/// <summary>Per-target redaction overrides keyed by target identifier.</summary>
|
|
public Dictionary<string, PerTargetRedactionOverride> PerTargetOverrides { get; set; } = new();
|
|
|
|
/// <summary>Central retention window in days (default 365, range [30, 3650]).</summary>
|
|
public int RetentionDays { get; set; } = 365;
|
|
|
|
/// <summary>
|
|
/// Per-body byte ceiling applied to <see cref="AuditEvent.RequestSummary"/> and
|
|
/// <see cref="AuditEvent.ResponseSummary"/> for <see cref="AuditChannel.ApiInbound"/> rows
|
|
/// (default 1 MiB). The 8 KiB / 64 KiB default/error caps that apply to other channels
|
|
/// do not apply here — inbound traffic captures verbatim up to this ceiling and only
|
|
/// then sets <see cref="AuditEvent.PayloadTruncated"/>. See
|
|
/// <c>docs/plans/2026-05-23-inbound-api-full-response-audit-design.md</c>.
|
|
/// </summary>
|
|
public int InboundMaxBytes { get; set; } = 1_048_576;
|
|
}
|