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