diff --git a/MediaBrowser.Controller/Connect/IConnectManager.cs b/MediaBrowser.Controller/Connect/IConnectManager.cs index 7eecf6ebff..1f76522214 100644 --- a/MediaBrowser.Controller/Connect/IConnectManager.cs +++ b/MediaBrowser.Controller/Connect/IConnectManager.cs @@ -41,6 +41,13 @@ namespace MediaBrowser.Controller.Connect /// Task<List<ConnectAuthorization>>. Task> GetPendingGuests(); + /// + /// Gets the user from exchange token. + /// + /// The token. + /// User. + User GetUserFromExchangeToken(string token); + /// /// Cancels the authorization. /// diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs index a7f8717a74..b1b6cd8992 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs +++ b/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)) diff --git a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthorizationContext.cs b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthorizationContext.cs index cd4d23f5cf..9461143a8e 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthorizationContext.cs +++ b/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; } diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index df7b3f061e..911a556349 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -525,7 +525,7 @@ namespace MediaBrowser.Server.Startup.Common RegisterSingleInstance(activityLogRepo); RegisterSingleInstance(new ActivityManager(LogManager.GetLogger("ActivityManager"), activityLogRepo, UserManager)); - var authContext = new AuthorizationContext(AuthenticationRepository); + var authContext = new AuthorizationContext(AuthenticationRepository, ConnectManager); RegisterSingleInstance(authContext); RegisterSingleInstance(new SessionContext(UserManager, authContext, SessionManager)); RegisterSingleInstance(new AuthService(UserManager, authContext, ServerConfigurationManager, ConnectManager, SessionManager, DeviceManager)); @@ -756,7 +756,7 @@ namespace MediaBrowser.Server.Startup.Common ChannelManager.AddParts(GetExports(), GetExports()); MediaSourceManager.AddParts(GetExports()); - + NotificationManager.AddParts(GetExports(), GetExports()); SyncManager.AddParts(GetExports()); }