diff options
5 files changed, 66 insertions, 1 deletions
diff --git a/MediaBrowser.Api/ConnectService.cs b/MediaBrowser.Api/ConnectService.cs index f84b74203..bdd2eeaad 100644 --- a/MediaBrowser.Api/ConnectService.cs +++ b/MediaBrowser.Api/ConnectService.cs @@ -1,8 +1,10 @@ -using MediaBrowser.Common.Extensions; +using System; +using MediaBrowser.Common.Extensions; using MediaBrowser.Controller.Connect; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Connect; +using MediaBrowser.Model.Dto; using ServiceStack; using System.Collections.Generic; using System.Linq; @@ -87,6 +89,14 @@ namespace MediaBrowser.Api public string Id { get; set; } } + [Route("/Connect/Supporters", "POST")] + [Authenticated(Roles = "Admin")] + public class AddConnectSupporter : IReturnVoid + { + [ApiMember(Name = "Id", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string Id { get; set; } + } + public class ConnectService : BaseApiService { private readonly IConnectManager _connectManager; @@ -101,6 +111,14 @@ namespace MediaBrowser.Api public async Task<object> Get(GetConnectSupporterSummary request) { var result = await _connectManager.GetConnectSupporterSummary().ConfigureAwait(false); + var existingConnectUserIds = result.Users.Select(i => i.Id).ToList(); + + result.EligibleUsers = _userManager.Users + .Where(i => !string.IsNullOrWhiteSpace(i.ConnectUserId)) + .Where(i => !existingConnectUserIds.Contains(i.ConnectUserId, StringComparer.OrdinalIgnoreCase)) + .OrderBy(i => i.Name) + .Select(i => _userManager.GetUserDto(i)) + .ToList(); return ToOptimizedResult(result); } @@ -112,6 +130,13 @@ namespace MediaBrowser.Api Task.WaitAll(task); } + public void Post(AddConnectSupporter request) + { + var task = _connectManager.AddConnectSupporter(request.Id); + + Task.WaitAll(task); + } + public object Post(CreateConnectLink request) { return _connectManager.LinkUser(request.Id, request.ConnectUsername); diff --git a/MediaBrowser.Controller/Connect/ConnectSupporterSummary.cs b/MediaBrowser.Controller/Connect/ConnectSupporterSummary.cs index 47ff90e70..20eef0521 100644 --- a/MediaBrowser.Controller/Connect/ConnectSupporterSummary.cs +++ b/MediaBrowser.Controller/Connect/ConnectSupporterSummary.cs @@ -1,5 +1,6 @@ using MediaBrowser.Model.Connect; using System.Collections.Generic; +using MediaBrowser.Model.Dto; namespace MediaBrowser.Controller.Connect { @@ -7,10 +8,12 @@ namespace MediaBrowser.Controller.Connect { public int MaxUsers { get; set; } public List<ConnectUser> Users { get; set; } + public List<UserDto> EligibleUsers { get; set; } public ConnectSupporterSummary() { Users = new List<ConnectUser>(); + EligibleUsers = new List<UserDto>(); } } } diff --git a/MediaBrowser.Controller/Connect/IConnectManager.cs b/MediaBrowser.Controller/Connect/IConnectManager.cs index e745f3df3..7eecf6ebf 100644 --- a/MediaBrowser.Controller/Connect/IConnectManager.cs +++ b/MediaBrowser.Controller/Connect/IConnectManager.cs @@ -82,5 +82,12 @@ namespace MediaBrowser.Controller.Connect /// <param name="id">The identifier.</param> /// <returns>Task.</returns> Task RemoveConnectSupporter(string id); + + /// <summary> + /// Adds the connect supporter. + /// </summary> + /// <param name="id">The identifier.</param> + /// <returns>Task.</returns> + Task AddConnectSupporter(string id); } } diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs index ac8ce7638..be0b32548 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs @@ -1085,6 +1085,34 @@ namespace MediaBrowser.Server.Implementations.Connect } } + public async Task AddConnectSupporter(string id) + { + if (!_securityManager.IsMBSupporter) + { + throw new InvalidOperationException(); + } + + var url = GetConnectUrl("keyAssociation"); + + url += "?serverId=" + ConnectServerId; + url += "&supporterKey=" + _securityManager.SupporterKey; + url += "&userId=" + id; + + var options = new HttpRequestOptions + { + Url = url, + CancellationToken = CancellationToken.None + }; + + SetServerAccessToken(options); + SetApplicationHeader(options); + + // No need to examine the response + using (var stream = (await _httpClient.SendAsync(options, "POST").ConfigureAwait(false)).Content) + { + } + } + public async Task RemoveConnectSupporter(string id) { if (!_securityManager.IsMBSupporter) diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index 2f4470c96..18447ade1 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -50,6 +50,8 @@ "ButtonOrganize": "Organize", "LinkedToMediaBrowserConnect": "Linked to Media Browser Connect", "HeaderSupporterBenefits": "Supporter Benefits", + "HeaderAddUser": "Add User", + "LabelAddConnectSupporterHelp": "To add a user who isn't listed, you'll need to first link their accounts to Media Browser Connect from their user profile page.", "LabelPinCode": "Pin code:", "ButtonOk": "Ok", "ButtonCancel": "Cancel", |
