Pārlūkot izejas kodu

Merge pull request #1066 from MediaBrowser/master

create user info from exchange token
Luke 10 gadi atpakaļ
vecāks
revīzija
7bafdfadb9

+ 7 - 0
MediaBrowser.Controller/Connect/IConnectManager.cs

@@ -41,6 +41,13 @@ namespace MediaBrowser.Controller.Connect
         /// <returns>Task&lt;List&lt;ConnectAuthorization&gt;&gt;.</returns>
         Task<List<ConnectAuthorization>> GetPendingGuests();
 
+        /// <summary>
+        /// Gets the user from exchange token.
+        /// </summary>
+        /// <param name="token">The token.</param>
+        /// <returns>User.</returns>
+        User GetUserFromExchangeToken(string token);
+
         /// <summary>
         /// Cancels the authorization.
         /// </summary>

+ 11 - 1
MediaBrowser.Server.Implementations/Connect/ConnectManager.cs

@@ -1125,7 +1125,7 @@ namespace MediaBrowser.Server.Implementations.Connect
             url += "?serverId=" + ConnectServerId;
             url += "&supporterKey=" + _securityManager.SupporterKey;
             url += "&userId=" + id;
-     
+
             var options = new HttpRequestOptions
             {
                 Url = url,
@@ -1244,6 +1244,16 @@ namespace MediaBrowser.Server.Implementations.Connect
                 .FirstOrDefault(i => string.Equals(i.ConnectUserId, connectUserId, StringComparison.OrdinalIgnoreCase));
         }
 
+        public User GetUserFromExchangeToken(string token)
+        {
+            if (string.IsNullOrWhiteSpace(token))
+            {
+                throw new ArgumentNullException("token");
+            }
+
+            return _userManager.Users.FirstOrDefault(u => string.Equals(token, u.ConnectAccessKey, StringComparison.OrdinalIgnoreCase));
+        }
+
         public bool IsAuthorizationTokenValid(string token)
         {
             if (string.IsNullOrWhiteSpace(token))

+ 13 - 2
MediaBrowser.Server.Implementations/HttpServer/Security/AuthorizationContext.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Net;
+using MediaBrowser.Controller.Connect;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Security;
 using ServiceStack.Web;
 using System;
@@ -10,10 +11,12 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
     public class AuthorizationContext : IAuthorizationContext
     {
         private readonly IAuthenticationRepository _authRepo;
+        private readonly IConnectManager _connectManager;
 
-        public AuthorizationContext(IAuthenticationRepository authRepo)
+        public AuthorizationContext(IAuthenticationRepository authRepo, IConnectManager connectManager)
         {
             _authRepo = authRepo;
+            _connectManager = connectManager;
         }
 
         public AuthorizationInfo GetAuthorizationInfo(object requestContext)
@@ -144,6 +147,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
                         info.DeviceId = tokenInfo.DeviceId;
                     }
                 }
+                else
+                {
+                    var user = _connectManager.GetUserFromExchangeToken(token);
+                    if (user != null)
+                    {
+                        info.UserId = user.Id.ToString("N");
+                    }
+                }
                 httpReq.Items["OriginalAuthenticationInfo"] = tokenInfo;
             }
 

+ 2 - 2
MediaBrowser.Server.Startup.Common/ApplicationHost.cs

@@ -525,7 +525,7 @@ namespace MediaBrowser.Server.Startup.Common
             RegisterSingleInstance(activityLogRepo);
             RegisterSingleInstance<IActivityManager>(new ActivityManager(LogManager.GetLogger("ActivityManager"), activityLogRepo, UserManager));
 
-            var authContext = new AuthorizationContext(AuthenticationRepository);
+            var authContext = new AuthorizationContext(AuthenticationRepository, ConnectManager);
             RegisterSingleInstance<IAuthorizationContext>(authContext);
             RegisterSingleInstance<ISessionContext>(new SessionContext(UserManager, authContext, SessionManager));
             RegisterSingleInstance<IAuthService>(new AuthService(UserManager, authContext, ServerConfigurationManager, ConnectManager, SessionManager, DeviceManager));
@@ -756,7 +756,7 @@ namespace MediaBrowser.Server.Startup.Common
             ChannelManager.AddParts(GetExports<IChannel>(), GetExports<IChannelFactory>());
 
             MediaSourceManager.AddParts(GetExports<IMediaSourceProvider>());
-            
+
             NotificationManager.AddParts(GetExports<INotificationService>(), GetExports<INotificationTypeFactory>());
             SyncManager.AddParts(GetExports<ISyncProvider>());
         }