Skip to content

Commit 0423a61

Browse files
authored
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
1 parent 9040a0b commit 0423a61

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
@@ -39,7 +39,6 @@ public class ApiGenerator
3939
"xpack.ml.get_calendar_job.json",
4040
"xpack.ml.delete_forecast.json",
4141
"xpack.ml.find_file_structure.json",
42-
"xpack.ssl.certificates.json",
4342
"delete_by_query_rethrottle.json",
4443
"update_by_query_rethrottle.json",
4544

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
@@ -2636,6 +2636,11 @@ public partial class TranslateSqlRequestParameters : RequestParameters<Translate
26362636
{
26372637
public override HttpMethod DefaultHttpMethod => HttpMethod.POST;
26382638
}
2639+
///<summary>Request options for XpackSslCertificates<pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</pre></summary>
2640+
public partial class GetCertificatesRequestParameters : RequestParameters<GetCertificatesRequestParameters>
2641+
{
2642+
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;
2643+
}
26392644
///<summary>Request options for XpackWatcherAckWatch<pre>http://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-ack-watch.html</pre></summary>
26402645
public partial class AcknowledgeWatchRequestParameters : RequestParameters<AcknowledgeWatchRequestParameters>
26412646
{

src/Elasticsearch.Net/ElasticLowLevelClient.Generated.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4018,6 +4018,14 @@ public TResponse XpackSqlTranslateGet<TResponse>(TranslateSqlRequestParameters r
40184018
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
40194019
public Task<TResponse> XpackSqlTranslateGetAsync<TResponse>(TranslateSqlRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
40204020
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(GET, Url($"_xpack/sql/translate"), ctx, null, _params(requestParameters));
4021+
///<summary>GET on /_xpack/ssl/certificates <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</para></summary>
4022+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4023+
public TResponse XpackSslCertificates<TResponse>(GetCertificatesRequestParameters requestParameters = null)
4024+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequest<TResponse>(GET, Url($"_xpack/ssl/certificates"), null, _params(requestParameters));
4025+
///<summary>GET on /_xpack/ssl/certificates <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</para></summary>
4026+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4027+
public Task<TResponse> XpackSslCertificatesAsync<TResponse>(GetCertificatesRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
4028+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(GET, Url($"_xpack/ssl/certificates"), ctx, null, _params(requestParameters));
40214029
///<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>
40224030
///<param name="watch_id">Watch ID</param>
40234031
///<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
@@ -3254,6 +3254,12 @@ public partial interface IElasticLowLevelClient
32543254
///<summary>GET on /_xpack/sql/translate <para>Translate SQL into Elasticsearch queries</para></summary>
32553255
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
32563256
Task<TResponse> XpackSqlTranslateGetAsync<TResponse>(TranslateSqlRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
3257+
///<summary>GET on /_xpack/ssl/certificates <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</para></summary>
3258+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3259+
TResponse XpackSslCertificates<TResponse>(GetCertificatesRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
3260+
///<summary>GET on /_xpack/ssl/certificates <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</para></summary>
3261+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3262+
Task<TResponse> XpackSslCertificatesAsync<TResponse>(GetCertificatesRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
32573263
///<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>
32583264
///<param name="watch_id">Watch ID</param>
32593265
///<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
@@ -4764,6 +4764,14 @@ public partial class TranslateSqlDescriptor : RequestDescriptorBase<TranslateSq
47644764

47654765
// Request parameters
47664766

4767+
}
4768+
///<summary>descriptor for XpackSslCertificates <pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-ssl.html</pre></summary>
4769+
public partial class GetCertificatesDescriptor : RequestDescriptorBase<GetCertificatesDescriptor,GetCertificatesRequestParameters, IGetCertificatesRequest>, IGetCertificatesRequest
4770+
{
4771+
// values part of the url path
4772+
4773+
// Request parameters
4774+
47674775
}
47684776
///<summary>descriptor for XpackWatcherAckWatch <pre>http://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-ack-watch.html</pre></summary>
47694777
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
@@ -4514,6 +4514,26 @@ internal partial class LowLevelDispatch
45144514
throw InvalidDispatch("XpackSqlTranslate", p, new [] { POST, GET }, "/_xpack/sql/translate");
45154515
}
45164516

4517+
internal TResponse XpackSslCertificatesDispatch<TResponse>(IRequest<GetCertificatesRequestParameters> p) where TResponse : class, IElasticsearchResponse, new()
4518+
{
4519+
switch(p.HttpMethod)
4520+
{
4521+
case GET:
4522+
return _lowLevel.XpackSslCertificates<TResponse>(p.RequestParameters);
4523+
}
4524+
throw InvalidDispatch("XpackSslCertificates", p, new [] { GET }, "/_xpack/ssl/certificates");
4525+
}
4526+
4527+
internal Task<TResponse> XpackSslCertificatesDispatchAsync<TResponse>(IRequest<GetCertificatesRequestParameters> p, CancellationToken ct) where TResponse : class, IElasticsearchResponse, new()
4528+
{
4529+
switch(p.HttpMethod)
4530+
{
4531+
case GET:
4532+
return _lowLevel.XpackSslCertificatesAsync<TResponse>(p.RequestParameters,ct);
4533+
}
4534+
throw InvalidDispatch("XpackSslCertificates", p, new [] { GET }, "/_xpack/ssl/certificates");
4535+
}
4536+
45174537
internal TResponse XpackWatcherAckWatchDispatch<TResponse>(IRequest<AcknowledgeWatchRequestParameters> p) where TResponse : class, IElasticsearchResponse, new()
45184538
{
45194539
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)