|
|
|
@ -1,5 +1,4 @@
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using MediaBrowser.Controller.Configuration;
|
|
|
|
|
using MediaBrowser.Controller.Configuration;
|
|
|
|
|
using MediaBrowser.Controller.Library;
|
|
|
|
|
using MediaBrowser.Controller.Net;
|
|
|
|
|
using MediaBrowser.Controller.Session;
|
|
|
|
@ -42,24 +41,29 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string HtmlRedirect { get; set; }
|
|
|
|
|
|
|
|
|
|
public void Authenticate(IRequest req, IResponse res, object requestDto, bool allowLocal)
|
|
|
|
|
public void Authenticate(IRequest request,
|
|
|
|
|
IResponse response,
|
|
|
|
|
object requestDto,
|
|
|
|
|
bool allowLocal,
|
|
|
|
|
string[] roles)
|
|
|
|
|
{
|
|
|
|
|
if (HostContext.HasValidAuthSecret(req))
|
|
|
|
|
if (HostContext.HasValidAuthSecret(request))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
//ExecuteBasic(req, res, requestDto); //first check if session is authenticated
|
|
|
|
|
//if (res.IsClosed) return; //AuthenticateAttribute already closed the request (ie auth failed)
|
|
|
|
|
|
|
|
|
|
ValidateUser(req, allowLocal);
|
|
|
|
|
ValidateUser(request, allowLocal, roles);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ValidateUser(IRequest req, bool allowLocal)
|
|
|
|
|
private void ValidateUser(IRequest req, bool allowLocal,
|
|
|
|
|
string[] roles)
|
|
|
|
|
{
|
|
|
|
|
//This code is executed before the service
|
|
|
|
|
var auth = AuthorizationContext.GetAuthorizationInfo(req);
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(auth.Token)
|
|
|
|
|
|| _config.Configuration.SecureApps1.Contains(auth.Client ?? string.Empty, StringComparer.OrdinalIgnoreCase))
|
|
|
|
|
|| _config.Configuration.SecureApps2.Contains(auth.Client ?? string.Empty, StringComparer.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
if (!allowLocal || !req.IsLocal)
|
|
|
|
|
{
|
|
|
|
@ -73,8 +77,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
|
|
|
|
|
|
|
|
|
|
if (user == null & !string.IsNullOrWhiteSpace(auth.UserId))
|
|
|
|
|
{
|
|
|
|
|
// TODO: Re-enable
|
|
|
|
|
//throw new ArgumentException("User with Id " + auth.UserId + " not found");
|
|
|
|
|
throw new ArgumentException("User with Id " + auth.UserId + " not found");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (user != null && user.Configuration.IsDisabled)
|
|
|
|
@ -82,6 +85,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
|
|
|
|
|
throw new AuthenticationException("User account has been disabled.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (roles.Contains("admin", StringComparer.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
if (user == null || !user.Configuration.IsAdministrator)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentException("Administrative access is required for this request.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(auth.DeviceId) &&
|
|
|
|
|
!string.IsNullOrWhiteSpace(auth.Client) &&
|
|
|
|
|
!string.IsNullOrWhiteSpace(auth.Device))
|
|
|
|
|