summaryrefslogtreecommitdiff
path: root/src/marlin.web/Util
diff options
context:
space:
mode:
Diffstat (limited to 'src/marlin.web/Util')
-rw-r--r--src/marlin.web/Util/ClaimsPrincipalExtensions.cs22
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;
+}