mirror of
https://github.com/zoriya/octokit.net.git
synced 2026-06-05 03:30:34 +00:00
Begin implementation of Enterprise ManagementConsole API, redux (#2010)
* Initial implementation of ManagementConsole - maintenance mode * Add environment var support for management console password for integration tests * Add reactive client and unit tests * Update some xmlDoc * I think this is a better way to setup the underlying baseUri on IConneciton, to achieve managemet console access rather than requiring a specific GitHubClient that cant call normal API's Instead, the management client methods can check the base Url and if it contains /api/v3/ they can set their relative endpoint Uri to include a leading "/" which will cause the /api/v3/ to be removed. * Update EnterpriseClient.cs Fix xml comments * Update IEnterpriseClient.cs Fix xml comments * Still trying to get the xmDoc perfect, thanks app veyor :) * XmlDoc'ing my way to success * Add specific test attribute for management console tests * check chronic string empty/null * Use helper's password field in test * Tidy up maintenance mode tests by using a context/destructor to manage the initial/end state of maintenance mode * make internal and tidy up URL concatenation * move GHE endpoint fixup inside ApiUrls methods * Rework request object to be the correct structure so SimpleJsonSerializer can be used to serialize it. Remove MaintenanceDate class and just pass in the Date/string for when Still need to use UrlFormEncoding rather than json in the POST body though... * Create abstract base class for FormUrlEncoded parameters (similar to existing RequetParameters) and inherit from it in UpdateMaintenanceRequest * Fix maintenance context logic - destructor should always turn maintenance OFF regardless of initial requested state * Fix xml comment * Fix Xml comment * Those pesky xml comments! * Fine, I give up! * Fix string.Format * fix bad rebase * fix failing convention tests * restore missing whitespace * writing some docs * some edits * edit
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
|
||||
namespace Octokit
|
||||
{
|
||||
[DebuggerDisplay("{DebuggerDisplay,nq}")]
|
||||
public class UpdateMaintenanceRequest : FormUrlEncodedParameters
|
||||
{
|
||||
/// <summary>
|
||||
/// Maintenance request with default details (results in Maintenance mode being turned off immediately)
|
||||
/// </summary>
|
||||
public UpdateMaintenanceRequest()
|
||||
{
|
||||
Maintenance = new UpdateMaintenanceRequestDetails();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Maintenance request with specific details
|
||||
/// </summary>
|
||||
public UpdateMaintenanceRequest(UpdateMaintenanceRequestDetails maintenance)
|
||||
{
|
||||
Ensure.ArgumentNotNull(maintenance, "maintenance");
|
||||
|
||||
Maintenance = maintenance;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Details for the maintenance request
|
||||
/// </summary>
|
||||
public UpdateMaintenanceRequestDetails Maintenance { get; protected set; }
|
||||
|
||||
internal string DebuggerDisplay
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Format(CultureInfo.InvariantCulture, "Maintenance: {0}", this.Maintenance.DebuggerDisplay);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[DebuggerDisplay("{DebuggerDisplay,nq}")]
|
||||
public class UpdateMaintenanceRequestDetails
|
||||
{
|
||||
/// <summary>
|
||||
/// Maintenance request details with default values (results in Maintenance mode being turned off immediately)
|
||||
/// </summary>
|
||||
public UpdateMaintenanceRequestDetails()
|
||||
{ }
|
||||
|
||||
/// <summary>
|
||||
/// Maintenance request details to enable/disable maintenance mode immediately
|
||||
/// </summary>
|
||||
/// <param name="enabled">true to enable, false to disable</param>
|
||||
public UpdateMaintenanceRequestDetails(bool enabled)
|
||||
{
|
||||
Enabled = enabled;
|
||||
When = "now";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Maintenance request details to enable/disable maintenance at a specified time (only applicable when enabling maintenance)
|
||||
/// </summary>
|
||||
/// <param name="enabled">true to enable, false to disable</param>
|
||||
/// <param name="when">A phrase specifying when maintenance mode will be enabled. Phrase uses humanised forms supported by the <a href="https://github.com/mojombo/chronic">mojombo/chronic library</a> used by the GitHub API</param>
|
||||
/// such as "this friday at 5pm" or "5 minutes before midday tomorrow"
|
||||
/// <remarks>If enabled is false, the when parameter is ignored and maintenance is turned off immediately</remarks>
|
||||
public UpdateMaintenanceRequestDetails(bool enabled, string when)
|
||||
{
|
||||
Ensure.ArgumentNotNullOrEmptyString(when, "when");
|
||||
|
||||
Enabled = enabled;
|
||||
When = when;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Maintenance request details to enable/disable maintenance at a specified time (only applicable when enabling maintenance)
|
||||
/// </summary>
|
||||
/// <param name="enabled">true to enable, false to disable</param>
|
||||
/// <param name="when">A <see cref="DateTimeOffset"/> specifying when maintenance mode will be enabled.</param>
|
||||
/// <remarks>If enabled is false, the when parameter is ignored and maintenance is turned off immediately</remarks>
|
||||
public UpdateMaintenanceRequestDetails(bool enabled, DateTimeOffset when)
|
||||
{
|
||||
Enabled = enabled;
|
||||
When = when.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ",
|
||||
CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Whether maintenance mode is enabled or disabled
|
||||
/// </summary>
|
||||
public bool Enabled { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// When maintenance mode will take effect (only applicable when enabling maintenance)
|
||||
/// </summary>
|
||||
public string When { get; protected set; }
|
||||
|
||||
internal string DebuggerDisplay
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Format(CultureInfo.InvariantCulture, "Enabled: {0} When: {1}", this.Enabled, this.When);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Octokit.Internal;
|
||||
|
||||
namespace Octokit
|
||||
{
|
||||
/// <summary>
|
||||
/// Base class for classes which represent UrlFormEncoded parameters to certain API endpoints.
|
||||
/// </summary>
|
||||
public abstract class FormUrlEncodedParameters
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts the derived object into a UrlFormEncoded parameter string containing named parameters and their json serialized values
|
||||
/// This format is required for particular API calls (eg the GitHub Enterprise Management Console API) that take a parameter formatted as json but not in the request body
|
||||
/// </summary>
|
||||
[SuppressMessage("Microsoft.Design", "CA1055:UriReturnValuesShouldNotBeStrings")]
|
||||
public string ToFormUrlEncodedParameterString()
|
||||
{
|
||||
var parameters = new List<string>();
|
||||
foreach (var prop in GetPropertyParametersForType(this.GetType()))
|
||||
{
|
||||
parameters.Add(string.Format(CultureInfo.InvariantCulture, "{0}={1}", prop.Key, prop.GetValue(this)));
|
||||
}
|
||||
|
||||
return string.Join("&", parameters);
|
||||
}
|
||||
|
||||
static List<JsonParameter> GetPropertyParametersForType(Type type)
|
||||
{
|
||||
return type.GetAllProperties()
|
||||
.Where(p => p.Name != "DebuggerDisplay")
|
||||
.Select(p => new JsonParameter(p))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
class JsonParameter
|
||||
{
|
||||
readonly PropertyInfo _property;
|
||||
public JsonParameter(PropertyInfo property)
|
||||
{
|
||||
_property = property;
|
||||
Key = GetParameterKeyFromProperty(property);
|
||||
}
|
||||
|
||||
public string Key { get; private set; }
|
||||
|
||||
public string GetValue(object instance)
|
||||
{
|
||||
var value = _property.GetValue(instance, null);
|
||||
return value != null ? new SimpleJsonSerializer().Serialize(value) : null;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase",
|
||||
Justification = "GitHub API depends on lower case strings")]
|
||||
static string GetParameterKeyFromProperty(PropertyInfo property)
|
||||
{
|
||||
var attribute = property.GetCustomAttributes(typeof(ParameterAttribute), false)
|
||||
.Cast<ParameterAttribute>()
|
||||
.FirstOrDefault(attr => attr.Key != null);
|
||||
|
||||
return attribute == null
|
||||
? property.Name.ToLowerInvariant()
|
||||
: attribute.Key;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user