using System; using System.Collections.Generic; using System.Globalization; using System.Net; using System.Security.Claims; using Jellyfin.Api.Constants; using Jellyfin.Data.Entities; using Jellyfin.Data.Enums; using Jellyfin.Server.Implementations.Users; using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Configuration; using Microsoft.AspNetCore.Http; using Moq; using AccessSchedule = Jellyfin.Data.Entities.AccessSchedule; namespace Jellyfin.Api.Tests { public static class TestHelpers { public static ClaimsPrincipal SetupUser( Mock userManagerMock, Mock httpContextAccessorMock, string role, IEnumerable? accessSchedules = null) { var user = new User( "jellyfin", typeof(DefaultAuthenticationProvider).FullName!, typeof(DefaultPasswordResetProvider).FullName!); user.AddDefaultPermissions(); user.AddDefaultPreferences(); // Set administrator flag. user.SetPermission(PermissionKind.IsAdministrator, role.Equals(UserRoles.Administrator, StringComparison.OrdinalIgnoreCase)); // Add access schedules if set. if (accessSchedules is not null) { foreach (var accessSchedule in accessSchedules) { user.AccessSchedules.Add(accessSchedule); } } var claims = new[] { new Claim(ClaimTypes.Role, role), new Claim(ClaimTypes.Name, "jellyfin"), new Claim(InternalClaimTypes.UserId, Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture)), new Claim(InternalClaimTypes.DeviceId, Guid.Empty.ToString("N", CultureInfo.InvariantCulture)), new Claim(InternalClaimTypes.Device, "test"), new Claim(InternalClaimTypes.Client, "test"), new Claim(InternalClaimTypes.Version, "test"), new Claim(InternalClaimTypes.Token, "test"), }; var identity = new ClaimsIdentity(claims); userManagerMock .Setup(u => u.GetUserById(It.IsAny())) .Returns(user); httpContextAccessorMock .Setup(h => h.HttpContext!.Connection.RemoteIpAddress) .Returns(new IPAddress(0)); return new ClaimsPrincipal(identity); } public static void SetupConfigurationManager(in Mock configurationManagerMock, bool startupWizardCompleted) { var commonConfiguration = new BaseApplicationConfiguration { IsStartupWizardCompleted = startupWizardCompleted }; configurationManagerMock .Setup(c => c.CommonConfiguration) .Returns(commonConfiguration); } } }