diff --git a/src/AzureAppConfigurationEmulator/Authentication/Hmac/HmacAuthenticatingHttpMessageHandler.cs b/src/AzureAppConfigurationEmulator/Authentication/Hmac/HmacAuthenticatingHttpMessageHandler.cs index aa122c7..c8f69c3 100644 --- a/src/AzureAppConfigurationEmulator/Authentication/Hmac/HmacAuthenticatingHttpMessageHandler.cs +++ b/src/AzureAppConfigurationEmulator/Authentication/Hmac/HmacAuthenticatingHttpMessageHandler.cs @@ -36,6 +36,8 @@ private static async Task ComputeContentHash( if (request.Content is not null) { await request.Content.CopyToAsync(stream, cancellationToken); + + stream.Position = 0; } using var sha256 = SHA256.Create(); diff --git a/src/AzureAppConfigurationEmulator/Common/ConfigurationClient.cs b/src/AzureAppConfigurationEmulator/Common/ConfigurationClient.cs index 4057da5..1629d01 100644 --- a/src/AzureAppConfigurationEmulator/Common/ConfigurationClient.cs +++ b/src/AzureAppConfigurationEmulator/Common/ConfigurationClient.cs @@ -127,4 +127,24 @@ public async IAsyncEnumerable GetKeys( } } while (link is { Next: not null }); } + + public async Task SetConfigurationSetting( + ConfigurationSetting setting, + CancellationToken cancellationToken = default) + { + using var activity = Telemetry.ActivitySource.StartActivity($"{nameof(ConfigurationClient)}.{nameof(SetConfigurationSetting)}"); + + var uri = new Uri($"/kv/{Uri.EscapeDataString(setting.Key)}?label={Uri.EscapeDataString(setting.Label ?? LabelFilter.Null)}&api-version=1.0", UriKind.Relative); + + using var request = new HttpRequestMessage(HttpMethod.Put, uri); + request.Content = JsonContent.Create(new + { + value = setting.Value, + content_type = setting.ContentType, + tags = setting.Tags + }); + + using var response = await httpClient.SendAsync(request, cancellationToken); + response.EnsureSuccessStatusCode(); + } } diff --git a/src/AzureAppConfigurationEmulator/Common/IConfigurationClient.cs b/src/AzureAppConfigurationEmulator/Common/IConfigurationClient.cs index 186b5fa..1e9b6c4 100644 --- a/src/AzureAppConfigurationEmulator/Common/IConfigurationClient.cs +++ b/src/AzureAppConfigurationEmulator/Common/IConfigurationClient.cs @@ -15,4 +15,8 @@ public IAsyncEnumerable GetKeys( public IAsyncEnumerable GetLabels( CancellationToken cancellationToken = default); + + public Task SetConfigurationSetting( + ConfigurationSetting setting, + CancellationToken cancellationToken = default); } diff --git a/src/AzureAppConfigurationEmulator/Components/ImportExportTargetTypeInputSelect.razor b/src/AzureAppConfigurationEmulator/Components/ImportExportTargetTypeInputSelect.razor index d9c536f..9fd7124 100644 --- a/src/AzureAppConfigurationEmulator/Components/ImportExportTargetTypeInputSelect.razor +++ b/src/AzureAppConfigurationEmulator/Components/ImportExportTargetTypeInputSelect.razor @@ -2,7 +2,7 @@ - + diff --git a/src/AzureAppConfigurationEmulator/Components/Pages/ImportExport.razor b/src/AzureAppConfigurationEmulator/Components/Pages/ImportExport.razor index 5d4c900..cb098fa 100644 --- a/src/AzureAppConfigurationEmulator/Components/Pages/ImportExport.razor +++ b/src/AzureAppConfigurationEmulator/Components/Pages/ImportExport.razor @@ -27,7 +27,7 @@ { case ImportExportOperationInputRadioGroup.Operation.Export:
- +