Skip to content

Commit 20de03f

Browse files
committed
feature: experimental option DisablePayloadSigning
1 parent de0c0e8 commit 20de03f

File tree

4 files changed

+56
-1
lines changed

4 files changed

+56
-1
lines changed

src/Umbraco.Community.FileSystemProviders.B2.TestSite/appsettings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
"Credentials": {
2121
"ApplicationKey": "test-key",
2222
"KeyId": "test-id"
23+
},
24+
"Experimental": {
25+
"DisablePayloadSigning": true
2326
}
2427
}
2528
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using Amazon.S3;
2+
using Amazon.S3.Model;
3+
using Microsoft.AspNetCore.StaticFiles;
4+
using Microsoft.Extensions.Logging;
5+
using Microsoft.Extensions.Options;
6+
using Our.Umbraco.StorageProviders.AWSS3.IO;
7+
using Our.Umbraco.StorageProviders.AWSS3.Services;
8+
using Umbraco.Cms.Core.Hosting;
9+
using Umbraco.Community.FileSystemProviders.B2.Models;
10+
11+
namespace Umbraco.Community.FileSystemProviders.B2;
12+
13+
public class B2AWSS3FileSystem(
14+
IOptions<B2Options> b2Options,
15+
AWSS3FileSystemOptions options,
16+
IHostingEnvironment hostingEnvironment,
17+
IContentTypeProvider contentTypeProvider,
18+
ILogger<AWSS3FileSystem> logger,
19+
IMimeTypeResolver mimeTypeResolver,
20+
IAmazonS3 s3Client)
21+
: AWSS3FileSystem(options, hostingEnvironment, contentTypeProvider, logger, mimeTypeResolver, s3Client)
22+
{
23+
protected override T Execute<T>(Func<IAmazonS3, T> func)
24+
{
25+
if (!b2Options.Value.Experimental.DisablePayloadSigning)
26+
{
27+
return base.Execute(func);
28+
}
29+
30+
if (func is Func<IAmazonS3, Task<PutObjectResponse>> putObjectFunc)
31+
{
32+
var target = putObjectFunc.Target;
33+
var requestProperty = target?.GetType().GetField("request");
34+
if (requestProperty != null)
35+
{
36+
if (requestProperty.GetValue(target) is PutObjectRequest request)
37+
{
38+
request.DisablePayloadSigning = true;
39+
}
40+
}
41+
}
42+
43+
return base.Execute(func);
44+
}
45+
}

src/Umbraco.Community.FileSystemProviders.B2/B2FileSystemFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ namespace Umbraco.Community.FileSystemProviders.B2;
88
public class B2FileSystemFactory(AmazonS3Client client, IServiceProvider serviceProvider)
99
{
1010
public IAWSS3FileSystem Create(AWSS3FileSystemOptions options) =>
11-
ActivatorUtilities.CreateInstance<AWSS3FileSystem>(serviceProvider, new FileExtensionContentTypeProvider(), options, client);
11+
ActivatorUtilities.CreateInstance<B2AWSS3FileSystem>(serviceProvider, new FileExtensionContentTypeProvider(), options, client);
1212
}

src/Umbraco.Community.FileSystemProviders.B2/Models/B2Options.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,11 @@ public class B2Options
1414
public bool Enabled => !string.IsNullOrWhiteSpace(BucketName) && !string.IsNullOrWhiteSpace(ServiceUrl) && (Credentials?.Valid ?? false);
1515

1616
public AWSCredentials ToCredentials() => new BasicAWSCredentials(Credentials?.KeyId, Credentials?.ApplicationKey);
17+
18+
public ExperimentalOptions Experimental { get; set; } = new();
19+
20+
public class ExperimentalOptions
21+
{
22+
public bool DisablePayloadSigning { get; set; }
23+
}
1724
}

0 commit comments

Comments
 (0)