Skip to content
13 changes: 9 additions & 4 deletions src/CodeGeneration/ApiGenerator/ApiGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,6 @@ public class ApiGenerator
"indices.freeze.json",
"indices.unfreeze.json",
"xpack.ml.set_upgrade_mode.json",
"security.create_api_key.json",
"security.get_api_key.json",
"security.invalidate_api_key.json",
"xpack.monitoring.bulk.json",

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

private static string CreateMethodName(string apiEndpointKey) => PascalCase(apiEndpointKey);
private static string CreateMethodName(string apiEndpointKey)
{
var pascalCased = PascalCase(apiEndpointKey);
if (pascalCased.StartsWith("Security"))
{
pascalCased = "Xpack" + pascalCased;
}
return pascalCased;
}

private static string DoRazor(string name, string template, RestApiSpec model) =>
Razor.CompileRenderAsync(name, template, model).GetAwaiter().GetResult();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2718,6 +2718,34 @@ public partial class StopRollupJobRequestParameters : RequestParameters<StopRoll
///<summary>Block for (at maximum) the specified duration while waiting for the job to stop. Defaults to 30s.</summary>
public TimeSpan Timeout { get => Q<TimeSpan>("timeout"); set => Q("timeout", value); }
}
///<summary>Request options for XpackSecurityCreateApiKey<pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</pre></summary>
public partial class CreateApiKeyRequestParameters : RequestParameters<CreateApiKeyRequestParameters>
{
public override HttpMethod DefaultHttpMethod => HttpMethod.PUT;
///<summary>
/// If `true` (the default) then refresh the affected shards to make this operation visible to search, if `wait_for` then wait for a refresh
/// to make this operation visible to search, if `false` then do nothing with refreshes.
///</summary>
public Refresh? Refresh { get => Q<Refresh?>("refresh"); set => Q("refresh", value); }
}
///<summary>Request options for XpackSecurityGetApiKey<pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html</pre></summary>
public partial class GetApiKeyRequestParameters : RequestParameters<GetApiKeyRequestParameters>
{
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;
///<summary>API key id of the API key to be retrieved</summary>
public string Id { get => Q<string>("id"); set => Q("id", value); }
///<summary>API key name of the API key to be retrieved</summary>
public string Name { get => Q<string>("name"); set => Q("name", value); }
///<summary>user name of the user who created this API key to be retrieved</summary>
public string Username { get => Q<string>("username"); set => Q("username", value); }
///<summary>realm name of the user who created this API key to be retrieved</summary>
public string RealmName { get => Q<string>("realm_name"); set => Q("realm_name", value); }
}
///<summary>Request options for XpackSecurityInvalidateApiKey<pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-invalidate-api-key.html</pre></summary>
public partial class InvalidateApiKeyRequestParameters : RequestParameters<InvalidateApiKeyRequestParameters>
{
public override HttpMethod DefaultHttpMethod => HttpMethod.DELETE;
}
///<summary>Request options for XpackSecurityAuthenticate<pre>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-authenticate.html</pre></summary>
public partial class AuthenticateRequestParameters : RequestParameters<AuthenticateRequestParameters>
{
Expand Down
38 changes: 38 additions & 0 deletions src/Elasticsearch.Net/ElasticLowLevelClient.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4052,6 +4052,44 @@ public TResponse XpackRollupStopJob<TResponse>(string id, StopRollupJobRequestPa
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public Task<TResponse> XpackRollupStopJobAsync<TResponse>(string id, StopRollupJobRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(POST, Url($"_xpack/rollup/job/{id.NotNull("id")}/_stop"), ctx, null, _params(requestParameters));
///<summary>PUT on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
///<param name="body">The api key request to create an API key</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public TResponse XpackSecurityCreateApiKey<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null)
where TResponse : class, IElasticsearchResponse, new() => this.DoRequest<TResponse>(PUT, Url($"_security/api_key"), body, _params(requestParameters));
///<summary>PUT on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
///<param name="body">The api key request to create an API key</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public Task<TResponse> XpackSecurityCreateApiKeyAsync<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(PUT, Url($"_security/api_key"), ctx, body, _params(requestParameters));
///<summary>POST on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
///<param name="body">The api key request to create an API key</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public TResponse XpackSecurityCreateApiKeyPost<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null)
where TResponse : class, IElasticsearchResponse, new() => this.DoRequest<TResponse>(POST, Url($"_security/api_key"), body, _params(requestParameters));
///<summary>POST on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
///<param name="body">The api key request to create an API key</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public Task<TResponse> XpackSecurityCreateApiKeyPostAsync<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(POST, Url($"_security/api_key"), ctx, body, _params(requestParameters));
///<summary>GET on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html</para></summary>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public TResponse XpackSecurityGetApiKey<TResponse>(GetApiKeyRequestParameters requestParameters = null)
where TResponse : class, IElasticsearchResponse, new() => this.DoRequest<TResponse>(GET, Url($"_security/api_key"), null, _params(requestParameters));
///<summary>GET on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html</para></summary>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public Task<TResponse> XpackSecurityGetApiKeyAsync<TResponse>(GetApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(GET, Url($"_security/api_key"), ctx, null, _params(requestParameters));
///<summary>DELETE on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-invalidate-api-key.html</para></summary>
///<param name="body">The api key request to invalidate API key(s)</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public TResponse XpackSecurityInvalidateApiKey<TResponse>(PostData body, InvalidateApiKeyRequestParameters requestParameters = null)
where TResponse : class, IElasticsearchResponse, new() => this.DoRequest<TResponse>(DELETE, Url($"_security/api_key"), body, _params(requestParameters));
///<summary>DELETE on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-invalidate-api-key.html</para></summary>
///<param name="body">The api key request to invalidate API key(s)</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public Task<TResponse> XpackSecurityInvalidateApiKeyAsync<TResponse>(PostData body, InvalidateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken))
where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync<TResponse>(DELETE, Url($"_security/api_key"), ctx, body, _params(requestParameters));
///<summary>GET on /_xpack/security/_authenticate <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-authenticate.html</para></summary>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
public TResponse XpackSecurityAuthenticate<TResponse>(AuthenticateRequestParameters requestParameters = null)
Expand Down
30 changes: 30 additions & 0 deletions src/Elasticsearch.Net/IElasticLowLevelClient.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3284,6 +3284,36 @@ public partial interface IElasticLowLevelClient
///<param name="id">The ID of the job to stop</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
Task<TResponse> XpackRollupStopJobAsync<TResponse>(string id, StopRollupJobRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
///<summary>PUT on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
///<param name="body">The api key request to create an API key</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
TResponse XpackSecurityCreateApiKey<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
///<summary>PUT on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
///<param name="body">The api key request to create an API key</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
Task<TResponse> XpackSecurityCreateApiKeyAsync<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
///<summary>POST on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
///<param name="body">The api key request to create an API key</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
TResponse XpackSecurityCreateApiKeyPost<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
///<summary>POST on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html</para></summary>
///<param name="body">The api key request to create an API key</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
Task<TResponse> XpackSecurityCreateApiKeyPostAsync<TResponse>(PostData body, CreateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
///<summary>GET on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html</para></summary>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
TResponse XpackSecurityGetApiKey<TResponse>(GetApiKeyRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
///<summary>GET on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html</para></summary>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
Task<TResponse> XpackSecurityGetApiKeyAsync<TResponse>(GetApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
///<summary>DELETE on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-invalidate-api-key.html</para></summary>
///<param name="body">The api key request to invalidate API key(s)</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
TResponse XpackSecurityInvalidateApiKey<TResponse>(PostData body, InvalidateApiKeyRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
///<summary>DELETE on /_security/api_key <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-invalidate-api-key.html</para></summary>
///<param name="body">The api key request to invalidate API key(s)</param>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
Task<TResponse> XpackSecurityInvalidateApiKeyAsync<TResponse>(PostData body, InvalidateApiKeyRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new();
///<summary>GET on /_xpack/security/_authenticate <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-authenticate.html</para></summary>
///<param name="requestParameters">A func that allows you to describe the querystring parameters &amp; request specific connection settings.</param>
TResponse XpackSecurityAuthenticate<TResponse>(AuthenticateRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new();
Expand Down
58 changes: 58 additions & 0 deletions src/Nest/XPack/Security/ApiKey/CreateApiKey/ApiKeyPrivileges.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;

namespace Nest
{
public interface IApiKeyPrivileges
{
/// <summary>
/// A list of names.
/// </summary>
IEnumerable<string> Names { get; set; }

/// <summary>
/// A list of privileges.
/// </summary>
IEnumerable<string> Privileges { get; set; }
}

public class ApiKeyPrivileges : IApiKeyPrivileges
{
/// <inheritdoc cref="IApiKeyPrivileges.Names" />
public IEnumerable<string> Names { get; set; }

/// <inheritdoc cref="IApiKeyPrivileges.Privileges" />
public IEnumerable<string> Privileges { get; set; }
}

public class ApiKeyPrivilegesDescriptor
: DescriptorPromiseBase<ApiKeyPrivilegesDescriptor, List<IApiKeyPrivileges>>
{
public ApiKeyPrivilegesDescriptor() : base(new List<IApiKeyPrivileges>()) { }

public ApiKeyPrivilegesDescriptor Index(Func<ApiKeyPrivilegeDescriptor, IApiKeyPrivileges> selector) =>
Assign(selector, (a, v) => a.Add(v.InvokeOrDefault(new ApiKeyPrivilegeDescriptor())));

public class ApiKeyPrivilegeDescriptor
: DescriptorBase<ApiKeyPrivilegeDescriptor, IApiKeyPrivileges>, IApiKeyPrivileges
{
/// <inheritdoc cref="IApiKeyPrivileges.Names" />
IEnumerable<string> IApiKeyPrivileges.Names { get; set; }

/// <inheritdoc cref="IApiKeyPrivileges.Privileges" />
IEnumerable<string> IApiKeyPrivileges.Privileges { get; set; }

/// <inheritdoc cref="IApiKeyPrivileges.Privileges" />
public ApiKeyPrivilegeDescriptor Privileges(params string[] privileges) => Assign(privileges, (a, v) => a.Privileges = v);

/// <inheritdoc cref="IApiKeyPrivileges.Privileges" />
public ApiKeyPrivilegeDescriptor Privileges(IEnumerable<string> privileges) => Assign(privileges, (a, v) => a.Privileges = v);

/// <inheritdoc cref="IApiKeyPrivileges.Names" />
public ApiKeyPrivilegeDescriptor Names(params string[] resources) => Assign(resources, (a, v) => a.Names = v);

/// <inheritdoc cref="IApiKeyPrivileges.Names" />
public ApiKeyPrivilegeDescriptor Names(IEnumerable<string> resources) => Assign(resources, (a, v) => a.Names = v);
}
}
}
52 changes: 52 additions & 0 deletions src/Nest/XPack/Security/ApiKey/CreateApiKey/ApiKeyRole.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace Nest
{
public interface IApiKeyRole
{
/// <summary>
/// A list of clusters
/// </summary>
[JsonProperty("cluster")]
IEnumerable<string> Cluster { get; set; }

/// <summary>
/// A list of API key privileges for indices.
/// </summary>
[JsonProperty("index")]
IEnumerable<IApiKeyPrivileges> Index { get; set; }
}

public class ApiKeyRole : IApiKeyRole
{
/// <inheritdoc />
[JsonProperty("cluster")]
public IEnumerable<string> Cluster { get; set; }

/// <inheritdoc />
[JsonProperty("index")]
public IEnumerable<IApiKeyPrivileges> Index { get; set; }
}

public class ApiKeyRoleDescriptor
: DescriptorBase<ApiKeyRoleDescriptor, IApiKeyRole>, IApiKeyRole
{
/// <inheritdoc cref="IApiKeyRole.Cluster" />
IEnumerable<string> IApiKeyRole.Cluster { get; set; }

/// <inheritdoc cref="IApiKeyRole.Index" />
IEnumerable<IApiKeyPrivileges> IApiKeyRole.Index { get; set; }

/// <inheritdoc cref="IApiKeyRole.Cluster" />
public ApiKeyRoleDescriptor Cluster(params string[] cluster) => Assign(cluster, (a, v) => a.Cluster = v);

/// <inheritdoc cref="IApiKeyRole.Cluster" />
public ApiKeyRoleDescriptor Cluster(IEnumerable<string> cluster) => Assign(cluster, (a, v) => a.Cluster = v);

/// <inheritdoc cref="IApiKeyRole.Index" />
public ApiKeyRoleDescriptor Indices(Func<ApiKeyPrivilegesDescriptor, IPromise<List<IApiKeyPrivileges>>> selector
) => Assign(selector, (a, v) => a.Index = v?.Invoke(new ApiKeyPrivilegesDescriptor())?.Value);
}
}
Loading