diff --git a/.gitignore b/.gitignore index f1b81038b8..673f15dfe3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +!* + ################# ## Eclipse ################# @@ -145,8 +147,9 @@ publish/ # NuGet Packages Directory ## TODO: If you have NuGet Package Restore enabled, uncomment the next line -packages/ +# packages/ dlls/ +dllssigned/ # Windows Azure Build Output csx diff --git a/MediaBrowser.Api/ConnectService.cs b/MediaBrowser.Api/ConnectService.cs index 5a2c04ab6b..3c3ad16b19 100644 --- a/MediaBrowser.Api/ConnectService.cs +++ b/MediaBrowser.Api/ConnectService.cs @@ -1,13 +1,18 @@ -using MediaBrowser.Controller.Connect; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Connect; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Connect; using ServiceStack; +using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; namespace MediaBrowser.Api { [Route("/Users/{Id}/Connect/Link", "POST", Summary = "Creates a Connect link for a user")] + [Authenticated(Roles = "Admin")] public class CreateConnectLink : IReturn { [ApiMember(Name = "Id", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] @@ -18,6 +23,7 @@ namespace MediaBrowser.Api } [Route("/Users/{Id}/Connect/Link", "DELETE", Summary = "Removes a Connect link for a user")] + [Authenticated(Roles = "Admin")] public class DeleteConnectLink : IReturnVoid { [ApiMember(Name = "Id", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "DELETE")] @@ -25,6 +31,7 @@ namespace MediaBrowser.Api } [Route("/Connect/Invite", "POST", Summary = "Creates a Connect link for a user")] + [Authenticated(Roles = "Admin")] public class CreateConnectInvite : IReturn { [ApiMember(Name = "ConnectUsername", Description = "Connect username", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] @@ -36,26 +43,37 @@ namespace MediaBrowser.Api [Route("/Connect/Pending", "GET", Summary = "Creates a Connect link for a user")] + [Authenticated(Roles = "Admin")] public class GetPendingGuests : IReturn> { } [Route("/Connect/Pending", "DELETE", Summary = "Deletes a Connect link for a user")] + [Authenticated(Roles = "Admin")] public class DeleteAuthorization : IReturnVoid { [ApiMember(Name = "Id", Description = "Authorization Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "DELETE")] public string Id { get; set; } } - [Authenticated(Roles = "Admin")] + [Route("/Connect/Exchange", "GET", Summary = "Gets the corresponding local user from a connect user id")] + [Authenticated] + public class GetLocalUser : IReturn + { + [ApiMember(Name = "ConnectUserId", Description = "ConnectUserId", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string ConnectUserId { get; set; } + } + public class ConnectService : BaseApiService { private readonly IConnectManager _connectManager; + private readonly IUserManager _userManager; - public ConnectService(IConnectManager connectManager) + public ConnectService(IConnectManager connectManager, IUserManager userManager) { _connectManager = connectManager; + _userManager = userManager; } public object Post(CreateConnectLink request) @@ -88,5 +106,22 @@ namespace MediaBrowser.Api Task.WaitAll(task); } + + public object Get(GetLocalUser request) + { + var user = _userManager.Users + .FirstOrDefault(i => string.Equals(i.ConnectUserId, request.ConnectUserId, StringComparison.OrdinalIgnoreCase)); + + if (user == null) + { + throw new ResourceNotFoundException(); + } + + return ToOptimizedResult(new ConnectAuthenticationExchangeResult + { + AccessToken = user.ConnectAccessKey, + LocalUserId = user.Id.ToString("N") + }); + } } } diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index df9569e285..38f85b9a30 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -11,7 +11,6 @@ MediaBrowser.Api 512 ..\ - true 10.0.0 2.0 v4.5 diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index 81df199241..fcf44c0b0a 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -11,7 +11,6 @@ MediaBrowser.Common.Implementations 512 ..\ - true 10.0.0 2.0 v4.5 @@ -120,7 +119,6 @@ - if '$(ConfigurationName)' == 'Release' ( xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 661073c89e..3c5b8b2492 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -11,7 +11,6 @@ MediaBrowser.Common 512 ..\ - true 10.0.0 2.0 v4.5 @@ -116,7 +115,6 @@ - if '$(ConfigurationName)' == 'Release' ( xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 7e2892c6ef..8b228d9ecd 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -11,7 +11,6 @@ MediaBrowser.Controller 512 ..\ - true 10.0.0 2.0 v4.5 @@ -369,7 +368,6 @@ xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i -