From 1c6f70ad63fb92aa5b2352763fb2563bcaf3f0cf Mon Sep 17 00:00:00 2001 From: Ryan Gribble Date: Fri, 19 Aug 2016 08:48:05 +1000 Subject: [PATCH] Implement observable methods --- ...rvableEnterpriseManagementConsoleClient.cs | 24 +++++++++ ...rvableEnterpriseManagementConsoleClient.cs | 49 +++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseManagementConsoleClient.cs b/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseManagementConsoleClient.cs index 816f850e..7daf5779 100644 --- a/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseManagementConsoleClient.cs +++ b/Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseManagementConsoleClient.cs @@ -29,5 +29,29 @@ namespace Octokit.Reactive /// /// The . IObservable EditMaintenanceMode(UpdateMaintenanceRequest maintenance, string managementConsolePassword); + + /// + /// Gets the authorized SSH keys for the GitHub Enterprise instance + /// + /// + /// https://developer.github.com/v3/enterprise/management_console/#retrieve-authorized-ssh-keys + /// + IObservable GetAllAuthorizedKeys(string managementConsolePassword); + + /// + /// Adds an authorized SSH key to the GitHub Enterprise instance + /// + /// + /// https://developer.github.com/v3/enterprise/management_console/#add-a-new-authorized-ssh-key + /// + IObservable AddAuthorizedKey(AuthorizedKeyRequest authorizedKey, string managementConsolePassword); + + /// + /// Removes an authorized SSH key from the GitHub Enterprise instance + /// + /// + /// https://developer.github.com/v3/enterprise/management_console/#remove-an-authorized-ssh-key + /// + IObservable DeleteAuthorizedKey(AuthorizedKeyRequest authorizedKey, string managementConsolePassword); } } diff --git a/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseManagementConsoleClient.cs b/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseManagementConsoleClient.cs index b887da76..40fa4bb9 100644 --- a/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseManagementConsoleClient.cs +++ b/Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseManagementConsoleClient.cs @@ -1,5 +1,7 @@ using System; +using System.Reactive.Linq; using System.Reactive.Threading.Tasks; +using Octokit.Reactive.Internal; namespace Octokit.Reactive { @@ -12,12 +14,14 @@ namespace Octokit.Reactive public class ObservableEnterpriseManagementConsoleClient : IObservableEnterpriseManagementConsoleClient { readonly IEnterpriseManagementConsoleClient _client; + readonly IConnection _connection; public ObservableEnterpriseManagementConsoleClient(IGitHubClient client) { Ensure.ArgumentNotNull(client, "client"); _client = client.Enterprise.ManagementConsole; + _connection = client.Connection; } /// @@ -48,5 +52,50 @@ namespace Octokit.Reactive return _client.EditMaintenanceMode(maintenance, managementConsolePassword).ToObservable(); } + + /// + /// Gets the authorized SSH keys for the GitHub Enterprise instance + /// + /// + /// https://developer.github.com/v3/enterprise/management_console/#retrieve-authorized-ssh-keys + /// + public IObservable GetAllAuthorizedKeys(string managementConsolePassword) + { + Ensure.ArgumentNotNullOrEmptyString(managementConsolePassword, "managementConsolePassword"); + + return _connection.GetAndFlattenAllPages(ApiUrls.EnterpriseManagementConsoleAuthorizedKeys(managementConsolePassword, _connection.BaseAddress)); + } + + /// + /// Adds an authorized SSH key to the GitHub Enterprise instance + /// + /// + /// https://developer.github.com/v3/enterprise/management_console/#add-a-new-authorized-ssh-key + /// + public IObservable AddAuthorizedKey(AuthorizedKeyRequest authorizedKey, string managementConsolePassword) + { + Ensure.ArgumentNotNull(authorizedKey, "authorizedKey"); + Ensure.ArgumentNotNullOrEmptyString(managementConsolePassword, "managementConsolePassword"); + + return _client.AddAuthorizedKey(authorizedKey, managementConsolePassword) + .ToObservable() + .SelectMany(x => x); // HACK: POST is not compatible with GetAndFlattenPages + } + + /// + /// Removes an authorized SSH key from the GitHub Enterprise instance + /// + /// + /// https://developer.github.com/v3/enterprise/management_console/#remove-an-authorized-ssh-key + /// + public IObservable DeleteAuthorizedKey(AuthorizedKeyRequest authorizedKey, string managementConsolePassword) + { + Ensure.ArgumentNotNull(authorizedKey, "authorizedKey"); + Ensure.ArgumentNotNullOrEmptyString(managementConsolePassword, "managementConsolePassword"); + + return _client.DeleteAuthorizedKey(authorizedKey, managementConsolePassword) + .ToObservable() + .SelectMany(x => x); // HACK: DELETE is not compatible with GetAndFlattenPages + } } }