| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | 
							- using System.Security.Claims;
 
- using Jellyfin.Api.Helpers;
 
- using Jellyfin.Data.Enums;
 
- using MediaBrowser.Common.Extensions;
 
- using MediaBrowser.Common.Net;
 
- using MediaBrowser.Controller.Library;
 
- using Microsoft.AspNetCore.Authorization;
 
- using Microsoft.AspNetCore.Http;
 
- namespace Jellyfin.Api.Auth
 
- {
 
-     /// <summary>
 
-     /// Base authorization handler.
 
-     /// </summary>
 
-     /// <typeparam name="T">Type of Authorization Requirement.</typeparam>
 
-     public abstract class BaseAuthorizationHandler<T> : AuthorizationHandler<T>
 
-         where T : IAuthorizationRequirement
 
-     {
 
-         private readonly IUserManager _userManager;
 
-         private readonly INetworkManager _networkManager;
 
-         private readonly IHttpContextAccessor _httpContextAccessor;
 
-         /// <summary>
 
-         /// Initializes a new instance of the <see cref="BaseAuthorizationHandler{T}"/> class.
 
-         /// </summary>
 
-         /// <param name="userManager">Instance of the <see cref="IUserManager"/> interface.</param>
 
-         /// <param name="networkManager">Instance of the <see cref="INetworkManager"/> interface.</param>
 
-         /// <param name="httpContextAccessor">Instance of the <see cref="IHttpContextAccessor"/> interface.</param>
 
-         protected BaseAuthorizationHandler(
 
-             IUserManager userManager,
 
-             INetworkManager networkManager,
 
-             IHttpContextAccessor httpContextAccessor)
 
-         {
 
-             _userManager = userManager;
 
-             _networkManager = networkManager;
 
-             _httpContextAccessor = httpContextAccessor;
 
-         }
 
-         /// <summary>
 
-         /// Validate authenticated claims.
 
-         /// </summary>
 
-         /// <param name="claimsPrincipal">Request claims.</param>
 
-         /// <param name="ignoreSchedule">Whether to ignore parental control.</param>
 
-         /// <param name="localAccessOnly">Whether access is to be allowed locally only.</param>
 
-         /// <param name="requiredDownloadPermission">Whether validation requires download permission.</param>
 
-         /// <returns>Validated claim status.</returns>
 
-         protected bool ValidateClaims(
 
-             ClaimsPrincipal claimsPrincipal,
 
-             bool ignoreSchedule = false,
 
-             bool localAccessOnly = false,
 
-             bool requiredDownloadPermission = false)
 
-         {
 
-             // ApiKey is currently global admin, always allow.
 
-             var isApiKey = ClaimHelpers.GetIsApiKey(claimsPrincipal);
 
-             if (isApiKey)
 
-             {
 
-                 return true;
 
-             }
 
-             // Ensure claim has userId.
 
-             var userId = ClaimHelpers.GetUserId(claimsPrincipal);
 
-             if (!userId.HasValue)
 
-             {
 
-                 return false;
 
-             }
 
-             // Ensure userId links to a valid user.
 
-             var user = _userManager.GetUserById(userId.Value);
 
-             if (user == null)
 
-             {
 
-                 return false;
 
-             }
 
-             // Ensure user is not disabled.
 
-             if (user.HasPermission(PermissionKind.IsDisabled))
 
-             {
 
-                 return false;
 
-             }
 
-             var ip = _httpContextAccessor.HttpContext.GetNormalizedRemoteIp();
 
-             var isInLocalNetwork = _networkManager.IsInLocalNetwork(ip);
 
-             // User cannot access remotely and user is remote
 
-             if (!user.HasPermission(PermissionKind.EnableRemoteAccess) && !isInLocalNetwork)
 
-             {
 
-                 return false;
 
-             }
 
-             if (localAccessOnly && !isInLocalNetwork)
 
-             {
 
-                 return false;
 
-             }
 
-             // User attempting to access out of parental control hours.
 
-             if (!ignoreSchedule
 
-                 && !user.HasPermission(PermissionKind.IsAdministrator)
 
-                 && !user.IsParentalScheduleAllowed())
 
-             {
 
-                 return false;
 
-             }
 
-             // User attempting to download without permission.
 
-             if (requiredDownloadPermission
 
-                 && !user.HasPermission(PermissionKind.EnableContentDownloading))
 
-             {
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-     }
 
- }
 
 
  |