ClaimHelpers.cs 2.6 KB

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