From 0234741f40971811a0295c5003485686dd64a8a1 Mon Sep 17 00:00:00 2001 From: JhontSouth Date: Thu, 30 Mar 2023 07:40:13 -0500 Subject: [PATCH 1/3] add tokenCredential auth --- .../CosmosDbPartitionedStorage.cs | 7 ++++--- .../CosmosDbPartitionedStorageOptions.cs | 8 ++++++++ .../Microsoft.Bot.Builder.Azure.csproj | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs b/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs index 1b16268962..2fae762325 100644 --- a/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs +++ b/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs @@ -9,6 +9,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; +using Azure.Core; using Microsoft.Azure.Cosmos; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -53,9 +54,9 @@ public CosmosDbPartitionedStorage(CosmosDbPartitionedStorageOptions cosmosDbStor throw new ArgumentException($"Service EndPoint for CosmosDB is required.", nameof(cosmosDbStorageOptions)); } - if (string.IsNullOrEmpty(cosmosDbStorageOptions.AuthKey)) + if (string.IsNullOrEmpty(cosmosDbStorageOptions.AuthKey) && string.IsNullOrEmpty(cosmosDbStorageOptions.TokenCredential)) { - throw new ArgumentException("AuthKey for CosmosDB is required.", nameof(cosmosDbStorageOptions)); + throw new ArgumentException("AuthKey or TokenCredential for CosmosDB is required.", nameof(cosmosDbStorageOptions)); } if (string.IsNullOrEmpty(cosmosDbStorageOptions.DatabaseId)) @@ -117,7 +118,7 @@ public CosmosDbPartitionedStorage(CosmosDbPartitionedStorageOptions cosmosDbStor /// jsonSerializer.ContractResolver = new DefaultContractResolver(). /// jsonSerializer.SerializationBinder = new AllowedTypesSerializationBinder(). /// - internal CosmosDbPartitionedStorage(CosmosClient client, CosmosDbPartitionedStorageOptions cosmosDbStorageOptions, JsonSerializer jsonSerializer = default) + public CosmosDbPartitionedStorage(CosmosClient client, CosmosDbPartitionedStorageOptions cosmosDbStorageOptions, JsonSerializer jsonSerializer = default) : this(cosmosDbStorageOptions) { _client = client; diff --git a/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorageOptions.cs b/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorageOptions.cs index e1a7dfaec3..3aba174950 100644 --- a/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorageOptions.cs +++ b/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorageOptions.cs @@ -85,5 +85,13 @@ public class CosmosDbPartitionedStorageOptions /// The default for backwards compatibility is 255 . /// public bool CompatibilityMode { get; set; } = true; + + /// + /// Gets or sets the token credential for Cosmos DB. + /// + /// + /// The token credential for Cosmos DB. + /// + public string TokenCredential { get; set; } } } diff --git a/libraries/Microsoft.Bot.Builder.Azure/Microsoft.Bot.Builder.Azure.csproj b/libraries/Microsoft.Bot.Builder.Azure/Microsoft.Bot.Builder.Azure.csproj index efbcab3799..8a58f7438b 100644 --- a/libraries/Microsoft.Bot.Builder.Azure/Microsoft.Bot.Builder.Azure.csproj +++ b/libraries/Microsoft.Bot.Builder.Azure/Microsoft.Bot.Builder.Azure.csproj @@ -36,7 +36,7 @@ - + From caab178ae9f64fc7dcf88751ece8e7b1db9234cd Mon Sep 17 00:00:00 2001 From: JhontSouth Date: Thu, 30 Mar 2023 11:54:04 -0500 Subject: [PATCH 2/3] add TokenCredential to CosmosDbPartitionedStorageOptions --- .../CosmosDbPartitionedStorage.cs | 16 +++++++++++++--- .../CosmosDbPartitionedStorageOptions.cs | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs b/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs index 2fae762325..e32f7f3100 100644 --- a/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs +++ b/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs @@ -54,7 +54,7 @@ public CosmosDbPartitionedStorage(CosmosDbPartitionedStorageOptions cosmosDbStor throw new ArgumentException($"Service EndPoint for CosmosDB is required.", nameof(cosmosDbStorageOptions)); } - if (string.IsNullOrEmpty(cosmosDbStorageOptions.AuthKey) && string.IsNullOrEmpty(cosmosDbStorageOptions.TokenCredential)) + if (string.IsNullOrEmpty(cosmosDbStorageOptions.AuthKey) && cosmosDbStorageOptions.TokenCredential == null) { throw new ArgumentException("AuthKey or TokenCredential for CosmosDB is required.", nameof(cosmosDbStorageOptions)); } @@ -118,7 +118,7 @@ public CosmosDbPartitionedStorage(CosmosDbPartitionedStorageOptions cosmosDbStor /// jsonSerializer.ContractResolver = new DefaultContractResolver(). /// jsonSerializer.SerializationBinder = new AllowedTypesSerializationBinder(). /// - public CosmosDbPartitionedStorage(CosmosClient client, CosmosDbPartitionedStorageOptions cosmosDbStorageOptions, JsonSerializer jsonSerializer = default) + internal CosmosDbPartitionedStorage(CosmosClient client, CosmosDbPartitionedStorageOptions cosmosDbStorageOptions, JsonSerializer jsonSerializer = default) : this(cosmosDbStorageOptions) { _client = client; @@ -389,10 +389,20 @@ private async Task InitializeAsync() var assemblyName = this.GetType().Assembly.GetName(); cosmosClientOptions.ApplicationName = string.Concat(assemblyName.Name, " ", assemblyName.Version.ToString()); - _client = new CosmosClient( + if (_cosmosDbStorageOptions.TokenCredential != null) + { + _client = new CosmosClient( + _cosmosDbStorageOptions.CosmosDbEndpoint, + _cosmosDbStorageOptions.TokenCredential, + cosmosClientOptions); + } + else + { + _client = new CosmosClient( _cosmosDbStorageOptions.CosmosDbEndpoint, _cosmosDbStorageOptions.AuthKey, cosmosClientOptions); + } } if (_container == null) diff --git a/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorageOptions.cs b/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorageOptions.cs index 3aba174950..8a996bf14b 100644 --- a/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorageOptions.cs +++ b/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorageOptions.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using Azure.Core; using Microsoft.Azure.Cosmos; namespace Microsoft.Bot.Builder.Azure @@ -92,6 +93,6 @@ public class CosmosDbPartitionedStorageOptions /// /// The token credential for Cosmos DB. /// - public string TokenCredential { get; set; } + public TokenCredential TokenCredential { get; set; } } } From ffbca029c11a33e026b3adf2fc035718891cda5f Mon Sep 17 00:00:00 2001 From: JhontSouth Date: Fri, 31 Mar 2023 15:30:35 -0500 Subject: [PATCH 3/3] remove unnecessary using --- .../Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs | 1 - .../CosmosDbPartitionedStorageTests.cs | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs b/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs index e32f7f3100..a8bc9b7fe7 100644 --- a/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs +++ b/libraries/Microsoft.Bot.Builder.Azure/CosmosDbPartitionedStorage.cs @@ -9,7 +9,6 @@ using System.Text; using System.Threading; using System.Threading.Tasks; -using Azure.Core; using Microsoft.Azure.Cosmos; using Newtonsoft.Json; using Newtonsoft.Json.Linq; diff --git a/tests/Microsoft.Bot.Builder.Azure.Tests/CosmosDbPartitionedStorageTests.cs b/tests/Microsoft.Bot.Builder.Azure.Tests/CosmosDbPartitionedStorageTests.cs index a72cd51bad..f16b197a5c 100644 --- a/tests/Microsoft.Bot.Builder.Azure.Tests/CosmosDbPartitionedStorageTests.cs +++ b/tests/Microsoft.Bot.Builder.Azure.Tests/CosmosDbPartitionedStorageTests.cs @@ -44,11 +44,12 @@ public void ConstructorValidation() CosmosDbEndpoint = null, })); - // No Auth Key. Should throw. + // No Auth Key or TokenCredential. Should throw. Assert.Throws(() => new CosmosDbPartitionedStorage(new CosmosDbPartitionedStorageOptions() { CosmosDbEndpoint = "CosmosDbEndpoint", AuthKey = null, + TokenCredential = null })); // No Database Id. Should throw.