You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using Nancy;
|
|
|
|
|
using Nancy.Bootstrapper;
|
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Api.Extensions.Pipelines
|
|
|
|
|
{
|
|
|
|
|
public class CorsPipeline : IRegisterNancyPipeline
|
|
|
|
|
{
|
|
|
|
|
public void Register(IPipelines pipelines)
|
|
|
|
|
{
|
|
|
|
|
pipelines.AfterRequest.AddItemToEndOfPipeline((Action<NancyContext>) Handle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Handle(NancyContext context)
|
|
|
|
|
{
|
|
|
|
|
if (context == null || context.Response.Headers.ContainsKey(AccessControlHeaders.AllowOrigin))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ApplyResponseHeaders(context.Response, context.Request);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ApplyResponseHeaders(Response response, Request request)
|
|
|
|
|
{
|
|
|
|
|
var allowedMethods = "GET, OPTIONS, PATCH, POST, PUT, DELETE";
|
|
|
|
|
|
|
|
|
|
if (response.Headers.ContainsKey("Allow"))
|
|
|
|
|
{
|
|
|
|
|
allowedMethods = response.Headers["Allow"];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var requestedHeaders = String.Join(", ", request.Headers[AccessControlHeaders.RequestHeaders]);
|
|
|
|
|
|
|
|
|
|
response.Headers.Add(AccessControlHeaders.AllowOrigin, "*");
|
|
|
|
|
response.Headers.Add(AccessControlHeaders.AllowMethods, allowedMethods);
|
|
|
|
|
|
|
|
|
|
if (request.Headers[AccessControlHeaders.RequestHeaders].Any())
|
|
|
|
|
{
|
|
|
|
|
response.Headers.Add(AccessControlHeaders.AllowHeaders, requestedHeaders);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|