tgstation-server 6.19.0
The /tg/station 13 server suite
Loading...
Searching...
No Matches
ClaimsPrincipalExtensions.cs
Go to the documentation of this file.
1using System;
2using System.Globalization;
3using System.Security.Claims;
4
5using Microsoft.IdentityModel.JsonWebTokens;
6using Microsoft.IdentityModel.Tokens;
7
9{
14 {
20 public static long? GetTgsUserId(this ClaimsPrincipal principal)
21 {
22 ArgumentNullException.ThrowIfNull(principal);
23
24 var userIdClaim = principal.FindFirst(JwtRegisteredClaimNames.Sub);
25 if (userIdClaim == default)
26 return null;
27
28 long userId;
29 try
30 {
31 userId = Int64.Parse(userIdClaim.Value, CultureInfo.InvariantCulture);
32 }
33 catch (Exception e)
34 {
35 throw new InvalidOperationException("Failed to parse user ID!", e);
36 }
37
38 return userId;
39 }
40
46 public static long RequireTgsUserId(this ClaimsPrincipal principal)
47 => principal.GetTgsUserId() ?? throw new InvalidOperationException($"Missing '{JwtRegisteredClaimNames.Sub}' claim!");
48
55 public static DateTimeOffset ParseTime(this ClaimsPrincipal principal, string claimName)
56 {
57 ArgumentNullException.ThrowIfNull(principal);
58 ArgumentNullException.ThrowIfNull(claimName);
59
60 var claim = principal.FindFirst(claimName);
61 if (claim == null)
62 throw new InvalidOperationException($"Missing '{claimName}' claim!");
63
64 try
65 {
66 return new DateTimeOffset(
67 EpochTime.DateTime(
68 Int64.Parse(claim.Value, CultureInfo.InvariantCulture)));
69 }
70 catch (Exception ex)
71 {
72 throw new InvalidOperationException($"Failed to parse claim {claimName}: '{claim.Value}'!", ex);
73 }
74 }
75 }
76}
static ? long GetTgsUserId(this ClaimsPrincipal principal)
Parse the Models.User Api.Models.EntityId.Id out of a given authenticated principal .
static long RequireTgsUserId(this ClaimsPrincipal principal)
Parse the Models.User Api.Models.EntityId.Id out of a given authenticated principal .
static DateTimeOffset ParseTime(this ClaimsPrincipal principal, string claimName)
Parse a DateTimeOffset out of a Claim in a given principal .