From 257fe4429af2911c274a2e3d93e2deafd610d60a Mon Sep 17 00:00:00 2001 From: Ryan Gribble Date: Tue, 5 Jul 2016 19:38:23 +1000 Subject: [PATCH] key needs to be specified as a request object with an "authorized_key" parameter. Also the management console API wants it as a URL parameter rather than as a json body payload Fix UriExtension ApplyParameter() to be able to apply parameters to non absolute URLs --- .../EnterpriseManagementConsoleClient.cs | 26 +++++++++++-------- .../IEnterpriseManagementConsoleClient.cs | 6 ++--- Octokit/Helpers/UriExtensions.cs | 6 +++++ .../Enterprise/AuthorizedKeyRequest.cs | 26 +++++++++++++++++++ ...rizedManagementKey.cs => AuthorizedKey.cs} | 6 ++--- 5 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 Octokit/Models/Request/Enterprise/AuthorizedKeyRequest.cs rename Octokit/Models/Response/Enterprise/{AuthorizedManagementKey.cs => AuthorizedKey.cs} (69%) diff --git a/Octokit/Clients/Enterprise/EnterpriseManagementConsoleClient.cs b/Octokit/Clients/Enterprise/EnterpriseManagementConsoleClient.cs index 02441918..d3352a54 100644 --- a/Octokit/Clients/Enterprise/EnterpriseManagementConsoleClient.cs +++ b/Octokit/Clients/Enterprise/EnterpriseManagementConsoleClient.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Net; using System.Threading.Tasks; namespace Octokit @@ -45,6 +46,7 @@ namespace Octokit var endpoint = ApiUrls.EnterpriseManagementConsoleMaintenance(managementConsolePassword, ApiConnection.Connection.BaseAddress); + endpoint = CorrectEndpointForManagementConsole(endpoint); return ApiConnection.Get(endpoint); } @@ -65,36 +67,38 @@ namespace Octokit return ApiConnection.Post(endpoint, maintenance.ToFormUrlEncodedParameterString()); } - public Task> GetAllAuthorizedKeys(string managementConsolePassword) + public Task> GetAllAuthorizedKeys(string managementConsolePassword) { Ensure.ArgumentNotNullOrEmptyString(managementConsolePassword, "managementConsolePassword"); var endpoint = ApiUrls.EnterpriseManagementConsoleAuthorizedKeys(managementConsolePassword); - endpoint = CorrectEndpointForManagementConsole(endpoint); - return ApiConnection.Get>(endpoint); + endpoint = CorrectEndpointForManagementConsole(endpoint); + return ApiConnection.Get>(endpoint); } - public Task> AddAuthorizedKey(string key, string managementConsolePassword) + public Task> AddAuthorizedKey(AuthorizedKeyRequest authorizedKey, string managementConsolePassword) { - Ensure.ArgumentNotNullOrEmptyString(key, "publicKeyContent"); + Ensure.ArgumentNotNull(authorizedKey, "authorizedKey"); Ensure.ArgumentNotNullOrEmptyString(managementConsolePassword, "managementConsolePassword"); var endpoint = ApiUrls.EnterpriseManagementConsoleAuthorizedKeys(managementConsolePassword); - endpoint = CorrectEndpointForManagementConsole(endpoint); + endpoint = endpoint.ApplyParameters(authorizedKey.ToParametersDictionary()); - return ApiConnection.Post>(endpoint, key); + endpoint = CorrectEndpointForManagementConsole(endpoint); + return ApiConnection.Post>(endpoint); } - public Task DeleteAuthorizedKey(string key, string managementConsolePassword) + public Task DeleteAuthorizedKey(AuthorizedKeyRequest authorizedKey, string managementConsolePassword) { - Ensure.ArgumentNotNullOrEmptyString(key, "publicKeyContent"); + Ensure.ArgumentNotNull(authorizedKey, "authorizedKey"); Ensure.ArgumentNotNullOrEmptyString(managementConsolePassword, "managementConsolePassword"); var endpoint = ApiUrls.EnterpriseManagementConsoleAuthorizedKeys(managementConsolePassword); - endpoint = CorrectEndpointForManagementConsole(endpoint); + endpoint = endpoint.ApplyParameters(authorizedKey.ToParametersDictionary()); - return ApiConnection.Delete(endpoint, key); + endpoint = CorrectEndpointForManagementConsole(endpoint); + return ApiConnection.Delete(endpoint); } } } diff --git a/Octokit/Clients/Enterprise/IEnterpriseManagementConsoleClient.cs b/Octokit/Clients/Enterprise/IEnterpriseManagementConsoleClient.cs index d25273e0..0d5f9537 100644 --- a/Octokit/Clients/Enterprise/IEnterpriseManagementConsoleClient.cs +++ b/Octokit/Clients/Enterprise/IEnterpriseManagementConsoleClient.cs @@ -29,10 +29,10 @@ namespace Octokit /// The . Task EditMaintenanceMode(UpdateMaintenanceRequest maintenance, string managementConsolePassword); - Task> GetAllAuthorizedKeys(string managementConsolePassword); + Task> GetAllAuthorizedKeys(string managementConsolePassword); - Task> AddAuthorizedKey(string key, string managementConsolePassword); + Task> AddAuthorizedKey(AuthorizedKeyRequest authorizedKey, string managementConsolePassword); - Task DeleteAuthorizedKey(string key, string managementConsolePassword); + Task DeleteAuthorizedKey(AuthorizedKeyRequest authorizedKey, string managementConsolePassword); } } diff --git a/Octokit/Helpers/UriExtensions.cs b/Octokit/Helpers/UriExtensions.cs index eb64239f..e12b8b34 100644 --- a/Octokit/Helpers/UriExtensions.cs +++ b/Octokit/Helpers/UriExtensions.cs @@ -56,15 +56,21 @@ namespace Octokit : uri.OriginalString.Substring(0, hasQueryString); string queryString; + string uriWithoutQuery; if (uri.IsAbsoluteUri) { queryString = uri.Query; + uriWithoutQuery = uri.AbsoluteUri; } else { queryString = hasQueryString == -1 ? "" : uri.OriginalString.Substring(hasQueryString); + + uriWithoutQuery = hasQueryString == -1 + ? uri.ToString() + : uri.OriginalString.Substring(0, hasQueryString); } var values = queryString.Replace("?", "") diff --git a/Octokit/Models/Request/Enterprise/AuthorizedKeyRequest.cs b/Octokit/Models/Request/Enterprise/AuthorizedKeyRequest.cs new file mode 100644 index 00000000..8800175e --- /dev/null +++ b/Octokit/Models/Request/Enterprise/AuthorizedKeyRequest.cs @@ -0,0 +1,26 @@ +using System.Diagnostics; +using System.Globalization; +using Octokit.Internal; + +namespace Octokit +{ + [DebuggerDisplay("{DebuggerDisplay,nq}")] + public class AuthorizedKeyRequest : RequestParameters + { + public AuthorizedKeyRequest(string authorizedKey) + { + AuthorizedKey = authorizedKey; + } + + [Parameter(Key = "authorized_key")] + public string AuthorizedKey { get; private set; } + + internal string DebuggerDisplay + { + get + { + return string.Format(CultureInfo.InvariantCulture, "AuthorizedKey: {0}", AuthorizedKey); + } + } + } +} diff --git a/Octokit/Models/Response/Enterprise/AuthorizedManagementKey.cs b/Octokit/Models/Response/Enterprise/AuthorizedKey.cs similarity index 69% rename from Octokit/Models/Response/Enterprise/AuthorizedManagementKey.cs rename to Octokit/Models/Response/Enterprise/AuthorizedKey.cs index e1908fd2..ac982715 100644 --- a/Octokit/Models/Response/Enterprise/AuthorizedManagementKey.cs +++ b/Octokit/Models/Response/Enterprise/AuthorizedKey.cs @@ -2,12 +2,12 @@ namespace Octokit { - public class AuthorizedManagementKey + public class AuthorizedKey { - public AuthorizedManagementKey() + public AuthorizedKey() { } - public AuthorizedManagementKey(string key, string prettyPrint, string comment) + public AuthorizedKey(string key, string prettyPrint, string comment) { Key = key; PrettyPrint = prettyPrint;