mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 03:27:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Linq;
 | 
						|
using System.Security.Claims;
 | 
						|
using Jellyfin.Api.Constants;
 | 
						|
 | 
						|
namespace Jellyfin.Api.Helpers
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Claim Helpers.
 | 
						|
    /// </summary>
 | 
						|
    public static class ClaimHelpers
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Get user id from claims.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="user">Current claims principal.</param>
 | 
						|
        /// <returns>User id.</returns>
 | 
						|
        public static Guid? GetUserId(in ClaimsPrincipal user)
 | 
						|
        {
 | 
						|
            var value = GetClaimValue(user, InternalClaimTypes.UserId);
 | 
						|
            return string.IsNullOrEmpty(value)
 | 
						|
                ? null
 | 
						|
                : (Guid?)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(in 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(in 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(in 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(in 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(in 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(in 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)
 | 
						|
        {
 | 
						|
            return user?.Identities
 | 
						|
                .SelectMany(c => c.Claims)
 | 
						|
                .Where(claim => claim.Type.Equals(name, StringComparison.OrdinalIgnoreCase))
 | 
						|
                .Select(claim => claim.Value)
 | 
						|
                .FirstOrDefault();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |