< Summary - Jellyfin

Information
Class: Jellyfin.Api.Auth.SyncPlayAccessPolicy.SyncPlayAccessHandler
Assembly: Jellyfin.Api
File(s): /srv/git/jellyfin/Jellyfin.Api/Auth/SyncPlayAccessPolicy/SyncPlayAccessHandler.cs
Line coverage
24%
Covered lines: 6
Uncovered lines: 19
Coverable lines: 25
Total lines: 76
Line coverage: 24%
Branch coverage
0%
Covered branches: 0
Total branches: 24
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
HandleRequirementAsync(...)0%600240%

File(s)

/srv/git/jellyfin/Jellyfin.Api/Auth/SyncPlayAccessPolicy/SyncPlayAccessHandler.cs

#LineLine coverage
 1using System.Threading.Tasks;
 2using Jellyfin.Api.Extensions;
 3using Jellyfin.Data.Enums;
 4using MediaBrowser.Common.Extensions;
 5using MediaBrowser.Controller.Library;
 6using MediaBrowser.Controller.SyncPlay;
 7using Microsoft.AspNetCore.Authorization;
 8
 9namespace 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
 19        /// <summary>
 20        /// Initializes a new instance of the <see cref="SyncPlayAccessHandler"/> class.
 21        /// </summary>
 22        /// <param name="syncPlayManager">Instance of the <see cref="ISyncPlayManager"/> interface.</param>
 23        /// <param name="userManager">Instance of the <see cref="IUserManager"/> interface.</param>
 1724        public SyncPlayAccessHandler(
 1725            ISyncPlayManager syncPlayManager,
 1726            IUserManager userManager)
 27        {
 1728            _syncPlayManager = syncPlayManager;
 1729            _userManager = userManager;
 1730        }
 31
 32        /// <inheritdoc />
 33        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, SyncPlayAccessRequirement re
 34        {
 035            var userId = context.User.GetUserId();
 036            var user = _userManager.GetUserById(userId);
 037            if (user is null)
 38            {
 039                throw new ResourceNotFoundException();
 40            }
 41
 042            if (requirement.RequiredAccess == SyncPlayAccessRequirementType.HasAccess)
 43            {
 044                if (user.SyncPlayAccess is SyncPlayUserAccessType.CreateAndJoinGroups or SyncPlayUserAccessType.JoinGrou
 045                    || _syncPlayManager.IsUserActive(userId))
 46                {
 047                    context.Succeed(requirement);
 48                }
 49            }
 050            else if (requirement.RequiredAccess == SyncPlayAccessRequirementType.CreateGroup)
 51            {
 052                if (user.SyncPlayAccess == SyncPlayUserAccessType.CreateAndJoinGroups)
 53                {
 054                    context.Succeed(requirement);
 55                }
 56            }
 057            else if (requirement.RequiredAccess == SyncPlayAccessRequirementType.JoinGroup)
 58            {
 059                if (user.SyncPlayAccess == SyncPlayUserAccessType.CreateAndJoinGroups
 060                    || user.SyncPlayAccess == SyncPlayUserAccessType.JoinGroups)
 61                {
 062                    context.Succeed(requirement);
 63                }
 64            }
 065            else if (requirement.RequiredAccess == SyncPlayAccessRequirementType.IsInGroup)
 66            {
 067                if (_syncPlayManager.IsUserActive(userId))
 68                {
 069                    context.Succeed(requirement);
 70                }
 71            }
 72
 073            return Task.CompletedTask;
 74        }
 75    }
 76}