diff --git a/EnvelopeGenerator.API/Extensions/ControllerExtensions.cs b/EnvelopeGenerator.API/Extensions/SenderClaimExtensions.cs similarity index 80% rename from EnvelopeGenerator.API/Extensions/ControllerExtensions.cs rename to EnvelopeGenerator.API/Extensions/SenderClaimExtensions.cs index 4eb12f74..9284aca4 100644 --- a/EnvelopeGenerator.API/Extensions/ControllerExtensions.cs +++ b/EnvelopeGenerator.API/Extensions/SenderClaimExtensions.cs @@ -6,8 +6,24 @@ namespace EnvelopeGenerator.API.Extensions /// /// Provides extension methods for extracting user information from a . /// - public static class ControllerExtensions + public static class SenderClaimExtensions { + private static string GetRequiredClaimOfSender(this ClaimsPrincipal user, string claimType) + { + var value = user.FindFirstValue(claimType); + if (value is not null) + { + return value; + } + + var identity = user.Identity; + var principalName = identity?.Name ?? "(anonymous)"; + var authType = identity?.AuthenticationType ?? "(none)"; + var availableClaims = string.Join(", ", user.Claims.Select(c => $"{c.Type}={c.Value}")); + var message = $"Required claim '{claimType}' is missing for user '{principalName}' (auth: {authType}). Available claims: [{availableClaims}]."; + throw new InvalidOperationException(message); + } + /// /// Attempts to retrieve the user's ID from the claims. Returns null if the ID is not found or invalid. ///