mirror of
https://github.com/Radarr/Radarr.git
synced 2024-11-10 13:02:47 +01:00
Allow Basic Auth on API
This commit is contained in:
parent
c5ae38638a
commit
5841140c99
@ -1,4 +1,6 @@
|
||||
using Nancy.Authentication.Basic;
|
||||
using System;
|
||||
using Nancy;
|
||||
using Nancy.Authentication.Basic;
|
||||
using Nancy.Security;
|
||||
using NzbDrone.Core.Configuration;
|
||||
|
||||
@ -7,6 +9,7 @@ namespace NzbDrone.Api.Authentication
|
||||
public interface IAuthenticationService : IUserValidator
|
||||
{
|
||||
bool Enabled { get; }
|
||||
bool IsAuthenticated(NancyContext context);
|
||||
}
|
||||
|
||||
public class AuthenticationService : IAuthenticationService
|
||||
@ -44,5 +47,12 @@ public bool Enabled
|
||||
return _configFileProvider.AuthenticationEnabled;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsAuthenticated(NancyContext context)
|
||||
{
|
||||
if (context.CurrentUser == null && _configFileProvider.AuthenticationEnabled) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,9 +25,7 @@ private Response RequiresAuthentication(NancyContext context)
|
||||
{
|
||||
Response response = null;
|
||||
|
||||
if (!context.Request.IsApiRequest() &&
|
||||
context.CurrentUser == null &&
|
||||
_authenticationService.Enabled)
|
||||
if (!context.Request.IsApiRequest() && !_authenticationService.IsAuthenticated(context))
|
||||
{
|
||||
response = new Response { StatusCode = HttpStatusCode.Unauthorized };
|
||||
}
|
||||
|
@ -11,10 +11,12 @@ namespace NzbDrone.Api.Authentication
|
||||
{
|
||||
public class EnableStatelessAuthInNancy : IRegisterNancyPipeline
|
||||
{
|
||||
private readonly IAuthenticationService _authenticationService;
|
||||
private readonly IConfigFileProvider _configFileProvider;
|
||||
|
||||
public EnableStatelessAuthInNancy(IConfigFileProvider configFileProvider)
|
||||
public EnableStatelessAuthInNancy(IAuthenticationService authenticationService, IConfigFileProvider configFileProvider)
|
||||
{
|
||||
_authenticationService = authenticationService;
|
||||
_configFileProvider = configFileProvider;
|
||||
}
|
||||
|
||||
@ -27,20 +29,27 @@ public Response ValidateApiKey(NancyContext context)
|
||||
{
|
||||
Response response = null;
|
||||
|
||||
if (!RuntimeInfo.IsProduction && context.Request.IsLocalRequest())
|
||||
{
|
||||
return response;
|
||||
}
|
||||
// if (!RuntimeInfo.IsProduction && context.Request.IsLocalRequest())
|
||||
// {
|
||||
// return response;
|
||||
// }
|
||||
|
||||
var apiKey = context.Request.Headers.Authorization;
|
||||
|
||||
if (context.Request.IsApiRequest() &&
|
||||
(String.IsNullOrWhiteSpace(apiKey) || !apiKey.Equals(_configFileProvider.ApiKey)))
|
||||
if (context.Request.IsApiRequest() && !ValidApiKey(apiKey) && !_authenticationService.IsAuthenticated(context))
|
||||
{
|
||||
response = new Response { StatusCode = HttpStatusCode.Unauthorized };
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
private bool ValidApiKey(string apiKey)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(apiKey)) return false;
|
||||
if (!apiKey.Equals(_configFileProvider.ApiKey)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user