From 7d07b2ad5ec2312860c2b928d8a7aa8e37c0e364 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Fri, 9 Apr 2021 10:39:54 +0200 Subject: [PATCH] Implemented Basic & ApiKey authentication for elasticsearch --- .../Elastic/DefaultElasticClientProvider.cs | 18 ++++++++++++++++++ ...ElasticSearchApiKeyAuthenticationOptions.cs | 8 ++++++++ ...sElasticSearchBasicAuthenticationOptions.cs | 8 ++++++++ .../Elastic/DocsElasticSearchOptions.cs | 13 +++++++++++++ 4 files changed, 47 insertions(+) create mode 100644 modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchApiKeyAuthenticationOptions.cs create mode 100644 modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchBasicAuthenticationOptions.cs diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DefaultElasticClientProvider.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DefaultElasticClientProvider.cs index 5db064fd5f..abcaefff99 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DefaultElasticClientProvider.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DefaultElasticClientProvider.cs @@ -21,7 +21,25 @@ namespace Volo.Docs.Documents.FullSearch.Elastic { var node = new Uri(Configuration["ElasticSearch:Url"]); var settings = new ConnectionSettings(node).DefaultIndex(Options.IndexName); + + Authenticate(settings); + return new ElasticClient(settings); } + + protected virtual void Authenticate(ConnectionSettings connectionSettings) + { + switch (Options.AuthenticationMode) + { + case DocsElasticSearchOptions.ElasticSearchAuthenticationMode.Basic: + var basicAuth = Options.BasicAuthentication; + connectionSettings.BasicAuthentication(basicAuth.Username, basicAuth.Password); + break; + case DocsElasticSearchOptions.ElasticSearchAuthenticationMode.ApiKey: + var apiKeyAuth = Options.ApiKeyAuthentication; + connectionSettings.BasicAuthentication(apiKeyAuth.Id, apiKeyAuth.ApiKey); + break; + } + } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchApiKeyAuthenticationOptions.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchApiKeyAuthenticationOptions.cs new file mode 100644 index 0000000000..2b26003dd2 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchApiKeyAuthenticationOptions.cs @@ -0,0 +1,8 @@ +namespace Volo.Docs.Documents.FullSearch.Elastic +{ + public class DocsElasticSearchApiKeyAuthenticationOptions + { + public string Id { get; set; } + public string ApiKey { get; set; } + } +} diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchBasicAuthenticationOptions.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchBasicAuthenticationOptions.cs new file mode 100644 index 0000000000..1853e9bc7d --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchBasicAuthenticationOptions.cs @@ -0,0 +1,8 @@ +namespace Volo.Docs.Documents.FullSearch.Elastic +{ + public class DocsElasticSearchBasicAuthenticationOptions + { + public string Username { get; set; } + public string Password { get; set; } + } +} diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchOptions.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchOptions.cs index 40bbf66b08..e59a932ec4 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchOptions.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/DocsElasticSearchOptions.cs @@ -6,10 +6,23 @@ { Enable = false; IndexName = "abp_documents"; + AuthenticationMode = ElasticSearchAuthenticationMode.None; } public bool Enable { get; set; } public string IndexName { get; set; } + + public ElasticSearchAuthenticationMode AuthenticationMode { get; set; } + + public DocsElasticSearchBasicAuthenticationOptions BasicAuthentication { get; set; } + public DocsElasticSearchApiKeyAuthenticationOptions ApiKeyAuthentication { get; set; } + + public enum ElasticSearchAuthenticationMode + { + None = 0, + Basic = 1, + ApiKey = 2 + } } }