diff options
| author | BaronGreenback <jimcartlidge@yahoo.co.uk> | 2021-04-11 17:17:05 +0100 |
|---|---|---|
| committer | BaronGreenback <jimcartlidge@yahoo.co.uk> | 2021-04-11 17:17:05 +0100 |
| commit | fb7587dd84784afb7c64aadf1fc2d0bab5251814 (patch) | |
| tree | 1c597abdbe77812987059adff38a97ba30930b17 /Jellyfin.Api/Auth/LocalNetworkAccessPolicy/LocalNetworkAccessHandler.cs | |
| parent | af027b62835a64b439b2f66bf50205aea9b47da0 (diff) | |
Renamed
Diffstat (limited to 'Jellyfin.Api/Auth/LocalNetworkAccessPolicy/LocalNetworkAccessHandler.cs')
| -rw-r--r-- | Jellyfin.Api/Auth/LocalNetworkAccessPolicy/LocalNetworkAccessHandler.cs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Jellyfin.Api/Auth/LocalNetworkAccessPolicy/LocalNetworkAccessHandler.cs b/Jellyfin.Api/Auth/LocalNetworkAccessPolicy/LocalNetworkAccessHandler.cs new file mode 100644 index 000000000..d691c5594 --- /dev/null +++ b/Jellyfin.Api/Auth/LocalNetworkAccessPolicy/LocalNetworkAccessHandler.cs @@ -0,0 +1,46 @@ +using System.Threading.Tasks; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Library; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; + +namespace Jellyfin.Api.Auth.LocalNetworkAccessPolicy +{ + /// <summary> + /// Local access handler. + /// </summary> + public class LocalNetworkAccessHandler : BaseAuthorizationHandler<LocalNetworkAccessRequirement> + { + /// <summary> + /// Initializes a new instance of the <see cref="LocalNetworkAccessHandler"/> 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> + public LocalNetworkAccessHandler( + IUserManager userManager, + INetworkManager networkManager, + IHttpContextAccessor httpContextAccessor) + : base(userManager, networkManager, httpContextAccessor) + { + } + + /// <inheritdoc /> + protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, LocalNetworkAccessRequirement requirement) + { + var ip = HttpContextAccessor.HttpContext?.Connection.RemoteIpAddress; + + // Loopback will be on LAN, so we can accept null. + if (ip == null || NetworkManager.IsInLocalNetwork(ip)) + { + context.Succeed(requirement); + } + else + { + context.Fail(); + } + + return Task.CompletedTask; + } + } +} |
