using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Domain.Exceptions;
namespace Shared.Contracts;
/// Extension methods for reading well-known claims off an authenticated .
public static class ClaimsPrincipalExtensions
{
///
/// Extracts the authenticated caller's user ID from the validated access token's sub claim.
///
/// Thrown when the claim is missing or malformed.
public static Guid GetAuthenticatedUserId(this ClaimsPrincipal user)
{
string? userIdClaim = user.FindFirst(JwtRegisteredClaimNames.Sub)?.Value;
if (!Guid.TryParse(userIdClaim, out Guid userId))
throw new UnauthorizedException("Access token is missing a valid user ID claim");
return userId;
}
}