using System; using System.Linq; using System.Net; using System.Threading.Tasks; using Jellyfin.Networking.Configuration; using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using Microsoft.AspNetCore.Http; using NetworkCollection; namespace Jellyfin.Server.Middleware { /// /// Validates the LAN host IP based on application configuration. /// public class LanFilteringMiddleware { private readonly RequestDelegate _next; /// /// Initializes a new instance of the class. /// /// The next delegate in the pipeline. public LanFilteringMiddleware(RequestDelegate next) { _next = next; } /// /// Executes the middleware action. /// /// The current HTTP context. /// The network manager. /// The server configuration manager. /// The async task. public async Task Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager) { var host = httpContext.Connection.RemoteIpAddress ?? IPAddress.Loopback; if (!networkManager.IsInLocalNetwork(host) && !serverConfigurationManager.GetNetworkConfiguration().EnableRemoteAccess) { return; } await _next(httpContext).ConfigureAwait(false); } } }