using System.Security.Claims; namespace Hutopy.Web.Common.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) { var claim = claims.FindFirst(key); if (claim is null) return default; return claims.GetRequiredClaim(key); } private static object GetRequiredClaim(this ClaimsPrincipal claims, string key) { var claim = claims.FindFirst(key); if (claim is null) throw new MissingClaimException(key); if (typeof(TValue) == typeof(Guid)) { return Guid.Parse(claim.Value); } return Convert.ChangeType(claim.Value, typeof(TValue)); } }