-
-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathFactory.cs
217 lines (200 loc) · 8.58 KB
/
Factory.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
using Amazon;
using Amazon.Runtime;
using Amazon.S3;
using FluentStorage.AWS.Messaging;
using FluentStorage.AWS.Blobs;
using FluentStorage.Blobs;
using FluentStorage.Messaging;
using FluentStorage.AWS;
using FluentStorage.ConnectionString;
using Amazon.S3.Transfer;
namespace FluentStorage {
/// <summary>
/// Factory class that implement factory methods for Amazon AWS implementation
/// </summary>
public static class Factory {
/// <summary>
/// Register Azure module.
/// </summary>
public static IModulesFactory UseAwsStorage(this IModulesFactory factory) {
return factory.Use(new AwsStorageModule());
}
/// <summary>
/// Creates an Amazon S3 storage using assumed role permissions (useful when running the code wform within ECS tasks or lambda where you don't need to provide and manage accessKeys and secrets as the permissions are assumed via the IAM role the lambda or ecs tasks has assigned to it)
/// </summary>
/// <param name="factory">Factory reference</param>
/// <param name="bucketName">Bucket name</param>
/// <param name="region">Required regional endpoint.</param>
/// <returns>A reference to the created storage</returns>
public static IBlobStorage AwsS3(this IBlobStorageFactory factory,
string bucketName,
string region) {
return new AwsS3BlobStorage(bucketName, region);
}
/// <summary>
/// Creates an Amazon S3 storage
/// </summary>
/// <param name="factory">Factory reference</param>
/// <param name="accessKeyId">Access key ID</param>
/// <param name="secretAccessKey">Secret access key</param>
/// /// <param name="sessionToken">Optional. Only required when using session credentials.</param>
/// <param name="bucketName">Bucket name</param>
/// <param name="region">Region endpoint</param>
/// <param name="serviceUrl">S3-compatible service location</param>
/// <returns>A reference to the created storage</returns>
public static IBlobStorage AwsS3(this IBlobStorageFactory factory,
string accessKeyId,
string secretAccessKey,
string sessionToken,
string bucketName,
string region,
string serviceUrl = null) {
return new AwsS3BlobStorage(accessKeyId, secretAccessKey, sessionToken, bucketName, region, serviceUrl);
}
/// <summary>
/// Creates an Amazon S3 storage provider for a custom S3-compatible storage server
/// </summary>
/// <param name="factory">Factory reference</param>
/// <param name="accessKeyId">Access key ID</param>
/// <param name="secretAccessKey">Secret access key</param>
/// <param name="sessionToken">Optional. Only required when using session credentials.</param>
/// <param name="bucketName">Bucket name</param>
/// <param name="clientConfig">S3 client configuration</param>
/// <param name="transferUtilityConfig">S3 transfer utility configuration</param>
/// <returns>A reference to the created storage</returns>
public static IBlobStorage AwsS3(this IBlobStorageFactory factory,
string accessKeyId,
string secretAccessKey,
string sessionToken,
string bucketName,
AmazonS3Config clientConfig,
TransferUtilityConfig transferUtilityConfig = null) {
return new AwsS3BlobStorage(accessKeyId, secretAccessKey, sessionToken, bucketName, clientConfig, transferUtilityConfig);
}
#if !NET16
/// <summary>
/// Creates an Amazon S3 storage provider using credentials from AWS CLI configuration file (~/.aws/credentials)
/// </summary>
/// <param name="factory">Factory reference</param>
/// <param name="awsCliProfileName"></param>
/// <param name="bucketName">Bucket name</param>
/// <param name="region"></param>
/// <returns>A reference to the created storage</returns>
public static IBlobStorage AwsS3(this IBlobStorageFactory factory,
string awsCliProfileName,
string bucketName,
string region) {
return AwsS3BlobStorage.FromAwsCliProfile(awsCliProfileName, bucketName, region);
}
/// <summary>
/// Creates an Amazon S3 storage provider using credentials retrieved from SSO.
/// </summary>
/// <param name="factory">Factory reference</param>
/// <param name="credentials"></param>
/// <param name="bucketName">Bucket name</param>
/// <param name="region"></param>
/// <returns>A reference to the created storage</returns>
public static IBlobStorage AwsS3(this IBlobStorageFactory factory,
AWSCredentials credentials,
string bucketName,
string region) {
return AwsS3BlobStorage.FromAwsCredentials(credentials, bucketName, region);
}
#endif
/// <summary>
/// Creates an DigitalOcean Spaces storage provider (S3-compatible).
/// </summary>
/// <param name="accessKeyId">Access key ID</param>
/// <param name="secretAccessKey">Secret access key</param>
/// <param name="bucketName">Bucket name</param>
/// <param name="digitalOceanRegion">DigitalOcean Region endpoint (like "nyc3")</param>
/// <param name="sessionToken">Optional. Only required when using session credentials.</param>
/// <returns>A reference to the created storage</returns>
public static IBlobStorage DigitalOceanSpaces(this IBlobStorageFactory factory,
string accessKeyId,
string secretAccessKey,
string bucketName,
string digitalOceanRegion,
string sessionToken = null) {
return AwsS3BlobStorage.FromDigitalOcean(accessKeyId, secretAccessKey, bucketName, digitalOceanRegion, sessionToken);
}
/// <summary>
/// Creates an MinIO storage provider (S3-compatible).
/// </summary>
/// <param name="accessKeyId">Access key ID</param>
/// <param name="secretAccessKey">Secret access key</param>
/// <param name="bucketName">Bucket name</param>
/// <param name="awsRegion">AWS Region name (like "us-east-1")</param>
/// <param name="minioServerUrl">MinIO Server URL</param>
/// <param name="sessionToken">Optional. Only required when using session credentials.</param>
/// <returns>A reference to the created storage</returns>
public static IBlobStorage MinIO(this IBlobStorageFactory factory,
string accessKeyId,
string secretAccessKey,
string bucketName,
string awsRegion,
string minioServerUrl,
string sessionToken = null) {
return AwsS3BlobStorage.FromMinIO(accessKeyId, secretAccessKey, bucketName, awsRegion, minioServerUrl, sessionToken);
}
/// <summary>
/// Creates an Wasabi storage provider (S3-compatible).
/// </summary>
/// <param name="accessKeyId">Access key ID</param>
/// <param name="secretAccessKey">Secret access key</param>
/// <param name="bucketName">Bucket name</param>
/// <param name="wasabiServiceUrl">Wasabi Service URL endpoint (like "https://s3.wasabisys.com")</param>
/// <param name="sessionToken">Optional. Only required when using session credentials.</param>
/// <returns>A reference to the created storage</returns>
public static IBlobStorage Wasabi(this IBlobStorageFactory factory,
string accessKeyId,
string secretAccessKey,
string bucketName,
string wasabiServiceUrl,
string sessionToken = null) {
return AwsS3BlobStorage.FromWasabi(accessKeyId, secretAccessKey, bucketName, wasabiServiceUrl, sessionToken);
}
/// <summary>
/// Creates Amazon Simple Queue Service publisher
/// </summary>
/// <param name="factory"></param>
/// <param name="accessKeyId">Access key ID</param>
/// <param name="secretAccessKey">Secret access key</param>
/// <param name="serviceUrl"></param>
/// <param name="regionEndpoint"></param>
/// <returns></returns>
public static IMessenger AwsSQS(this IMessagingFactory factory,
string accessKeyId,
string secretAccessKey,
string serviceUrl,
RegionEndpoint regionEndpoint = null) {
return new AwsSQSMessenger(accessKeyId, secretAccessKey, serviceUrl, regionEndpoint);
}
#region [ Connection Strings ]
/// <summary>
/// Creates a connection string from AWS CLI profile name
/// </summary>
/// <param name="factory"></param>
/// <param name="profileName"></param>
/// <param name="bucketName"></param>
/// <param name="region"></param>
/// <returns></returns>
public static StorageConnectionString ForAwsS3FromCliProfile(this IConnectionStringFactory factory,
string profileName,
string bucketName,
string region) {
if (profileName is null)
throw new System.ArgumentNullException(nameof(profileName));
if (bucketName is null)
throw new System.ArgumentNullException(nameof(bucketName));
if (region is null)
throw new System.ArgumentNullException(nameof(region));
var cs = new StorageConnectionString(KnownPrefix.AwsS3 + "://");
cs[KnownParameter.LocalProfileName] = profileName;
cs[KnownParameter.BucketName] = bucketName;
cs[KnownParameter.Region] = region;
return cs;
}
#endregion
}
}