Skip to content

Commit c3edb08

Browse files
Implement target instance IP list query
1 parent d4e94dc commit c3edb08

File tree

6 files changed

+130
-5
lines changed

6 files changed

+130
-5
lines changed

src/Certify.Core/Management/CertifyManager/CertifyManager.ManagementHub.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,10 @@ public async Task<InstanceCommandResult> PerformHubCommandWithResult(InstanceCom
636636

637637
val = await PerformDeploymentTask(null, managedCertificateIdArg.Value, taskIdArg.Value, isPreviewOnly: false, skipDeferredTasks: false, forceTaskExecution: false);
638638
}
639+
else if (arg.CommandType == ManagementHubCommands.GetTargetIPAddresses)
640+
{
641+
val = await GetTargetIPAddresses();
642+
}
639643
else if (arg.CommandType == ManagementHubCommands.GetTargetServiceTypes)
640644
{
641645
val = await GetTargetServiceTypes();

src/Certify.Core/Management/CertifyManager/CertifyManager.ServerType.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,23 @@ namespace Certify.Management
99
{
1010
public partial class CertifyManager
1111
{
12+
private async Task<ICollection<IPAddressOption>> GetTargetIPAddresses()
13+
{
14+
try
15+
{
16+
var ipAddressOptions = Certify.Utils.Networking.GetIPAddresses();
17+
18+
ipAddressOptions.Insert(0, new IPAddressOption { Description = "* (All Unassigned)", IPAddress = "*", IsIPv6 = false }); //add wildcard option
19+
20+
return ipAddressOptions;
21+
}
22+
catch (Exception)
23+
{
24+
//return empty list
25+
return [];
26+
}
27+
}
28+
1229
private async Task<ICollection<string>> GetTargetServiceTypes()
1330
{
1431
var list = new List<string>();

src/Certify.Models/Hub/ManagementHubMessages.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public class ManagementHubCommands
4747
public const string GetTargetServiceTypes = "GetTargetServiceTypes";
4848
public const string GetTargetServiceItems = "GetTargetServiceItems";
4949
public const string GetTargetServiceItemIdentifiers = "GetTargetServiceItemIdentifiers";
50+
public const string GetTargetIPAddresses = "GetTargetIPAddresses";
5051

5152
public const string PerformImport = "PerformImport";
5253
public const string PerformExport = "PerformExport";

src/Certify.Server/Certify.Server.Hub.Api.Client/Certify.Server.Hub.Api.Client.cs

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6087,6 +6087,95 @@ public virtual async System.Threading.Tasks.Task<ActionResult> UpdateServiceCore
60876087
}
60886088
}
60896089

6090+
/// <summary>
6091+
/// Get list of IP addresses available on the target for service binding (IIS, nginx etc) [Generated]
6092+
/// </summary>
6093+
/// <returns>OK</returns>
6094+
/// <exception cref="ApiException">A server side error occurred.</exception>
6095+
public virtual System.Threading.Tasks.Task<System.Collections.Generic.ICollection<IPAddressOption>> GetTargetIPAddressesAsync(string instanceId)
6096+
{
6097+
return GetTargetIPAddressesAsync(instanceId, System.Threading.CancellationToken.None);
6098+
}
6099+
6100+
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
6101+
/// <summary>
6102+
/// Get list of IP addresses available on the target for service binding (IIS, nginx etc) [Generated]
6103+
/// </summary>
6104+
/// <returns>OK</returns>
6105+
/// <exception cref="ApiException">A server side error occurred.</exception>
6106+
public virtual async System.Threading.Tasks.Task<System.Collections.Generic.ICollection<IPAddressOption>> GetTargetIPAddressesAsync(string instanceId, System.Threading.CancellationToken cancellationToken)
6107+
{
6108+
if (instanceId == null)
6109+
throw new System.ArgumentNullException("instanceId");
6110+
6111+
var client_ = _httpClient;
6112+
var disposeClient_ = false;
6113+
try
6114+
{
6115+
using (var request_ = new System.Net.Http.HttpRequestMessage())
6116+
{
6117+
request_.Method = new System.Net.Http.HttpMethod("GET");
6118+
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("text/plain"));
6119+
6120+
var urlBuilder_ = new System.Text.StringBuilder();
6121+
if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl);
6122+
// Operation Path: "internal/v1/target/{instanceId}/ipaddresses"
6123+
urlBuilder_.Append("internal/v1/target/");
6124+
urlBuilder_.Append(System.Uri.EscapeDataString(ConvertToString(instanceId, System.Globalization.CultureInfo.InvariantCulture)));
6125+
urlBuilder_.Append("/ipaddresses");
6126+
6127+
PrepareRequest(client_, request_, urlBuilder_);
6128+
6129+
var url_ = urlBuilder_.ToString();
6130+
request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
6131+
6132+
PrepareRequest(client_, request_, url_);
6133+
6134+
var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
6135+
var disposeResponse_ = true;
6136+
try
6137+
{
6138+
var headers_ = new System.Collections.Generic.Dictionary<string, System.Collections.Generic.IEnumerable<string>>();
6139+
foreach (var item_ in response_.Headers)
6140+
headers_[item_.Key] = item_.Value;
6141+
if (response_.Content != null && response_.Content.Headers != null)
6142+
{
6143+
foreach (var item_ in response_.Content.Headers)
6144+
headers_[item_.Key] = item_.Value;
6145+
}
6146+
6147+
ProcessResponse(client_, response_);
6148+
6149+
var status_ = (int)response_.StatusCode;
6150+
if (status_ == 200)
6151+
{
6152+
var objectResponse_ = await ReadObjectResponseAsync<System.Collections.Generic.ICollection<IPAddressOption>>(response_, headers_, cancellationToken).ConfigureAwait(false);
6153+
if (objectResponse_.Object == null)
6154+
{
6155+
throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null);
6156+
}
6157+
return objectResponse_.Object;
6158+
}
6159+
else
6160+
{
6161+
var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
6162+
throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null);
6163+
}
6164+
}
6165+
finally
6166+
{
6167+
if (disposeResponse_)
6168+
response_.Dispose();
6169+
}
6170+
}
6171+
}
6172+
finally
6173+
{
6174+
if (disposeClient_)
6175+
client_.Dispose();
6176+
}
6177+
}
6178+
60906179
/// <summary>
60916180
/// Get Service Types present on instance (IIS, nginx etc) [Generated]
60926181
/// </summary>

