jellyfin/Jellyfin.Api/Auth/FirstTimeSetupPolicy/FirstTimeSetupHandler.cs

77 lines
2.5 KiB
C#
Raw Normal View History

2020-08-06 10:17:45 -04:00
using System.Threading.Tasks;
2023-02-08 17:55:26 -05:00
using Jellyfin.Api.Constants;
using Jellyfin.Api.Extensions;
using Jellyfin.Extensions;
2020-08-06 10:17:45 -04:00
using MediaBrowser.Common.Configuration;
2023-02-12 17:01:30 -05:00
using MediaBrowser.Common.Extensions;
2020-08-06 10:17:45 -04:00
using MediaBrowser.Controller.Library;
using Microsoft.AspNetCore.Authorization;
2023-02-08 17:55:26 -05:00
namespace Jellyfin.Api.Auth.FirstTimeSetupPolicy
2020-08-06 10:17:45 -04:00
{
/// <summary>
2020-08-06 19:59:48 -04:00
/// Authorization handler for requiring first time setup or default privileges.
2020-08-06 10:17:45 -04:00
/// </summary>
2023-02-08 17:55:26 -05:00
public class FirstTimeSetupHandler : AuthorizationHandler<FirstTimeSetupRequirement>
2020-08-06 10:17:45 -04:00
{
private readonly IConfigurationManager _configurationManager;
2023-02-08 17:55:26 -05:00
private readonly IUserManager _userManager;
2020-08-06 10:17:45 -04:00
/// <summary>
2023-02-08 17:55:26 -05:00
/// Initializes a new instance of the <see cref="FirstTimeSetupHandler" /> class.
2020-08-06 10:17:45 -04:00
/// </summary>
/// <param name="configurationManager">Instance of the <see cref="IConfigurationManager"/> interface.</param>
/// <param name="userManager">Instance of the <see cref="IUserManager"/> interface.</param>
2023-02-08 17:55:26 -05:00
public FirstTimeSetupHandler(
2020-08-06 10:17:45 -04:00
IConfigurationManager configurationManager,
2023-02-08 17:55:26 -05:00
IUserManager userManager)
2020-08-06 10:17:45 -04:00
{
_configurationManager = configurationManager;
2023-02-08 17:55:26 -05:00
_userManager = userManager;
2020-08-06 10:17:45 -04:00
}
/// <inheritdoc />
2023-02-08 17:55:26 -05:00
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, FirstTimeSetupRequirement requirement)
2020-08-06 10:17:45 -04:00
{
if (!_configurationManager.CommonConfiguration.IsStartupWizardCompleted)
{
2021-02-14 09:11:46 -05:00
context.Succeed(requirement);
2020-08-06 10:17:45 -04:00
return Task.CompletedTask;
}
var contextUser = context.User;
if (requirement.RequireAdmin && !contextUser.IsInRole(UserRoles.Administrator))
{
context.Fail();
return Task.CompletedTask;
}
var userId = contextUser.GetUserId();
if (userId.IsEmpty())
2023-02-08 17:55:26 -05:00
{
context.Fail();
return Task.CompletedTask;
}
if (!requirement.ValidateParentalSchedule)
2020-08-06 10:17:45 -04:00
{
2021-02-14 09:11:46 -05:00
context.Succeed(requirement);
2023-02-08 17:55:26 -05:00
return Task.CompletedTask;
2020-08-06 10:17:45 -04:00
}
2023-02-08 17:55:26 -05:00
var user = _userManager.GetUserById(userId);
2023-02-12 17:01:30 -05:00
if (user is null)
{
throw new ResourceNotFoundException();
}
2023-02-08 17:55:26 -05:00
if (user.IsParentalScheduleAllowed())
2020-08-06 10:17:45 -04:00
{
2023-02-08 17:55:26 -05:00
context.Succeed(requirement);
2020-08-06 10:17:45 -04:00
}
return Task.CompletedTask;
}
}
}