mirror of
https://github.com/Radarr/Radarr
synced 2025-12-18 22:40:28 +01:00
67 lines
2 KiB
C#
67 lines
2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Nancy.Responses;
|
|
using NLog;
|
|
using Nancy;
|
|
using NzbDrone.Api.Frontend.Mappers;
|
|
using NzbDrone.Core.Configuration;
|
|
|
|
namespace NzbDrone.Api.Frontend
|
|
{
|
|
public class StaticResourceModule : NancyModule
|
|
{
|
|
private readonly IEnumerable<IMapHttpRequestsToDisk> _requestMappers;
|
|
private readonly IConfigFileProvider _configFileProvider;
|
|
private readonly Logger _logger;
|
|
|
|
|
|
public StaticResourceModule(IEnumerable<IMapHttpRequestsToDisk> requestMappers, IConfigFileProvider configFileProvider, Logger logger)
|
|
{
|
|
_requestMappers = requestMappers;
|
|
_configFileProvider = configFileProvider;
|
|
_logger = logger;
|
|
|
|
Get["/{resource*}"] = x => Index();
|
|
Get["/"] = x => Index();
|
|
}
|
|
|
|
private Response Index()
|
|
{
|
|
var path = Request.Url.Path;
|
|
|
|
if (
|
|
string.IsNullOrWhiteSpace(path) ||
|
|
path.StartsWith("/api", StringComparison.CurrentCultureIgnoreCase) ||
|
|
path.StartsWith("/signalr", StringComparison.CurrentCultureIgnoreCase))
|
|
{
|
|
return new NotFoundResponse();
|
|
}
|
|
|
|
//Redirect to the subfolder if the request went to the base URL
|
|
if (path.Equals("/"))
|
|
{
|
|
var urlBase = _configFileProvider.UrlBase;
|
|
|
|
if (!string.IsNullOrEmpty(urlBase))
|
|
{
|
|
if (Request.Url.BasePath != urlBase)
|
|
{
|
|
return new RedirectResponse(urlBase + "/");
|
|
}
|
|
}
|
|
}
|
|
|
|
var mapper = _requestMappers.SingleOrDefault(m => m.CanHandle(path));
|
|
|
|
if (mapper != null)
|
|
{
|
|
return mapper.GetResponse(path);
|
|
}
|
|
|
|
_logger.Warn("Couldn't find handler for {0}", path);
|
|
|
|
return new NotFoundResponse();
|
|
}
|
|
}
|
|
}
|