FirstTimeSetupHandler.cs 2.5 KB

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