summaryrefslogtreecommitdiff
path: root/src/marlin.web/Util/ClaimsPrincipalExtensions.cs
blob: 3f4c30708ce2da9f4a72bd5e812713be658851be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
}