using System.Security.Claims; using ZB.MOM.WW.Auth.AspNetCore; namespace ZB.MOM.WW.MxGateway.Server.Security.Audit; /// /// HTTP-context-backed implementation of that reads the /// dashboard operator's identity from the current . /// /// /// Claim resolution order: /// /// ("zb:username") — the canonical LDAP login name. /// . — framework fallback (= = = display name). /// — explicit fallback matching the claim emitted by DashboardAuthenticator.CreatePrincipal. /// /// Returns when there is no HTTP context or the user is not authenticated. /// public sealed class HttpAuditActorAccessor(IHttpContextAccessor httpContextAccessor) : IAuditActorAccessor { /// public string? CurrentActor { get { ClaimsPrincipal? user = httpContextAccessor.HttpContext?.User; if (user?.Identity?.IsAuthenticated != true) { return null; } // Prefer the canonical login-username claim (set by DashboardAuthenticator). string? username = user.FindFirstValue(ZbClaimTypes.Username); if (!string.IsNullOrWhiteSpace(username)) { return username; } // Framework fallback: Identity.Name is driven by the ClaimsIdentity nameClaimType, // which DashboardAuthenticator sets to ZbClaimTypes.Name (= ClaimTypes.Name = display name). string? identityName = user.Identity?.Name; if (!string.IsNullOrWhiteSpace(identityName)) { return identityName; } // Final explicit fallback — ZbClaimTypes.Name claim value directly. return user.FindFirstValue(ZbClaimTypes.Name); } } }