Skip to content

Security Api Key functionality #3684

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
May 7, 2019
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