diff --git a/MediaBrowser.Api/ConnectService.cs b/MediaBrowser.Api/ConnectService.cs
index 09cbafca6..f84b74203 100644
--- a/MediaBrowser.Api/ConnectService.cs
+++ b/MediaBrowser.Api/ConnectService.cs
@@ -79,6 +79,14 @@ namespace MediaBrowser.Api
{
}
+ [Route("/Connect/Supporters", "DELETE")]
+ [Authenticated(Roles = "Admin")]
+ public class RemoveConnectSupporter : IReturnVoid
+ {
+ [ApiMember(Name = "Id", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "DELETE")]
+ public string Id { get; set; }
+ }
+
public class ConnectService : BaseApiService
{
private readonly IConnectManager _connectManager;
@@ -97,6 +105,13 @@ namespace MediaBrowser.Api
return ToOptimizedResult(result);
}
+ public void Delete(RemoveConnectSupporter request)
+ {
+ var task = _connectManager.RemoveConnectSupporter(request.Id);
+
+ Task.WaitAll(task);
+ }
+
public object Post(CreateConnectLink request)
{
return _connectManager.LinkUser(request.Id, request.ConnectUsername);
diff --git a/MediaBrowser.Controller/Connect/IConnectManager.cs b/MediaBrowser.Controller/Connect/IConnectManager.cs
index 4003d1bf2..e745f3df3 100644
--- a/MediaBrowser.Controller/Connect/IConnectManager.cs
+++ b/MediaBrowser.Controller/Connect/IConnectManager.cs
@@ -75,5 +75,12 @@ namespace MediaBrowser.Controller.Connect
///
/// Task<ConnectSupporterSummary>.
Task GetConnectSupporterSummary();
+
+ ///
+ /// Removes the connect supporter.
+ ///
+ /// The identifier.
+ /// Task.
+ Task RemoveConnectSupporter(string id);
}
}
diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs
index c9b690086..ac8ce7638 100644
--- a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs
+++ b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs
@@ -1068,7 +1068,7 @@ namespace MediaBrowser.Server.Implementations.Connect
url += "?serverId=" + ConnectServerId;
url += "&supporterKey=" + _securityManager.SupporterKey;
-
+
var options = new HttpRequestOptions
{
Url = url,
@@ -1085,6 +1085,34 @@ namespace MediaBrowser.Server.Implementations.Connect
}
}
+ public async Task RemoveConnectSupporter(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, "DELETE").ConfigureAwait(false)).Content)
+ {
+ }
+ }
+
public async Task Authenticate(string username, string passwordMd5)
{
if (string.IsNullOrWhiteSpace(username))
diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
index 9e0260f3c..d995e485f 100644
--- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
+++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
@@ -38,6 +38,8 @@
"ErrorLaunchingChromecast": "There was an error launching chromecast. Please ensure your device is connected to your wireless network.",
"MessageErrorLoadingSupporterInfo": "There was an error loading supporter information. Please try again later.",
"MessageLinkYourSupporterKey": "Link your supporter key with up to {0} Media Browser Connect members to enjoy free access to the following apps:",
+ "HeaderConfirmRemoveUser": "Remove User",
+ "MessageConfirmRemoveConnectSupporter": "Are you sure you wish to remove the additional supporter benefits from this user?",
"ValueTimeLimitSingleHour": "Time limit: 1 hour",
"ValueTimeLimitMultiHour": "Time limit: {0} hours",
"PluginCategoryGeneral": "General",