mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-12 10:40:24 +01:00
completed auth database
This commit is contained in:
@@ -37,7 +37,7 @@ namespace MediaBrowser.Api
|
||||
|
||||
private readonly ISessionManager _sessionManager;
|
||||
|
||||
public readonly SemaphoreSlim TranscodingStartLock = new SemaphoreSlim(1,1);
|
||||
public readonly SemaphoreSlim TranscodingStartLock = new SemaphoreSlim(1, 1);
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ApiEntryPoint" /> class.
|
||||
@@ -102,7 +102,7 @@ namespace MediaBrowser.Api
|
||||
{
|
||||
var jobCount = _activeTranscodingJobs.Count;
|
||||
|
||||
Parallel.ForEach(_activeTranscodingJobs.ToList(), j => KillTranscodingJob(j, FileDeleteMode.All));
|
||||
Parallel.ForEach(_activeTranscodingJobs.ToList(), j => KillTranscodingJob(j, path => true));
|
||||
|
||||
// Try to allow for some time to kill the ffmpeg processes and delete the partial stream files
|
||||
if (jobCount > 0)
|
||||
@@ -295,17 +295,18 @@ namespace MediaBrowser.Api
|
||||
{
|
||||
var job = (TranscodingJob)state;
|
||||
|
||||
KillTranscodingJob(job, FileDeleteMode.All);
|
||||
KillTranscodingJob(job, path => true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Kills the single transcoding job.
|
||||
/// </summary>
|
||||
/// <param name="deviceId">The device id.</param>
|
||||
/// <param name="deleteMode">The delete mode.</param>
|
||||
/// <param name="delete">The delete.</param>
|
||||
/// <param name="acquireLock">if set to <c>true</c> [acquire lock].</param>
|
||||
/// <returns>Task.</returns>
|
||||
/// <exception cref="System.ArgumentNullException">sourcePath</exception>
|
||||
internal async Task KillTranscodingJobs(string deviceId, FileDeleteMode deleteMode, bool acquireLock)
|
||||
internal async Task KillTranscodingJobs(string deviceId, Func<string, bool> delete, bool acquireLock)
|
||||
{
|
||||
if (string.IsNullOrEmpty(deviceId))
|
||||
{
|
||||
@@ -330,12 +331,12 @@ namespace MediaBrowser.Api
|
||||
{
|
||||
await TranscodingStartLock.WaitAsync(CancellationToken.None).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
foreach (var job in jobs)
|
||||
{
|
||||
KillTranscodingJob(job, deleteMode);
|
||||
KillTranscodingJob(job, delete);
|
||||
}
|
||||
}
|
||||
finally
|
||||
@@ -352,10 +353,11 @@ namespace MediaBrowser.Api
|
||||
/// </summary>
|
||||
/// <param name="deviceId">The device identifier.</param>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <param name="deleteMode">The delete mode.</param>
|
||||
/// <param name="delete">The delete.</param>
|
||||
/// <param name="acquireLock">if set to <c>true</c> [acquire lock].</param>
|
||||
/// <returns>Task.</returns>
|
||||
/// <exception cref="System.ArgumentNullException">deviceId</exception>
|
||||
internal async Task KillTranscodingJobs(string deviceId, TranscodingJobType type, FileDeleteMode deleteMode, bool acquireLock)
|
||||
internal async Task KillTranscodingJobs(string deviceId, TranscodingJobType type, Func<string, bool> delete, bool acquireLock)
|
||||
{
|
||||
if (string.IsNullOrEmpty(deviceId))
|
||||
{
|
||||
@@ -385,7 +387,7 @@ namespace MediaBrowser.Api
|
||||
{
|
||||
foreach (var job in jobs)
|
||||
{
|
||||
KillTranscodingJob(job, deleteMode);
|
||||
KillTranscodingJob(job, delete);
|
||||
}
|
||||
}
|
||||
finally
|
||||
@@ -401,8 +403,8 @@ namespace MediaBrowser.Api
|
||||
/// Kills the transcoding job.
|
||||
/// </summary>
|
||||
/// <param name="job">The job.</param>
|
||||
/// <param name="deleteMode">The delete mode.</param>
|
||||
private void KillTranscodingJob(TranscodingJob job, FileDeleteMode deleteMode)
|
||||
/// <param name="delete">The delete.</param>
|
||||
private void KillTranscodingJob(TranscodingJob job, Func<string, bool> delete)
|
||||
{
|
||||
lock (_activeTranscodingJobs)
|
||||
{
|
||||
@@ -454,7 +456,7 @@ namespace MediaBrowser.Api
|
||||
}
|
||||
}
|
||||
|
||||
if (deleteMode == FileDeleteMode.All)
|
||||
if (delete(job.Path))
|
||||
{
|
||||
DeletePartialStreamFiles(job.Path, job.Type, 0, 1500);
|
||||
}
|
||||
@@ -593,10 +595,4 @@ namespace MediaBrowser.Api
|
||||
/// </summary>
|
||||
Hls
|
||||
}
|
||||
|
||||
public enum FileDeleteMode
|
||||
{
|
||||
None,
|
||||
All
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ namespace MediaBrowser.Api
|
||||
/// Class GetConfiguration
|
||||
/// </summary>
|
||||
[Route("/System/Configuration", "GET", Summary = "Gets application configuration")]
|
||||
[Authenticated]
|
||||
public class GetConfiguration : IReturn<ServerConfiguration>
|
||||
{
|
||||
|
||||
|
||||
@@ -22,7 +22,8 @@ namespace MediaBrowser.Api.Playback.Hls
|
||||
/// </summary>
|
||||
public abstract class BaseHlsService : BaseStreamingService
|
||||
{
|
||||
protected BaseHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder)
|
||||
protected BaseHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder)
|
||||
: base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -103,8 +104,8 @@ namespace MediaBrowser.Api.Playback.Hls
|
||||
}
|
||||
else
|
||||
{
|
||||
await ApiEntryPoint.Instance.KillTranscodingJobs(state.Request.DeviceId, TranscodingJobType.Hls, FileDeleteMode.All, false).ConfigureAwait(false);
|
||||
|
||||
await ApiEntryPoint.Instance.KillTranscodingJobs(state.Request.DeviceId, TranscodingJobType.Hls, p => true, false).ConfigureAwait(false);
|
||||
|
||||
// If the playlist doesn't already exist, startup ffmpeg
|
||||
try
|
||||
{
|
||||
@@ -252,7 +253,7 @@ namespace MediaBrowser.Api.Playback.Hls
|
||||
protected override string GetCommandLineArguments(string outputPath, StreamState state, bool isEncoding)
|
||||
{
|
||||
var hlsVideoRequest = state.VideoRequest as GetHlsVideoStream;
|
||||
|
||||
|
||||
var itsOffsetMs = hlsVideoRequest == null
|
||||
? 0
|
||||
: hlsVideoRequest.TimeStampOffsetMs;
|
||||
|
||||
@@ -127,8 +127,7 @@ namespace MediaBrowser.Api.Playback.Hls
|
||||
// If the playlist doesn't already exist, startup ffmpeg
|
||||
try
|
||||
{
|
||||
// TODO: Delete files from other jobs, but not this one
|
||||
await ApiEntryPoint.Instance.KillTranscodingJobs(state.Request.DeviceId, TranscodingJobType.Hls, FileDeleteMode.None, false).ConfigureAwait(false);
|
||||
await ApiEntryPoint.Instance.KillTranscodingJobs(state.Request.DeviceId, TranscodingJobType.Hls, p => !string.Equals(p, playlistPath, StringComparison.OrdinalIgnoreCase), false).ConfigureAwait(false);
|
||||
|
||||
if (currentTranscodingIndex.HasValue)
|
||||
{
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace MediaBrowser.Api.Playback.Hls
|
||||
|
||||
public void Delete(StopEncodingProcess request)
|
||||
{
|
||||
var task = ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, FileDeleteMode.All, true);
|
||||
var task = ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, path => true, true);
|
||||
|
||||
Task.WaitAll(task);
|
||||
}
|
||||
|
||||
@@ -213,6 +213,7 @@ namespace MediaBrowser.Api
|
||||
}
|
||||
|
||||
[Route("/Sessions/Capabilities", "POST", Summary = "Updates capabilities for a device")]
|
||||
[Authenticated]
|
||||
public class PostCapabilities : IReturnVoid
|
||||
{
|
||||
/// <summary>
|
||||
@@ -235,6 +236,11 @@ namespace MediaBrowser.Api
|
||||
public bool SupportsMediaControl { get; set; }
|
||||
}
|
||||
|
||||
[Route("/Sessions/Logout", "POST", Summary = "Reports that a session has ended")]
|
||||
public class ReportSessionEnded : IReturnVoid
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Class SessionsService
|
||||
/// </summary>
|
||||
@@ -246,16 +252,26 @@ namespace MediaBrowser.Api
|
||||
private readonly ISessionManager _sessionManager;
|
||||
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IAuthorizationContext _authContext;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SessionsService" /> class.
|
||||
/// </summary>
|
||||
/// <param name="sessionManager">The session manager.</param>
|
||||
/// <param name="userManager">The user manager.</param>
|
||||
public SessionsService(ISessionManager sessionManager, IUserManager userManager)
|
||||
public SessionsService(ISessionManager sessionManager, IUserManager userManager, IAuthorizationContext authContext)
|
||||
{
|
||||
_sessionManager = sessionManager;
|
||||
_userManager = userManager;
|
||||
_authContext = authContext;
|
||||
}
|
||||
|
||||
|
||||
public void Post(ReportSessionEnded request)
|
||||
{
|
||||
var auth = _authContext.GetAuthorizationInfo(Request);
|
||||
|
||||
_sessionManager.Logout(auth.Token);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -15,6 +15,7 @@ namespace MediaBrowser.Api
|
||||
/// Class GetSystemInfo
|
||||
/// </summary>
|
||||
[Route("/System/Info", "GET", Summary = "Gets information about the server")]
|
||||
[Authenticated]
|
||||
public class GetSystemInfo : IReturn<SystemInfo>
|
||||
{
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Net;
|
||||
using MediaBrowser.Controller.Session;
|
||||
using MediaBrowser.Model.Dto;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Model.Users;
|
||||
using ServiceStack;
|
||||
using ServiceStack.Text.Controller;
|
||||
@@ -19,6 +18,7 @@ namespace MediaBrowser.Api
|
||||
/// Class GetUsers
|
||||
/// </summary>
|
||||
[Route("/Users", "GET", Summary = "Gets a list of users")]
|
||||
[Authenticated]
|
||||
public class GetUsers : IReturn<List<UserDto>>
|
||||
{
|
||||
[ApiMember(Name = "IsHidden", Description = "Optional filter by IsHidden=true or false", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
|
||||
@@ -37,6 +37,7 @@ namespace MediaBrowser.Api
|
||||
/// Class GetUser
|
||||
/// </summary>
|
||||
[Route("/Users/{Id}", "GET", Summary = "Gets a user by Id")]
|
||||
[Authenticated]
|
||||
public class GetUser : IReturn<UserDto>
|
||||
{
|
||||
/// <summary>
|
||||
@@ -159,11 +160,6 @@ namespace MediaBrowser.Api
|
||||
/// </summary>
|
||||
public class UserService : BaseApiService, IHasAuthorization
|
||||
{
|
||||
/// <summary>
|
||||
/// The _XML serializer
|
||||
/// </summary>
|
||||
private readonly IXmlSerializer _xmlSerializer;
|
||||
|
||||
/// <summary>
|
||||
/// The _user manager
|
||||
/// </summary>
|
||||
@@ -176,19 +172,12 @@ namespace MediaBrowser.Api
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="UserService" /> class.
|
||||
/// </summary>
|
||||
/// <param name="xmlSerializer">The XML serializer.</param>
|
||||
/// <param name="userManager">The user manager.</param>
|
||||
/// <param name="dtoService">The dto service.</param>
|
||||
/// <param name="sessionMananger">The session mananger.</param>
|
||||
/// <exception cref="System.ArgumentNullException">xmlSerializer</exception>
|
||||
public UserService(IXmlSerializer xmlSerializer, IUserManager userManager, IDtoService dtoService, ISessionManager sessionMananger)
|
||||
: base()
|
||||
public UserService(IUserManager userManager, IDtoService dtoService, ISessionManager sessionMananger)
|
||||
{
|
||||
if (xmlSerializer == null)
|
||||
{
|
||||
throw new ArgumentNullException("xmlSerializer");
|
||||
}
|
||||
|
||||
_xmlSerializer = xmlSerializer;
|
||||
_userManager = userManager;
|
||||
_dtoService = dtoService;
|
||||
_sessionMananger = sessionMananger;
|
||||
@@ -196,6 +185,11 @@ namespace MediaBrowser.Api
|
||||
|
||||
public object Get(GetPublicUsers request)
|
||||
{
|
||||
if (!Request.IsLocal && !_sessionMananger.IsLocal(Request.RemoteIp))
|
||||
{
|
||||
return ToOptimizedResult(new List<UserDto>());
|
||||
}
|
||||
|
||||
return Get(new GetUsers
|
||||
{
|
||||
IsHidden = false,
|
||||
@@ -368,9 +362,15 @@ namespace MediaBrowser.Api
|
||||
{
|
||||
throw new ArgumentException("There must be at least one enabled user in the system.");
|
||||
}
|
||||
|
||||
var revokeTask = _sessionMananger.RevokeUserTokens(user.Id.ToString("N"));
|
||||
|
||||
Task.WaitAll(revokeTask);
|
||||
}
|
||||
|
||||
var task = user.Name.Equals(dtoUser.Name, StringComparison.Ordinal) ? _userManager.UpdateUser(user) : _userManager.RenameUser(user, dtoUser.Name);
|
||||
var task = user.Name.Equals(dtoUser.Name, StringComparison.Ordinal) ?
|
||||
_userManager.UpdateUser(user) :
|
||||
_userManager.RenameUser(user, dtoUser.Name);
|
||||
|
||||
Task.WaitAll(task);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user