diff options
Diffstat (limited to 'src/marlin.web/Util')
| -rw-r--r-- | src/marlin.web/Util/ClaimsPrincipalExtensions.cs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/marlin.web/Util/ClaimsPrincipalExtensions.cs b/src/marlin.web/Util/ClaimsPrincipalExtensions.cs new file mode 100644 index 0000000..3f4c307 --- /dev/null +++ b/src/marlin.web/Util/ClaimsPrincipalExtensions.cs @@ -0,0 +1,22 @@ +namespace marlin.web.Util; + +using System.Security.Claims; + +public static class ClaimsPrincipalExtensions +{ + public static Guid? GetAgentId(this ClaimsPrincipal user) => user.GetGuidClaim("agent_id"); + public static Guid? GetJobId(this ClaimsPrincipal user) => user.GetGuidClaim("job_id"); + public static Guid? GetUserId(this ClaimsPrincipal user) => user.GetGuidClaim("user_id"); + + public static Guid RequireAgentId(this ClaimsPrincipal user) => + user.GetAgentId() ?? throw new InvalidOperationException("Request has no agent_id claim."); + + public static Guid RequireJobId(this ClaimsPrincipal user) => + user.GetJobId() ?? throw new InvalidOperationException("Request has no job_id claim."); + + public static Guid RequireUserId(this ClaimsPrincipal user) => + user.GetUserId() ?? throw new InvalidOperationException("Request has no user_id claim."); + + private static Guid? GetGuidClaim(this ClaimsPrincipal user, string type) => + Guid.TryParse(user.FindFirstValue(type), out var value) ? value : null; +} |
