Skip to content

Commit 4ecdfa8

Browse files
authored
Security Api Key API functionality (#3684)
1 parent 4839693 commit 4ecdfa8

21 files changed

+1215
-4
lines changed

src/CodeGeneration/ApiGenerator/ApiGenerator.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ public class ApiGenerator
3535
"indices.freeze.json",
3636
"indices.unfreeze.json",
3737
"xpack.ml.set_upgrade_mode.json",
38-
"security.create_api_key.json",
39-
"security.get_api_key.json",
40-
"security.invalidate_api_key.json",
4138
"xpack.monitoring.bulk.json",
4239

4340
// these API's are not ready for primetime yet
@@ -179,7 +176,15 @@ private static Dictionary<string, ApiQueryParameters> CreateCommonApiQueryParame
179176
return ApiQueryParametersPatcher.Patch(null, commonParameters, null, false);
180177
}
181178

182-
private static string CreateMethodName(string apiEndpointKey) => PascalCase(apiEndpointKey);
179+
private static string CreateMethodName(string apiEndpointKey)
180+
{
181+
var pascalCased = PascalCase(apiEndpointKey);
182+
if (pascalCased.StartsWith("Security"))
183+
{
184+
pascalCased = "Xpack" + pascalCased;
185+
}
186+
return pascalCased;
187+
}
183188

