Skip to content

Commit 03f0596

Browse files
committed
add support for the get ssl certificates API (#3537)
* add support for the get ssl certificates API * removed superfluous folder reference in Nest.csproj * internal setters on GetCertificatesResponse (cherry picked from commit a839bd8)
1 parent fefa22d commit 03f0596

File tree

13 files changed

+248
-2
lines changed

13 files changed

+248
-2
lines changed

src/CodeGeneration/ApiGenerator/ApiGenerator.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ public class ApiGenerator
3838
"xpack.ml.get_calendar_job.json",
3939
"xpack.ml.delete_forecast.json",
4040
"xpack.ml.find_file_structure.json",
41-
"xpack.ssl.certificates.json",
4241
"delete_by_query_rethrottle.json",
4342
"update_by_query_rethrottle.json",
4443

src/CodeGeneration/ApiGenerator/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ private static void Main(string[] args)
4040
RestSpecDownloader.Download(downloadBranch);
4141

4242
ApiGenerator.Generate(downloadBranch, "Core", "Graph", "License", "Security", "Watcher", "Info", "MachineLearning", "Migration", "Sql",
43-
"Rollup");
43+
"Rollup", "Ssl");
4444
}
4545
}
4646
}

src/Elasticsearch.Net/Domain/RequestParameters/RequestParameters.Generated.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2650,6 +2650,11 @@ public class TranslateSqlRequestParameters : RequestParameters<TranslateSqlReque
26502650
{
26512651
public override HttpMethod DefaultHttpMethod => HttpMethod.POST;
26522652
}
2653+
///<summary>Request options for XpackSslCertificates<pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</pre></summary>
2654+
public partial class GetCertificatesRequestParameters : RequestParameters<GetCertificatesRequestParameters>
2655+
{
2656+
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;
2657+
}
26532658
///<summary>Request options for XpackWatcherAckWatch<pre>http://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-ack-watch.html</pre></summary>
26542659
public class AcknowledgeWatchRequestParameters : RequestParameters<AcknowledgeWatchRequestParameters>
26552660
{

src/Elasticsearch.Net/ElasticLowLevelClient.Generated.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4058,6 +4058,14 @@ public TResponse XpackSqlTranslateGet<TResponse>(TranslateSqlRequestParameters r
40584058
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
40594059
public Task<TResponse> XpackSqlTranslateGetAsync<TResponse>(TranslateSqlRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
40604060
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(GET, Url($"_xpack/sql/translate"), ctx, null, _params(requestParameters));
4061+
///<summary>GET on /_xpack/ssl/certificates <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</para></summary>
4062+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4063+
public TResponse XpackSslCertificates<TResponse>(GetCertificatesRequestParameters requestParameters = null)
4064+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequest<TResponse>(GET, Url($"_xpack/ssl/certificates"), null, _params(requestParameters));
4065+
///<summary>GET on /_xpack/ssl/certificates <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</para></summary>
4066+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4067+
public Task<TResponse> XpackSslCertificatesAsync<TResponse>(GetCertificatesRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
4068+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(GET, Url($"_xpack/ssl/certificates"), ctx, null, _params(requestParameters));
40614069
///<summary>PUT on /_xpack/watcher/watch/{watch_id}/_ack <para>http://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-ack-watch.html</para></summary>
40624070
///<param name="watch_id">Watch ID</param>
40634071
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>

src/Elasticsearch.Net/IElasticLowLevelClient.Generated.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3286,6 +3286,12 @@ public partial interface IElasticLowLevelClient
32863286
///<summary>GET on /_xpack/sql/translate <para>Translate SQL into Elasticsearch queries</para></summary>
32873287
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
32883288
Task<TResponse> XpackSqlTranslateGetAsync<TResponse>(TranslateSqlRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
3289+
///<summary>GET on /_xpack/ssl/certificates <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</para></summary>
3290+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3291+
TResponse XpackSslCertificates<TResponse>(GetCertificatesRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
3292+
///<summary>GET on /_xpack/ssl/certificates <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</para></summary>
3293+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3294+
Task<TResponse> XpackSslCertificatesAsync<TResponse>(GetCertificatesRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
32893295
///<summary>PUT on /_xpack/watcher/watch/{watch_id}/_ack <para>http://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-ack-watch.html</para></summary>
32903296
///<param name="watch_id">Watch ID</param>
32913297
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using System;
2+
using System.Collections;
3+
using System.IO;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
using Elasticsearch.Net;
7+
8+
namespace Nest
9+
{
10+
public partial interface IElasticClient
11+
{
12+
/// <summary>
13+
/// The certificates API enables you to retrieve information about the X.509 certificates
14+
/// that are used to encrypt communications in your Elasticsearch cluster.
15+
/// </summary>
16+
IGetCertificatesResponse GetCertificates(Func<GetCertificatesDescriptor, IGetCertificatesRequest> selector = null);
17+
18+
/// <inheritdoc cref="GetCertificates(System.Func{Nest.GetCertificatesDescriptor,Nest.IGetCertificatesRequest})" />
19+
IGetCertificatesResponse GetCertificates(IGetCertificatesRequest request);
20+
21+
/// <inheritdoc cref="GetCertificates(System.Func{Nest.GetCertificatesDescriptor,Nest.IGetCertificatesRequest})" />
22+
Task<IGetCertificatesResponse> GetCertificatesAsync(Func<GetCertificatesDescriptor, IGetCertificatesRequest> selector = null,
23+
CancellationToken cancellationToken = default
24+
);
25+
26+
/// <inheritdoc cref="GetCertificates(System.Func{Nest.GetCertificatesDescriptor,Nest.IGetCertificatesRequest})" />
27+
Task<IGetCertificatesResponse> GetCertificatesAsync(IGetCertificatesRequest request,
28+
CancellationToken cancellationToken = default
29+
);
30+
}
31+
32+
public partial class ElasticClient
33+
{
34+
/// <inheritdoc cref="GetCertificates(System.Func{Nest.GetCertificatesDescriptor,Nest.IGetCertificatesRequest})" />
35+
public IGetCertificatesResponse GetCertificates(Func<GetCertificatesDescriptor, IGetCertificatesRequest> selector = null) =>
36+
GetCertificates(selector.InvokeOrDefault(new GetCertificatesDescriptor()));
37+
38+
/// <inheritdoc cref="GetCertificates(System.Func{Nest.GetCertificatesDescriptor,Nest.IGetCertificatesRequest})" />
39+
public IGetCertificatesResponse GetCertificates(IGetCertificatesRequest request) =>
40+
Dispatcher.Dispatch<IGetCertificatesRequest, GetCertificatesRequestParameters, GetCertificatesResponse>(
41+
request,
42+
ToCertificatesResponse,
43+
(p, d) => LowLevelDispatch.XpackSslCertificatesDispatch<GetCertificatesResponse>(p)
44+
);
45+
46+
/// <inheritdoc cref="GetCertificates(System.Func{Nest.GetCertificatesDescriptor,Nest.IGetCertificatesRequest})" />
47+
public Task<IGetCertificatesResponse> GetCertificatesAsync(Func<GetCertificatesDescriptor, IGetCertificatesRequest> selector = null,
48+
CancellationToken cancellationToken = default
49+
) =>
50+
GetCertificatesAsync(selector.InvokeOrDefault(new GetCertificatesDescriptor()), cancellationToken);
51+
52+
/// <inheritdoc cref="GetCertificates(System.Func{Nest.GetCertificatesDescriptor,Nest.IGetCertificatesRequest})" />
53+
public Task<IGetCertificatesResponse> GetCertificatesAsync(IGetCertificatesRequest request,
54+
CancellationToken cancellationToken = default
55+
) =>
56+
Dispatcher
57+
.DispatchAsync<IGetCertificatesRequest, GetCertificatesRequestParameters, GetCertificatesResponse,
58+
IGetCertificatesResponse>(
59+
request,
60+
cancellationToken,
61+
ToCertificatesResponse,
62+
(p, d, c) => LowLevelDispatch.XpackSslCertificatesDispatchAsync<GetCertificatesResponse>(p, c)
63+
);
64+
65+
private GetCertificatesResponse ToCertificatesResponse(IApiCallDetails apiCallDetails, Stream stream)
66+
{
67+
var result = RequestResponseSerializer.Deserialize<ClusterCertificateInformation[]>(stream);
68+
return new GetCertificatesResponse { Certificates = result };
69+
}
70+
}
71+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Nest
4+
{
5+
[MapsApi("xpack.ssl.certificates.json")]
6+
public partial interface IGetCertificatesRequest { }
7+
8+
public partial class GetCertificatesRequest { }
9+
10+
public partial class GetCertificatesDescriptor { }
11+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Newtonsoft.Json;
4+
5+
namespace Nest
6+
{
7+
public interface IGetCertificatesResponse : IResponse
8+
{
9+
[JsonIgnore]
10+
IReadOnlyCollection<ClusterCertificateInformation> Certificates { get; }
11+
12+
}
13+
14+
public class GetCertificatesResponse : ResponseBase, IGetCertificatesResponse
15+
{
16+
public IReadOnlyCollection<ClusterCertificateInformation> Certificates { get; internal set; } =
17+
EmptyReadOnly<ClusterCertificateInformation>.Collection;
18+
}
19+
20+
public class ClusterCertificateInformation
21+
{
22+
23+
[JsonProperty("path")]
24+
public string Path { get; internal set; }
25+
26+
[JsonProperty("alias")]
27+
public string Alias { get; internal set; }
28+
29+
[JsonProperty("format")]
30+
public string Format { get; internal set; }
31+
32+
[JsonProperty("subject_dn")]
33+
public string SubjectDomainName { get; internal set; }
34+
35+
[JsonProperty("serial_number")]
36+
public string SerialNumber { get; internal set; }
37+
38+
[JsonProperty("has_private_key")]
39+
public bool HasPrivateKey { get; internal set; }
40+
41+
[JsonProperty("expiry")]
42+
public DateTimeOffset Expiry { get; internal set; }
43+
}
44+
}

src/Nest/_Generated/_Descriptors.generated.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4792,6 +4792,14 @@ public partial class TranslateSqlDescriptor : RequestDescriptorBase<TranslateSq
47924792

47934793
// Request parameters
47944794

4795+
}
4796+
///<summary>descriptor for XpackSslCertificates <pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</pre></summary>
4797+
public partial class GetCertificatesDescriptor : RequestDescriptorBase<GetCertificatesDescriptor,GetCertificatesRequestParameters, IGetCertificatesRequest>, IGetCertificatesRequest
4798+
{
4799+
// values part of the url path
4800+
4801+
// Request parameters
4802+
47954803
}
47964804
///<summary>descriptor for XpackWatcherAckWatch <pre>http://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-ack-watch.html</pre></summary>
47974805
public partial class AcknowledgeWatchDescriptor : RequestDescriptorBase<AcknowledgeWatchDescriptor,AcknowledgeWatchRequestParameters, IAcknowledgeWatchRequest>, IAcknowledgeWatchRequest

src/Nest/_Generated/_LowLevelDispatch.generated.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4542,6 +4542,26 @@ internal partial class LowLevelDispatch
45424542
throw InvalidDispatch("XpackSqlTranslate", p, new [] { POST, GET }, "/_xpack/sql/translate");
45434543
}
45444544

4545+
internal TResponse XpackSslCertificatesDispatch<TResponse>(IRequest<GetCertificatesRequestParameters> p) where TResponse : class, IElasticsearchResponse, new()
4546+
{
4547+
switch(p.HttpMethod)
4548+
{
4549+
case GET:
4550+
return _lowLevel.XpackSslCertificates<TResponse>(p.RequestParameters);
4551+
}
4552+
throw InvalidDispatch("XpackSslCertificates", p, new [] { GET }, "/_xpack/ssl/certificates");
4553+
}
4554+
4555+
internal Task<TResponse> XpackSslCertificatesDispatchAsync<TResponse>(IRequest<GetCertificatesRequestParameters> p, CancellationToken ct) where TResponse : class, IElasticsearchResponse, new()
4556+
{
4557+
switch(p.HttpMethod)
4558+
{
4559+
case GET:
4560+
return _lowLevel.XpackSslCertificatesAsync<TResponse>(p.RequestParameters,ct);
4561+
}
4562+
throw InvalidDispatch("XpackSslCertificates", p, new [] { GET }, "/_xpack/ssl/certificates");
4563+
}
4564+
45454565
internal TResponse XpackWatcherAckWatchDispatch<TResponse>(IRequest<AcknowledgeWatchRequestParameters> p) where TResponse : class, IElasticsearchResponse, new()
45464566
{
45474567
switch(p.HttpMethod)

src/Nest/_Generated/_Requests.generated.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2645,6 +2645,18 @@ public GetCategoriesRequest(Id job_id) : base(r=>r.Required("job_id", job_id)){}
26452645
// Request parameters
26462646
}
26472647
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
2648+
public partial interface IGetCertificatesRequest : IRequest<GetCertificatesRequestParameters>
2649+
{
2650+
}
2651+
///<summary>Request parameters for XpackSslCertificates <pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</pre></summary>
2652+
public partial class GetCertificatesRequest : PlainRequestBase<GetCertificatesRequestParameters>, IGetCertificatesRequest
2653+
{
2654+
protected IGetCertificatesRequest Self => this;
2655+
// values part of the url path
2656+
2657+
// Request parameters
2658+
}
2659+
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
26482660
public partial interface IGetDatafeedsRequest : IRequest<GetDatafeedsRequestParameters>
26492661
{
26502662
Id DatafeedId { get; }
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using System;
2+
using Elastic.Xunit.XunitPlumbing;
3+
using Elasticsearch.Net;
4+
using FluentAssertions;
5+
using Nest;
6+
using Tests.Core.ManagedElasticsearch.Clusters;
7+
using Tests.Framework;
8+
using Tests.Framework.Integration;
9+
10+
namespace Tests.XPack.Ssl.GetCertificates
11+
{
12+
[SkipVersion("<6.5.0", "")]
13+
public class GetCertificatesApiTests
14+
: ApiIntegrationTestBase<XPackCluster, IGetCertificatesResponse, IGetCertificatesRequest, GetCertificatesDescriptor, GetCertificatesRequest>
15+
{
16+
public GetCertificatesApiTests(XPackCluster cluster, EndpointUsage usage) : base(cluster, usage) { }
17+
18+
protected override bool ExpectIsValid => true;
19+
protected override int ExpectStatusCode => 200;
20+
protected override HttpMethod HttpMethod => HttpMethod.GET;
21+
22+
protected override GetCertificatesRequest Initializer => new GetCertificatesRequest();
23+
24+
protected override string UrlPath => $"/_xpack/ssl/certificates";
25+
26+
protected override LazyResponses ClientUsage() => Calls(
27+
(client, f) => client.GetCertificates(f),
28+
(client, f) => client.GetCertificatesAsync(f),
29+
(client, r) => client.GetCertificates(r),
30+
(client, r) => client.GetCertificatesAsync(r)
31+
);
32+
33+
protected override void ExpectResponse(IGetCertificatesResponse response)
34+
{
35+
response.Certificates.Should().NotBeEmpty();
36+
foreach (var c in response.Certificates)
37+
{
38+
c.Path.Should().NotBeNullOrWhiteSpace();
39+
c.Format.Should().NotBeNullOrWhiteSpace();
40+
c.SubjectDomainName.Should().NotBeNullOrWhiteSpace();
41+
c.SerialNumber.Should().NotBeNullOrWhiteSpace();
42+
c.Expiry.Should().BeAfter(DateTime.UtcNow.AddYears(-2));
43+
}
44+
}
45+
}
46+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Threading.Tasks;
2+
using Elastic.Xunit.XunitPlumbing;
3+
using Nest;
4+
using Tests.Framework;
5+
6+
namespace Tests.XPack.Ssl.GetCertificates
7+
{
8+
public class GetCertificatesUrlTests : UrlTestsBase
9+
{
10+
[U] public override async Task Urls() => await UrlTester.GET("/_xpack/ssl/certificates")
11+
.Fluent(c => c.GetCertificates())
12+
.Request(c => c.GetCertificates(new GetCertificatesRequest()))
13+
.FluentAsync(c => c.GetCertificatesAsync())
14+
.RequestAsync(c => c.GetCertificatesAsync(new GetCertificatesRequest()));
15+
}
16+
}

0 commit comments

Comments
 (0)