| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | using System;using System.Linq;using System.Security.Claims;using Jellyfin.Api.Constants;namespace Jellyfin.Api.Extensions;/// <summary>/// Extensions for <see cref="ClaimsPrincipal"/>./// </summary>public static class ClaimsPrincipalExtensions{    /// <summary>    /// Get user id from claims.    /// </summary>    /// <param name="user">Current claims principal.</param>    /// <returns>User id.</returns>    public static Guid GetUserId(this ClaimsPrincipal user)    {        var value = GetClaimValue(user, InternalClaimTypes.UserId);        return string.IsNullOrEmpty(value)            ? default            : Guid.Parse(value);    }    /// <summary>    /// Get device id from claims.    /// </summary>    /// <param name="user">Current claims principal.</param>    /// <returns>Device id.</returns>    public static string? GetDeviceId(this ClaimsPrincipal user)        => GetClaimValue(user, InternalClaimTypes.DeviceId);    /// <summary>    /// Get device from claims.    /// </summary>    /// <param name="user">Current claims principal.</param>    /// <returns>Device.</returns>    public static string? GetDevice(this ClaimsPrincipal user)        => GetClaimValue(user, InternalClaimTypes.Device);    /// <summary>    /// Get client from claims.    /// </summary>    /// <param name="user">Current claims principal.</param>    /// <returns>Client.</returns>    public static string? GetClient(this ClaimsPrincipal user)        => GetClaimValue(user, InternalClaimTypes.Client);    /// <summary>    /// Get version from claims.    /// </summary>    /// <param name="user">Current claims principal.</param>    /// <returns>Version.</returns>    public static string? GetVersion(this ClaimsPrincipal user)        => GetClaimValue(user, InternalClaimTypes.Version);    /// <summary>    /// Get token from claims.    /// </summary>    /// <param name="user">Current claims principal.</param>    /// <returns>Token.</returns>    public static string? GetToken(this ClaimsPrincipal user)        => GetClaimValue(user, InternalClaimTypes.Token);    /// <summary>    /// Gets a flag specifying whether the request is using an api key.    /// </summary>    /// <param name="user">Current claims principal.</param>    /// <returns>The flag specifying whether the request is using an api key.</returns>    public static bool GetIsApiKey(this ClaimsPrincipal user)    {        var claimValue = GetClaimValue(user, InternalClaimTypes.IsApiKey);        return !string.IsNullOrEmpty(claimValue)               && bool.TryParse(claimValue, out var parsedClaimValue)               && parsedClaimValue;    }    private static string? GetClaimValue(in ClaimsPrincipal user, string name)        => user.Claims.FirstOrDefault(claim => claim.Type.Equals(name, StringComparison.OrdinalIgnoreCase))?.Value;}
 |