184189
private static string DoRazor(string name, string template, RestApiSpec model) =>
185190
Razor.CompileRenderAsync(name, template, model).GetAwaiter().GetResult();

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2718,6 +2718,34 @@ public partial class StopRollupJobRequestParameters : RequestParameters<StopRoll
27182718
///<summary>Block for (at maximum) the specified duration while waiting for the job to stop. Defaults to 30s.</summary>
27192719
public TimeSpan Timeout { get => Q<TimeSpan>("timeout"); set => Q("timeout", value); }
27202720
}
2721+
///<summary>Request options for XpackSecurityCreateApiKey<pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</pre></summary>
2722+
public partial class CreateApiKeyRequestParameters : RequestParameters<CreateApiKeyRequestParameters>
2723+
{
2724+
public override HttpMethod DefaultHttpMethod => HttpMethod.PUT;
2725+
///<summary>
2726+
/// If `true` (the default) then refresh the affected shards to make this operation visible to search, if `wait_for` then wait for a refresh
2727+
/// to make this operation visible to search, if `false` then do nothing with refreshes.
2728+
///</summary>
2729+
public Refresh? Refresh { get => Q<Refresh?>("refresh"); set => Q("refresh", value); }
2730+
}
2731+
///<summary>Request options for XpackSecurityGetApiKey<pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html</pre></summary>
2732+
public partial class GetApiKeyRequestParameters : RequestParameters<GetApiKeyRequestParameters>
2733+
{
2734+
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;
2735+
///<summary>API key id of the API key to be retrieved</summary>
2736+
public string Id { get => Q<string>("id"); set => Q("id", value); }
2737+
///<summary>API key name of the API key to be retrieved</summary>
2738+
public string Name { get => Q<string>("name"); set => Q("name", value); }
2739+
///<summary>user name of the user who created this API key to be retrieved</summary>
2740+
public string Username { get => Q<string>("username"); set => Q("username", value); }
2741+
///<summary>realm name of the user who created this API key to be retrieved</summary>
2742+
public string RealmName { get => Q<string>("realm_name"); set => Q("realm_name", value); }
2743+
}
2744+
///<summary>Request options for XpackSecurityInvalidateApiKey<pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-invalidate-api-key.html</pre></summary>
2745+
public partial class InvalidateApiKeyRequestParameters : RequestParameters<InvalidateApiKeyRequestParameters>
2746+
{
2747+
public override HttpMethod DefaultHttpMethod => HttpMethod.DELETE;
2748+
}
27212749
///<summary>Request options for XpackSecurityAuthenticate<pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-authenticate.html</pre></summary>
27222750
public partial class AuthenticateRequestParameters : RequestParameters<AuthenticateRequestParameters>
27232751
{

src/Elasticsearch.Net/ElasticLowLevelClient.Generated.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4052,6 +4052,44 @@ public TResponse XpackRollupStopJob<TResponse>(string id, StopRollupJobRequestPa
40524052
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
40534053
public Task<TResponse> XpackRollupStopJobAsync<TResponse>(string id, StopRollupJobRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
40544054
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(POST, Url($"_xpack/rollup/job/{id.NotNull("id")}/_stop"), ctx, null, _params(requestParameters));
4055+
///<summary>PUT on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
4056+
///<param name="body">The api key request to create an API key</param>
4057+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4058+
public TResponse XpackSecurityCreateApiKey<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null)
4059+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequest<TResponse>(PUT, Url($"_security/api_key"), body, _params(requestParameters));
4060+
///<summary>PUT on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
4061+
///<param name="body">The api key request to create an API key</param>
4062+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4063+
public Task<TResponse> XpackSecurityCreateApiKeyAsync<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
4064+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(PUT, Url($"_security/api_key"), ctx, body, _params(requestParameters));
4065+
///<summary>POST on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
4066+
///<param name="body">The api key request to create an API key</param>
4067+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4068+
public TResponse XpackSecurityCreateApiKeyPost<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null)
4069+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequest<TResponse>(POST, Url($"_security/api_key"), body, _params(requestParameters));
4070+
///<summary>POST on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
4071+
///<param name="body">The api key request to create an API key</param>
4072+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4073+
public Task<TResponse> XpackSecurityCreateApiKeyPostAsync<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
4074+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(POST, Url($"_security/api_key"), ctx, body, _params(requestParameters));
4075+
///<summary>GET on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html</para></summary>
4076+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4077+
public TResponse XpackSecurityGetApiKey<TResponse>(GetApiKeyRequestParameters requestParameters = null)
4078+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequest<TResponse>(GET, Url($"_security/api_key"), null, _params(requestParameters));
4079+
///<summary>GET on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html</para></summary>
4080+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4081+
public Task<TResponse> XpackSecurityGetApiKeyAsync<TResponse>(GetApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
4082+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(GET, Url($"_security/api_key"), ctx, null, _params(requestParameters));
4083+
///<summary>DELETE on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-invalidate-api-key.html</para></summary>
4084+
///<param name="body">The api key request to invalidate API key(s)</param>
4085+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4086+
public TResponse XpackSecurityInvalidateApiKey<TResponse>(PostData body, InvalidateApiKeyRequestParameters requestParameters = null)
4087+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequest<TResponse>(DELETE, Url($"_security/api_key"), body, _params(requestParameters));
4088+
///<summary>DELETE on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-invalidate-api-key.html</para></summary>
4089+
///<param name="body">The api key request to invalidate API key(s)</param>
4090+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
4091+
public Task<TResponse> XpackSecurityInvalidateApiKeyAsync<TResponse>(PostData body, InvalidateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
4092+
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(DELETE, Url($"_security/api_key"), ctx, body, _params(requestParameters));
40554093
///<summary>GET on /_xpack/security/_authenticate <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-authenticate.html</para></summary>
40564094
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
40574095
public TResponse XpackSecurityAuthenticate<TResponse>(AuthenticateRequestParameters requestParameters = null)

src/Elasticsearch.Net/IElasticLowLevelClient.Generated.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3284,6 +3284,36 @@ public partial interface IElasticLowLevelClient
32843284
///<param name="id">The ID of the job to stop</param>
32853285
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
32863286
Task<TResponse> XpackRollupStopJobAsync<TResponse>(string id, StopRollupJobRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
3287+
///<summary>PUT on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
3288+
///<param name="body">The api key request to create an API key</param>
3289+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3290+
TResponse XpackSecurityCreateApiKey<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
3291+
///<summary>PUT on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
3292+
///<param name="body">The api key request to create an API key</param>
3293+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3294+
Task<TResponse> XpackSecurityCreateApiKeyAsync<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
3295+
///<summary>POST on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
3296+
///<param name="body">The api key request to create an API key</param>
3297+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3298+
TResponse XpackSecurityCreateApiKeyPost<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
3299+
///<summary>POST on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
3300+
///<param name="body">The api key request to create an API key</param>
3301+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3302+
Task<TResponse> XpackSecurityCreateApiKeyPostAsync<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
3303+
///<summary>GET on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html</para></summary>
3304+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3305+
TResponse XpackSecurityGetApiKey<TResponse>(GetApiKeyRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
3306+
///<summary>GET on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html</para></summary>
3307+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3308+
Task<TResponse> XpackSecurityGetApiKeyAsync<TResponse>(GetApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
3309+
///<summary>DELETE on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-invalidate-api-key.html</para></summary>
3310+
///<param name="body">The api key request to invalidate API key(s)</param>
3311+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3312+
TResponse XpackSecurityInvalidateApiKey<TResponse>(PostData body, InvalidateApiKeyRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
3313+
///<summary>DELETE on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-invalidate-api-key.html</para></summary>
3314+
///<param name="body">The api key request to invalidate API key(s)</param>
3315+
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
3316+
Task<TResponse> XpackSecurityInvalidateApiKeyAsync<TResponse>(PostData body, InvalidateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
32873317
///<summary>GET on /_xpack/security/_authenticate <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-authenticate.html</para></summary>
32883318
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
32893319
TResponse XpackSecurityAuthenticate<TResponse>(AuthenticateRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace Nest
5+
{
6+
public interface IApiKeyPrivileges
7+
{
8+
/// <summary>
9+
/// A list of names.
10+
/// </summary>
11+
IEnumerable<string> Names { get; set; }
12+
13+
/// <summary>
14+
/// A list of privileges.
15+
/// </summary>
16+
IEnumerable<string> Privileges { get; set; }
17+
}
18+
19+
public class ApiKeyPrivileges : IApiKeyPrivileges
20+
{
21+
/// <inheritdoc cref="IApiKeyPrivileges.Names" />
22+
public IEnumerable<string> Names { get; set; }
23+
24+
/// <inheritdoc cref="IApiKeyPrivileges.Privileges" />
25+
public IEnumerable<string> Privileges { get; set; }
26+
}
27+
28+
public class ApiKeyPrivilegesDescriptor
29+
: DescriptorPromiseBase<ApiKeyPrivilegesDescriptor, List<IApiKeyPrivileges>>
30+
{
31+
public ApiKeyPrivilegesDescriptor() : base(new List<IApiKeyPrivileges>()) { }
32+
33+
public ApiKeyPrivilegesDescriptor Index(Func<ApiKeyPrivilegeDescriptor, IApiKeyPrivileges> selector) =>
34+
Assign(selector, (a, v) => a.Add(v.InvokeOrDefault(new ApiKeyPrivilegeDescriptor())));
35+
36+
public class ApiKeyPrivilegeDescriptor
37+
: DescriptorBase<ApiKeyPrivilegeDescriptor, IApiKeyPrivileges>, IApiKeyPrivileges
38+
{
39+
/// <inheritdoc cref="IApiKeyPrivileges.Names" />
40+
IEnumerable<string> IApiKeyPrivileges.Names { get; set; }
41+
42+
/// <inheritdoc cref="IApiKeyPrivileges.Privileges" />
43+
IEnumerable<string> IApiKeyPrivileges.Privileges { get; set; }
44+
45+
/// <inheritdoc cref="IApiKeyPrivileges.Privileges" />
46+
public ApiKeyPrivilegeDescriptor Privileges(params string[] privileges) => Assign(privileges, (a, v) => a.Privileges = v);
47+
48+
/// <inheritdoc cref="IApiKeyPrivileges.Privileges" />
49+
public ApiKeyPrivilegeDescriptor Privileges(IEnumerable<string> privileges) => Assign(privileges, (a, v) => a.Privileges = v);
50+
51+
/// <inheritdoc cref="IApiKeyPrivileges.Names" />
52+
public ApiKeyPrivilegeDescriptor Names(params string[] resources) => Assign(resources, (a, v) => a.Names = v);
53+
54+
/// <inheritdoc cref="IApiKeyPrivileges.Names" />
55+
public ApiKeyPrivilegeDescriptor Names(IEnumerable<string> resources) => Assign(resources, (a, v) => a.Names = v);
56+
}
57+
}
58+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Newtonsoft.Json;
4+
5+
namespace Nest
6+
{
7+
public interface IApiKeyRole
8+
{
9+
/// <summary>
10+
/// A list of clusters
11+
/// </summary>
12+
[JsonProperty("cluster")]
13+
IEnumerable<string> Cluster { get; set; }
14+
15+
/// <summary>
16+
/// A list of API key privileges for indices.
17+
/// </summary>
18+
[JsonProperty("index")]
19+
IEnumerable<IApiKeyPrivileges> Index { get; set; }
20+
}
21+
22+
public class ApiKeyRole : IApiKeyRole
23+
{
24+
/// <inheritdoc />
25+
[JsonProperty("cluster")]
26+
public IEnumerable<string> Cluster { get; set; }
27+
28+
/// <inheritdoc />
29+
[JsonProperty("index")]
30+
public IEnumerable<IApiKeyPrivileges> Index { get; set; }
31+
}
32+
33+
public class ApiKeyRoleDescriptor
34+
: DescriptorBase<ApiKeyRoleDescriptor, IApiKeyRole>, IApiKeyRole
35+
{
36+
/// <inheritdoc cref="IApiKeyRole.Cluster" />
37+
IEnumerable<string> IApiKeyRole.Cluster { get; set; }
38+
39+
/// <inheritdoc cref="IApiKeyRole.Index" />
40+
IEnumerable<IApiKeyPrivileges> IApiKeyRole.Index { get; set; }
41+
42+
/// <inheritdoc cref="IApiKeyRole.Cluster" />
43+
public ApiKeyRoleDescriptor Cluster(params string[] cluster) => Assign(cluster, (a, v) => a.Cluster = v);
44+
45+
/// <inheritdoc cref="IApiKeyRole.Cluster" />
46+
public ApiKeyRoleDescriptor Cluster(IEnumerable<string> cluster) => Assign(cluster, (a, v) => a.Cluster = v);
47+
48+
/// <inheritdoc cref="IApiKeyRole.Index" />
49+
public ApiKeyRoleDescriptor Indices(Func<ApiKeyPrivilegesDescriptor, IPromise<List<IApiKeyPrivileges>>> selector
50+
) => Assign(selector, (a, v) => a.Index = v?.Invoke(new ApiKeyPrivilegesDescriptor())?.Value);
51+
}
52+
}

0 commit comments

Comments
 (0)