| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | 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 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;}
 |