Explorar o código

Use new authorization and session functions

David %!s(int64=5) %!d(string=hai) anos
pai
achega
a5bd7f2d6e

+ 14 - 18
Jellyfin.Api/Controllers/SessionController.cs

@@ -6,6 +6,7 @@ using System.ComponentModel.DataAnnotations;
 using System.Linq;
 using System.Linq;
 using System.Threading;
 using System.Threading;
 using Jellyfin.Api.Helpers;
 using Jellyfin.Api.Helpers;
+using Jellyfin.Data.Enums;
 using MediaBrowser.Controller.Devices;
 using MediaBrowser.Controller.Devices;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Net;
@@ -27,7 +28,6 @@ namespace Jellyfin.Api.Controllers
         private readonly IUserManager _userManager;
         private readonly IUserManager _userManager;
         private readonly IAuthorizationContext _authContext;
         private readonly IAuthorizationContext _authContext;
         private readonly IDeviceManager _deviceManager;
         private readonly IDeviceManager _deviceManager;
-        private readonly ISessionContext _sessionContext;
 
 
         /// <summary>
         /// <summary>
         /// Initializes a new instance of the <see cref="SessionController"/> class.
         /// Initializes a new instance of the <see cref="SessionController"/> class.
@@ -36,19 +36,16 @@ namespace Jellyfin.Api.Controllers
         /// <param name="userManager">Instance of <see cref="IUserManager"/> interface.</param>
         /// <param name="userManager">Instance of <see cref="IUserManager"/> interface.</param>
         /// <param name="authContext">Instance of <see cref="IAuthorizationContext"/> interface.</param>
         /// <param name="authContext">Instance of <see cref="IAuthorizationContext"/> interface.</param>
         /// <param name="deviceManager">Instance of <see cref="IDeviceManager"/> interface.</param>
         /// <param name="deviceManager">Instance of <see cref="IDeviceManager"/> interface.</param>
-        /// <param name="sessionContext">Instance of <see cref="ISessionContext"/> interface.</param>
         public SessionController(
         public SessionController(
             ISessionManager sessionManager,
             ISessionManager sessionManager,
             IUserManager userManager,
             IUserManager userManager,
             IAuthorizationContext authContext,
             IAuthorizationContext authContext,
-            IDeviceManager deviceManager,
-            ISessionContext sessionContext)
+            IDeviceManager deviceManager)
         {
         {
             _sessionManager = sessionManager;
             _sessionManager = sessionManager;
             _userManager = userManager;
             _userManager = userManager;
             _authContext = authContext;
             _authContext = authContext;
             _deviceManager = deviceManager;
             _deviceManager = deviceManager;
-            _sessionContext = sessionContext;
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -80,12 +77,12 @@ namespace Jellyfin.Api.Controllers
 
 
                 var user = _userManager.GetUserById(controllableByUserId);
                 var user = _userManager.GetUserById(controllableByUserId);
 
 
-                if (!user.Policy.EnableRemoteControlOfOtherUsers)
+                if (!user.HasPermission(PermissionKind.EnableRemoteControlOfOtherUsers))
                 {
                 {
                     result = result.Where(i => i.UserId.Equals(Guid.Empty) || i.ContainsUser(controllableByUserId));
                     result = result.Where(i => i.UserId.Equals(Guid.Empty) || i.ContainsUser(controllableByUserId));
                 }
                 }
 
 
-                if (!user.Policy.EnableSharedDeviceControl)
+                if (!user.HasPermission(PermissionKind.EnableSharedDeviceControl))
                 {
                 {
                     result = result.Where(i => !i.UserId.Equals(Guid.Empty));
                     result = result.Where(i => !i.UserId.Equals(Guid.Empty));
                 }
                 }
@@ -138,7 +135,7 @@ namespace Jellyfin.Api.Controllers
             };
             };
 
 
             _sessionManager.SendBrowseCommand(
             _sessionManager.SendBrowseCommand(
-                RequestHelpers.GetSession(_sessionContext).Id,
+                RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id,
                 id,
                 id,
                 command,
                 command,
                 CancellationToken.None);
                 CancellationToken.None);
@@ -175,7 +172,7 @@ namespace Jellyfin.Api.Controllers
             playRequest.PlayCommand = playCommand;
             playRequest.PlayCommand = playCommand;
 
 
             _sessionManager.SendPlayCommand(
             _sessionManager.SendPlayCommand(
-                RequestHelpers.GetSession(_sessionContext).Id,
+                RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id,
                 id,
                 id,
                 playRequest,
                 playRequest,
                 CancellationToken.None);
                 CancellationToken.None);
@@ -197,7 +194,7 @@ namespace Jellyfin.Api.Controllers
             [FromBody] PlaystateRequest playstateRequest)
             [FromBody] PlaystateRequest playstateRequest)
         {
         {
             _sessionManager.SendPlaystateCommand(
             _sessionManager.SendPlaystateCommand(
-                RequestHelpers.GetSession(_sessionContext).Id,
+                RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id,
                 id,
                 id,
                 playstateRequest,
                 playstateRequest,
                 CancellationToken.None);
                 CancellationToken.None);
@@ -224,7 +221,7 @@ namespace Jellyfin.Api.Controllers
                 name = commandType.ToString();
                 name = commandType.ToString();
             }
             }
 
 
