Skip to content

Commit b3fa48e

Browse files
authored
Update Azure Data Protection (#18089)
1 parent eb12782 commit b3fa48e

File tree

6 files changed

+21
-21
lines changed

6 files changed

+21
-21
lines changed

Directory.Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<PackageVersion Include="Azure.Communication.Email" Version="1.0.1" />
1111
<PackageVersion Include="Azure.Communication.Sms" Version="1.0.1" />
1212
<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.4.0" />
13-
<PackageVersion Include="Azure.Extensions.AspNetCore.DataProtection.Blobs" Version="1.5.0" />
13+
<PackageVersion Include="Azure.Extensions.AspNetCore.DataProtection.Blobs" Version="1.5.1" />
1414
<PackageVersion Include="Azure.Identity" Version="1.14.0" />
1515
<PackageVersion Include="Azure.Search.Documents" Version="11.6.1" />
1616
<PackageVersion Include="Azure.Storage.Blobs" Version="12.24.1" />

src/OrchardCore.Modules/OrchardCore.DataProtection.Azure/BlobModularTenantEvents.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using Azure.Storage.Blobs;
22
using Microsoft.Extensions.Logging;
3-
using Microsoft.Extensions.Options;
43
using OrchardCore.Environment.Shell.Removing;
54
using OrchardCore.Modules;
65

@@ -15,10 +14,10 @@ internal sealed class BlobModularTenantEvents : ModularTenantEvents
1514
private readonly ILogger _logger;
1615

1716
public BlobModularTenantEvents(
18-
IOptions<BlobOptions> blobOptions,
17+
BlobOptions blobOptions,
1918
ILogger<BlobModularTenantEvents> logger)
2019
{
21-
_blobOptions = blobOptions.Value;
20+
_blobOptions = blobOptions;
2221
_logger = logger;
2322
}
2423

src/OrchardCore.Modules/OrchardCore.DataProtection.Azure/BlobOptions.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
using Microsoft.Extensions.Options;
2+
13
namespace OrchardCore.DataProtection.Azure;
24

3-
public class BlobOptions
5+
public class BlobOptions : IAsyncOptions
46
{
57
public string ConnectionString { get; set; }
68

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace OrchardCore.DataProtection.Azure;
1111

12-
internal sealed class BlobOptionsConfiguration : IConfigureOptions<BlobOptions>
12+
public sealed class BlobOptionsSetup : IAsyncConfigureOptions<BlobOptions>
1313
{
1414
private readonly FluidParser _fluidParser = new();
1515

@@ -18,28 +18,28 @@ internal sealed class BlobOptionsConfiguration : IConfigureOptions<BlobOptions>
1818
private readonly ShellSettings _shellSettings;
1919
private readonly ILogger _logger;
2020

21-
public BlobOptionsConfiguration(
21+
public BlobOptionsSetup(
2222
IShellConfiguration configuration,
2323
IOptions<ShellOptions> shellOptions,
2424
ShellSettings shellSettings,
25-
ILogger<BlobOptionsConfiguration> logger)
25+
ILogger<BlobOptionsSetup> logger)
2626
{
2727
_configuration = configuration;
2828
_shellOptions = shellOptions.Value;
2929
_shellSettings = shellSettings;
3030
_logger = logger;
3131
}
3232

33-
public void Configure(BlobOptions options)
33+
public async ValueTask ConfigureAsync(BlobOptions options)
3434
{
3535
_logger.LogDebug("Configuring BlobOptions in BlobOptionsSetup");
3636

3737
_configuration.Bind("OrchardCore_DataProtection_Azure", options);
38-
ConfigureContainerName(options);
39-
ConfigureBlobName(options);
38+
await ConfigureContainerNameAsync(options);
39+
await ConfigureBlobNameAsync(options);
4040
}
4141

42-
private void ConfigureContainerName(BlobOptions options)
42+
private async ValueTask ConfigureContainerNameAsync(BlobOptions options)
4343
{
4444
_logger.LogDebug("Configuring BlobOptions.ContainerName in BlobOptionsSetup");
4545

@@ -54,7 +54,7 @@ private void ConfigureContainerName(BlobOptions options)
5454
var template = _fluidParser.Parse(options.ContainerName);
5555

5656
// Container name must be lowercase.
57-
var containerName = template.Render(templateContext, NullEncoder.Default).ToLowerInvariant();
57+
var containerName = (await template.RenderAsync(templateContext, NullEncoder.Default)).ToLowerInvariant();
5858
options.ContainerName = containerName.Replace("\r", string.Empty).Replace("\n", string.Empty);
5959

6060
if (_logger.IsEnabled(LogLevel.Debug))
@@ -74,7 +74,7 @@ private void ConfigureContainerName(BlobOptions options)
7474
{
7575
_logger.LogDebug("Testing data protection container {ContainerName} existence", options.ContainerName);
7676
var blobContainer = new BlobContainerClient(options.ConnectionString, options.ContainerName);
77-
var response = blobContainer.CreateIfNotExistsAsync(PublicAccessType.None).GetAwaiter().GetResult();
77+
var response = await blobContainer.CreateIfNotExistsAsync(PublicAccessType.None);
7878
_logger.LogDebug("Data protection container {ContainerName} created.", options.ContainerName);
7979
}
8080
catch (Exception e)
@@ -85,7 +85,7 @@ private void ConfigureContainerName(BlobOptions options)
8585
}
8686
}
8787

88-
private void ConfigureBlobName(BlobOptions options)
88+
private async ValueTask ConfigureBlobNameAsync(BlobOptions options)
8989
{
9090
_logger.LogDebug("Configuring BlobOptions.BlobName in BlobOptionsSetup");
9191

@@ -111,7 +111,7 @@ private void ConfigureBlobName(BlobOptions options)
111111

112112
var template = _fluidParser.Parse(options.BlobName);
113113

114-
var blobName = template.Render(templateContext, NullEncoder.Default);
114+
var blobName = await template.RenderAsync(templateContext, NullEncoder.Default);
115115
options.BlobName = blobName.Replace("\r", string.Empty).Replace("\n", string.Empty);
116116

117117
if (_logger.IsEnabled(LogLevel.Debug))

src/OrchardCore.Modules/OrchardCore.DataProtection.Azure/Startup.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using Microsoft.Extensions.Configuration;
44
using Microsoft.Extensions.DependencyInjection;
55
using Microsoft.Extensions.Logging;
6-
using Microsoft.Extensions.Options;
76
using OrchardCore.Environment.Shell.Configuration;
87
using OrchardCore.Modules;
98

@@ -35,10 +34,11 @@ public override void ConfigureServices(IServiceCollection services)
3534
}
3635

3736
services
37+
.Configure<BlobOptions, BlobOptionsSetup>()
3838
.AddDataProtection()
3939
.PersistKeysToAzureBlobStorage(sp =>
4040
{
41-
var options = sp.GetRequiredService<IOptions<BlobOptions>>().Value;
41+
var options = sp.GetRequiredService<BlobOptions>();
4242

4343
var logger = sp.GetRequiredService<ILogger<Startup>>();
4444

@@ -53,8 +53,6 @@ public override void ConfigureServices(IServiceCollection services)
5353
options.BlobName);
5454
});
5555

56-
services.AddSingleton<IConfigureOptions<BlobOptions>, BlobOptionsConfiguration>();
57-
5856
services.AddScoped<IModularTenantEvents, BlobModularTenantEvents>();
5957
}
6058
else

src/OrchardCore/OrchardCore.Abstractions/Shell/Builders/Extensions/IAsyncConfigureOptions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ namespace Microsoft.Extensions.Options;
33
/// <summary>
44
/// Used to configure asynchronously a type of options just after a tenant container is created.
55
/// </summary>
6-
public interface IAsyncConfigureOptions<TOptions> where TOptions : class, IAsyncOptions
6+
public interface IAsyncConfigureOptions<TOptions>
7+
where TOptions : class, IAsyncOptions
78
{
89
/// <summary>
910
/// Configures asynchronously an options instance.

0 commit comments

Comments
 (0)