DefaultAuthorizationHandlerTests.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using AutoFixture;
  4. using AutoFixture.AutoMoq;
  5. using Jellyfin.Api.Auth.DefaultAuthorizationPolicy;
  6. using Jellyfin.Api.Constants;
  7. using Jellyfin.Server.Implementations.Security;
  8. using MediaBrowser.Common.Configuration;
  9. using MediaBrowser.Controller.Library;
  10. using Microsoft.AspNetCore.Authorization;
  11. using Microsoft.AspNetCore.Http;
  12. using Moq;
  13. using Xunit;
  14. namespace Jellyfin.Api.Tests.Auth.DefaultAuthorizationPolicy
  15. {
  16. public class DefaultAuthorizationHandlerTests
  17. {
  18. private readonly Mock<IConfigurationManager> _configurationManagerMock;
  19. private readonly List<IAuthorizationRequirement> _requirements;
  20. private readonly DefaultAuthorizationHandler _sut;
  21. private readonly Mock<IUserManager> _userManagerMock;
  22. private readonly Mock<IHttpContextAccessor> _httpContextAccessor;
  23. public DefaultAuthorizationHandlerTests()
  24. {
  25. var fixture = new Fixture().Customize(new AutoMoqCustomization());
  26. _configurationManagerMock = fixture.Freeze<Mock<IConfigurationManager>>();
  27. _requirements = new List<IAuthorizationRequirement> { new DefaultAuthorizationRequirement() };
  28. _userManagerMock = fixture.Freeze<Mock<IUserManager>>();
  29. _httpContextAccessor = fixture.Freeze<Mock<IHttpContextAccessor>>();
  30. _sut = fixture.Create<DefaultAuthorizationHandler>();
  31. }
  32. [Theory]
  33. [InlineData(UserRoles.Administrator)]
  34. [InlineData(UserRoles.Guest)]
  35. [InlineData(UserRoles.User)]
  36. public async Task ShouldSucceedOnUser(string userRole)
  37. {
  38. TestHelpers.SetupConfigurationManager(_configurationManagerMock, true);
  39. var claims = TestHelpers.SetupUser(
  40. _userManagerMock,
  41. _httpContextAccessor,
  42. userRole);
  43. var context = new AuthorizationHandlerContext(_requirements, claims, null);
  44. await _sut.HandleAsync(context);
  45. Assert.True(context.HasSucceeded);
  46. }
  47. [Theory]
  48. [MemberData(nameof(GetParts_ValidAuthHeader_Success_Data))]
  49. public void GetParts_ValidAuthHeader_Success(string input, Dictionary<string, string> parts)
  50. {
  51. var dict = AuthorizationContext.GetParts(input);
  52. foreach (var (key, value) in parts)
  53. {
  54. Assert.Equal(dict[key], value);
  55. }
  56. }
  57. private static TheoryData<string, Dictionary<string, string>> GetParts_ValidAuthHeader_Success_Data()
  58. {
  59. var data = new TheoryData<string, Dictionary<string, string>>();
  60. data.Add(
  61. "x=\"123,123\",y=\"123\"",
  62. new Dictionary<string, string>
  63. {
  64. { "x", "123,123" },
  65. { "y", "123" }
  66. });
  67. data.Add(
  68. "x=\"123,123\", y=\"123\",z=\"'hi'\"",
  69. new Dictionary<string, string>
  70. {
  71. { "x", "123,123" },
  72. { "y", "123" },
  73. { "z", "'hi'" }
  74. });
  75. data.Add(
  76. "x=\"ab\"",
  77. new Dictionary<string, string>
  78. {
  79. { "x", "ab" }
  80. });
  81. data.Add(
  82. "param=Hörbücher",
  83. new Dictionary<string, string>
  84. {
  85. { "param", "Hörbücher" }
  86. });
  87. data.Add(
  88. "param=%22%Hörbücher",
  89. new Dictionary<string, string>
  90. {
  91. { "param", "\"%Hörbücher" }
  92. });
  93. return data;
  94. }
  95. }
  96. }