SyncPlayAccessHandler.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using System.Threading.Tasks;
  2. using Jellyfin.Api.Extensions;
  3. using Jellyfin.Data.Enums;
  4. using Jellyfin.Database.Implementations.Enums;
  5. using MediaBrowser.Common.Extensions;
  6. using MediaBrowser.Controller.Library;
  7. using MediaBrowser.Controller.SyncPlay;
  8. using Microsoft.AspNetCore.Authorization;
  9. namespace Jellyfin.Api.Auth.SyncPlayAccessPolicy
  10. {
  11. /// <summary>
  12. /// Default authorization handler.
  13. /// </summary>
  14. public class SyncPlayAccessHandler : AuthorizationHandler<SyncPlayAccessRequirement>
  15. {
  16. private readonly ISyncPlayManager _syncPlayManager;
  17. private readonly IUserManager _userManager;
  18. /// <summary>
  19. /// Initializes a new instance of the <see cref="SyncPlayAccessHandler"/> class.
  20. /// </summary>
  21. /// <param name="syncPlayManager">Instance of the <see cref="ISyncPlayManager"/> interface.</param>
  22. /// <param name="userManager">Instance of the <see cref="IUserManager"/> interface.</param>
  23. public SyncPlayAccessHandler(
  24. ISyncPlayManager syncPlayManager,
  25. IUserManager userManager)
  26. {
  27. _syncPlayManager = syncPlayManager;
  28. _userManager = userManager;
  29. }
  30. /// <inheritdoc />
  31. protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, SyncPlayAccessRequirement requirement)
  32. {
  33. var userId = context.User.GetUserId();
  34. var user = _userManager.GetUserById(userId);
  35. if (user is null)
  36. {
  37. throw new ResourceNotFoundException();
  38. }
  39. if (requirement.RequiredAccess == SyncPlayAccessRequirementType.HasAccess)
  40. {
  41. if (user.SyncPlayAccess is SyncPlayUserAccessType.CreateAndJoinGroups or SyncPlayUserAccessType.JoinGroups
  42. || _syncPlayManager.IsUserActive(userId))
  43. {
  44. context.Succeed(requirement);
  45. }
  46. }
  47. else if (requirement.RequiredAccess == SyncPlayAccessRequirementType.CreateGroup)
  48. {
  49. if (user.SyncPlayAccess == SyncPlayUserAccessType.CreateAndJoinGroups)
  50. {
  51. context.Succeed(requirement);
  52. }
  53. }
  54. else if (requirement.RequiredAccess == SyncPlayAccessRequirementType.JoinGroup)
  55. {
  56. if (user.SyncPlayAccess == SyncPlayUserAccessType.CreateAndJoinGroups
  57. || user.SyncPlayAccess == SyncPlayUserAccessType.JoinGroups)
  58. {
  59. context.Succeed(requirement);
  60. }
  61. }
  62. else if (requirement.RequiredAccess == SyncPlayAccessRequirementType.IsInGroup)
  63. {
  64. if (_syncPlayManager.IsUserActive(userId))
  65. {
  66. context.Succeed(requirement);
  67. }
  68. }
  69. return Task.CompletedTask;
  70. }
  71. }
  72. }