diff --git a/src/Radarr.Http/Authentication/AuthenticationService.cs b/src/Radarr.Http/Authentication/AuthenticationService.cs index 5079b6e85a4..4da642ec1df 100644 --- a/src/Radarr.Http/Authentication/AuthenticationService.cs +++ b/src/Radarr.Http/Authentication/AuthenticationService.cs @@ -5,6 +5,7 @@ using Nancy; using Nancy.Authentication.Basic; using Nancy.Authentication.Forms; +using Nancy.Routing.Trie.Nodes; using NLog; using NzbDrone.Common.Extensions; using NzbDrone.Core.Authentication; @@ -160,6 +161,11 @@ public bool IsAuthenticated(NancyContext context) return true; } + if (context.Request.IsBundledJsRequest()) + { + return true; + } + if (ValidUser(context)) { return true; diff --git a/src/Radarr.Http/Extensions/Pipelines/SetCookieHeaderPipeline.cs b/src/Radarr.Http/Extensions/Pipelines/SetCookieHeaderPipeline.cs new file mode 100644 index 00000000000..a5e5002abfd --- /dev/null +++ b/src/Radarr.Http/Extensions/Pipelines/SetCookieHeaderPipeline.cs @@ -0,0 +1,30 @@ +using System; +using System.Linq; +using Nancy; +using Nancy.Bootstrapper; + +namespace Radarr.Http.Extensions.Pipelines +{ + public class SetCookieHeaderPipeline : IRegisterNancyPipeline + { + public int Order => 99; + + public void Register(IPipelines pipelines) + { + pipelines.AfterRequest.AddItemToEndOfPipeline((Action)Handle); + } + + private void Handle(NancyContext context) + { + if (context.Request.IsContentRequest() || context.Request.IsBundledJsRequest()) + { + var authCookie = context.Response.Cookies.FirstOrDefault(c => c.Name == "RadarrAuth"); + + if (authCookie != null) + { + context.Response.Cookies.Remove(authCookie); + } + } + } + } +} diff --git a/src/Radarr.Http/Extensions/RequestExtensions.cs b/src/Radarr.Http/Extensions/RequestExtensions.cs index 922f2ea8da8..df2179d9c4d 100644 --- a/src/Radarr.Http/Extensions/RequestExtensions.cs +++ b/src/Radarr.Http/Extensions/RequestExtensions.cs @@ -40,6 +40,11 @@ public static bool IsContentRequest(this Request request) return request.Path.StartsWith("/Content/", StringComparison.InvariantCultureIgnoreCase); } + public static bool IsBundledJsRequest(this Request request) + { + return !request.Path.EqualsIgnoreCase("/initialize.js") && request.Path.EndsWith(".js", StringComparison.InvariantCultureIgnoreCase); + } + public static bool IsSharedContentRequest(this Request request) { return request.Path.StartsWith("/MediaCover/", StringComparison.InvariantCultureIgnoreCase) ||