src/Certify.Shared/Utils/Networking.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using System;
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
2+
using System.Linq;
33
using System.Net.NetworkInformation;
44
using Certify.Models;
55

@@ -70,13 +70,12 @@ public static List<IPAddressOption> GetIPAddresses()
7070
}
7171
}
7272
}
73-
catch (Exception)
73+
catch
7474
{
75-
;
7675
; // could not retrieve networking information
7776
}
7877

79-
return list;
78+
return list.OrderBy(ip => ip.IPAddress).ToList();
8079
}
8180
}
8281
}

src/Certify.SourceGenerators/ApiMethods.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,21 @@ public static List<GeneratedAPI> GetApiDefinitions()
448448
{ "instanceId", "string" }
449449
}
450450
},
451+
new()
452+
{
453+
OperationName = "GetTargetIPAddresses",
454+
OperationMethod = HttpGet,
455+
Comment = "Get list of IP addresses available on the target for service binding (IIS, nginx etc)",
456+
UseManagementAPI = true,
457+
ManagementHubCommandType = Models.Hub.ManagementHubCommands.GetTargetIPAddresses,
458+
PublicAPIController = "Target",
459+
PublicAPIRoute = "{instanceId}/ipaddresses",
460+
ReturnType = "ICollection<IPAddressOption>",
461+
Params = new Dictionary<string, string>
462+
{
463+
{ "instanceId", "string" }
464+
}
465+
},
451466
new()
452467
{
453468
OperationName = "GetTargetServiceTypes",

0 commit comments

Comments
 (0)