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