FirstTimeSetupHandler.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System.Threading.Tasks;
  2. using Jellyfin.Api.Constants;
  3. using Jellyfin.Api.Extensions;
  4. using Jellyfin.Extensions;
  5. using MediaBrowser.Common.Configuration;
  6. using MediaBrowser.Common.Extensions;
  7. using MediaBrowser.Controller.Library;
  8. using Microsoft.AspNetCore.Authorization;
  9. namespace Jellyfin.Api.Auth.FirstTimeSetupPolicy
  10. {
  11. /// <summary>
  12. /// Authorization handler for requiring first time setup or default privileges.
  13. /// </summary>
  14. public class FirstTimeSetupHandler : AuthorizationHandler<FirstTimeSetupRequirement>
  15. {
  16. private readonly IConfigurationManager _configurationManager;
  17. private readonly IUserManager _userManager;
  18. /// <summary>
  19. /// Initializes a new instance of the <see cref="FirstTimeSetupHandler" /> class.
  20. /// </summary>
  21. /// <param name="configurationManager">Instance of the <see cref="IConfigurationManager"/> interface.</param>
  22. /// <param name="userManager">Instance of the <see cref="IUserManager"/> interface.</param>
  23. public FirstTimeSetupHandler(
  24. IConfigurationManager configurationManager,
  25. IUserManager userManager)
  26. {
  27. _configurationManager = configurationManager;
  28. _userManager = userManager;
  29. }
  30. /// <inheritdoc />
  31. protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, FirstTimeSetupRequirement requirement)
  32. {
  33. if (!_configurationManager.CommonConfiguration.IsStartupWizardCompleted)
  34. {
  35. context.Succeed(requirement);
  36. return Task.CompletedTask;
  37. }
  38. var contextUser = context.User;
  39. if (requirement.RequireAdmin && !contextUser.IsInRole(UserRoles.Administrator))
  40. {
  41. context.Fail();
  42. return Task.CompletedTask;
  43. }
  44. var userId = contextUser.GetUserId();
  45. if (userId.IsEmpty())
  46. {
  47. context.Fail();
  48. return Task.CompletedTask;
  49. }
  50. if (!requirement.ValidateParentalSchedule)
  51. {
  52. context.Succeed(requirement);
  53. return Task.CompletedTask;
  54. }
  55. var user = _userManager.GetUserById(userId);
  56. if (user is null)
  57. {
  58. throw new ResourceNotFoundException();
  59. }
  60. if (user.IsParentalScheduleAllowed())
  61. {
  62. context.Succeed(requirement);
  63. }
  64. return Task.CompletedTask;
  65. }
  66. }
  67. }