-            var currentSession = RequestHelpers.GetSession(_sessionContext);
+            var currentSession = RequestHelpers.GetSession(_sessionManager, _authContext, Request);
             var generalCommand = new GeneralCommand
             var generalCommand = new GeneralCommand
             {
             {
                 Name = name,
                 Name = name,
@@ -249,7 +246,7 @@ namespace Jellyfin.Api.Controllers
             [FromRoute] string id,
             [FromRoute] string id,
             [FromRoute] string command)
             [FromRoute] string command)
         {
         {
-            var currentSession = RequestHelpers.GetSession(_sessionContext);
+            var currentSession = RequestHelpers.GetSession(_sessionManager, _authContext, Request);
 
 
             var generalCommand = new GeneralCommand
             var generalCommand = new GeneralCommand
             {
             {
@@ -275,7 +272,7 @@ namespace Jellyfin.Api.Controllers
             [FromRoute] string id,
             [FromRoute] string id,
             [FromBody, Required] GeneralCommand command)
             [FromBody, Required] GeneralCommand command)
         {
         {
-            var currentSession = RequestHelpers.GetSession(_sessionContext);
+            var currentSession = RequestHelpers.GetSession(_sessionManager, _authContext, Request);
 
 
             if (command == null)
             if (command == null)
             {
             {
@@ -317,7 +314,7 @@ namespace Jellyfin.Api.Controllers
                 Text = text
                 Text = text
             };
             };
 
 
-            _sessionManager.SendMessageCommand(RequestHelpers.GetSession(_sessionContext).Id, id, command, CancellationToken.None);
+            _sessionManager.SendMessageCommand(RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id, id, command, CancellationToken.None);
 
 
             return NoContent();
             return NoContent();
         }
         }
@@ -379,7 +376,7 @@ namespace Jellyfin.Api.Controllers
         {
         {
             if (string.IsNullOrWhiteSpace(id))
             if (string.IsNullOrWhiteSpace(id))
             {
             {
-                id = RequestHelpers.GetSession(_sessionContext).Id;
+                id = RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id;
             }
             }
 
 
             _sessionManager.ReportCapabilities(id, new ClientCapabilities
             _sessionManager.ReportCapabilities(id, new ClientCapabilities
@@ -408,7 +405,7 @@ namespace Jellyfin.Api.Controllers
         {
         {
             if (string.IsNullOrWhiteSpace(id))
             if (string.IsNullOrWhiteSpace(id))
             {
             {
-                id = RequestHelpers.GetSession(_sessionContext).Id;
+                id = RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id;
             }
             }
 
 
             _sessionManager.ReportCapabilities(id, capabilities);
             _sessionManager.ReportCapabilities(id, capabilities);
@@ -429,7 +426,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] string sessionId,
             [FromQuery] string sessionId,
             [FromQuery] string itemId)
             [FromQuery] string itemId)
         {
         {
-            string session = RequestHelpers.GetSession(_sessionContext).Id;
+            string session = RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id;
 
 
             _sessionManager.ReportNowViewingItem(session, itemId);
             _sessionManager.ReportNowViewingItem(session, itemId);
             return NoContent();
             return NoContent();
@@ -444,7 +441,6 @@ namespace Jellyfin.Api.Controllers
         [ProducesResponseType(StatusCodes.Status204NoContent)]
         [ProducesResponseType(StatusCodes.Status204NoContent)]
         public ActionResult ReportSessionEnded()
         public ActionResult ReportSessionEnded()
         {
         {
-            // TODO: how do we get AuthorizationInfo without an IRequest?
             AuthorizationInfo auth = _authContext.GetAuthorizationInfo(Request);
             AuthorizationInfo auth = _authContext.GetAuthorizationInfo(Request);
 
 
             _sessionManager.Logout(auth.Token);
             _sessionManager.Logout(auth.Token);

+ 11 - 3
Jellyfin.Api/Helpers/RequestHelpers.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Session;
 using MediaBrowser.Controller.Session;
+using Microsoft.AspNetCore.Http;
 
 
 namespace Jellyfin.Api.Helpers
 namespace Jellyfin.Api.Helpers
 {
 {
@@ -28,10 +29,17 @@ namespace Jellyfin.Api.Helpers
                 : value.Split(separator);
                 : value.Split(separator);
         }
         }
 
 
-        internal static SessionInfo GetSession(ISessionContext sessionContext)
+        internal static SessionInfo GetSession(ISessionManager sessionManager, IAuthorizationContext authContext, HttpRequest request)
         {
         {
-            // TODO: how do we get a SessionInfo without IRequest?
-            SessionInfo session = sessionContext.GetSession("Request");
+            var authorization = authContext.GetAuthorizationInfo(request);
+            var user = authorization.User;
+            var session = sessionManager.LogSessionActivity(
+                authorization.Client,
+                authorization.Version,
+                authorization.DeviceId,
+                authorization.Device,
+                request.HttpContext.Connection.RemoteIpAddress.ToString(),
+                user);
 
 
             if (session == null)
             if (session == null)
             {
             {