ClaimHelpers.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #nullable enable
  2. using System;
  3. using System.Linq;
  4. using System.Security.Claims;
  5. using Jellyfin.Api.Constants;
  6. namespace Jellyfin.Api.Helpers
  7. {
  8. /// <summary>
  9. /// Claim Helpers.
  10. /// </summary>
  11. public static class ClaimHelpers
  12. {
  13. /// <summary>
  14. /// Get user id from claims.
  15. /// </summary>
  16. /// <param name="user">Current claims principal.</param>
  17. /// <returns>User id.</returns>
  18. public static Guid? GetUserId(in ClaimsPrincipal user)
  19. {
  20. var value = GetClaimValue(user, InternalClaimTypes.UserId);
  21. return string.IsNullOrEmpty(value)
  22. ? null
  23. : (Guid?)Guid.Parse(value);
  24. }
  25. /// <summary>
  26. /// Get device id from claims.
  27. /// </summary>
  28. /// <param name="user">Current claims principal.</param>
  29. /// <returns>Device id.</returns>
  30. public static string? GetDeviceId(in ClaimsPrincipal user)
  31. => GetClaimValue(user, InternalClaimTypes.DeviceId);
  32. /// <summary>
  33. /// Get device from claims.
  34. /// </summary>
  35. /// <param name="user">Current claims principal.</param>
  36. /// <returns>Device.</returns>
  37. public static string? GetDevice(in ClaimsPrincipal user)
  38. => GetClaimValue(user, InternalClaimTypes.Device);
  39. /// <summary>
  40. /// Get client from claims.
  41. /// </summary>
  42. /// <param name="user">Current claims principal.</param>
  43. /// <returns>Client.</returns>
  44. public static string? GetClient(in ClaimsPrincipal user)
  45. => GetClaimValue(user, InternalClaimTypes.Client);
  46. /// <summary>
  47. /// Get version from claims.
  48. /// </summary>
  49. /// <param name="user">Current claims principal.</param>
  50. /// <returns>Version.</returns>
  51. public static string? GetVersion(in ClaimsPrincipal user)
  52. => GetClaimValue(user, InternalClaimTypes.Version);
  53. /// <summary>
  54. /// Get token from claims.
  55. /// </summary>
  56. /// <param name="user">Current claims principal.</param>
  57. /// <returns>Token.</returns>
  58. public static string? GetToken(in ClaimsPrincipal user)
  59. => GetClaimValue(user, InternalClaimTypes.Token);
  60. private static string? GetClaimValue(in ClaimsPrincipal user, string name)
  61. {
  62. return user?.Identities
  63. .SelectMany(c => c.Claims)
  64. .Where(claim => claim.Type.Equals(name, StringComparison.OrdinalIgnoreCase))
  65. .Select(claim => claim.Value)
  66. .FirstOrDefault();
  67. }
  68. }
  69. }