using System.Security.Claims; namespace Hutopy.Infrastructure.Security; public static class ClaimsPrincipalExtensions { public static Guid GetUserId(this ClaimsPrincipal claims) { return (Guid)claims.GetRequiredClaim(ClaimTypes.NameIdentifier); } public static string GetName(this ClaimsPrincipal claims) { return (string)claims.GetRequiredClaim(ClaimTypes.Name); } public static string? GetAlias(this ClaimsPrincipal claims) { return (string?)claims.GetClaim(KnownClaims.Alias); } public static string? GetPortraitUrl(this ClaimsPrincipal claims) { return (string?)claims.GetClaim(KnownClaims.PortraitUrl); } public static string GetFirstName(this ClaimsPrincipal claims) { return (string)claims.GetRequiredClaim(ClaimTypes.GivenName); } public static string GetLastName(this ClaimsPrincipal claims) { return (string)claims.GetRequiredClaim(ClaimTypes.Surname); } public static string GetEmail(this ClaimsPrincipal claims) { return (string)claims.GetRequiredClaim(ClaimTypes.Email); } private static object? GetClaim(this ClaimsPrincipal claims, string key) { Claim? claim = claims.FindFirst(key); return claim is null ? null : claims.GetRequiredClaim(key); } private static object GetRequiredClaim(this ClaimsPrincipal claims, string key) { Claim? claim = claims.FindFirst(key); if (claim is null) { throw new MissingClaimException(key); } return typeof(TValue) == typeof(Guid) ? Guid.Parse(claim.Value) : Convert.ChangeType(claim.Value, typeof(TValue)); } }