32 lines
1.1 KiB
C#
32 lines
1.1 KiB
C#
using System.Collections.Concurrent;
|
|
using Amazon.IdentityManagement;
|
|
using Amazon.Runtime;
|
|
using InnovEnergy.Lib.S3Utils.DataTypes;
|
|
using InnovEnergy.Lib.Utils;
|
|
|
|
namespace InnovEnergy.Lib.S3Utils;
|
|
|
|
public static class Iam
|
|
{
|
|
|
|
// TODO
|
|
|
|
private static readonly ConcurrentDictionary<S3Region, AmazonIdentityManagementServiceClient> AimClientCache = new();
|
|
|
|
public static AmazonIdentityManagementServiceClient GetIamClient(this S3Url url ) => url.Bucket.GetIamClient();
|
|
public static AmazonIdentityManagementServiceClient GetIamClient(this S3Bucket bucket) => bucket.Region.GetIamClient();
|
|
public static AmazonIdentityManagementServiceClient GetIamClient(this S3Region region)
|
|
{
|
|
return AimClientCache.GetOrAdd(region, CreateIamClient); // Memoize
|
|
}
|
|
|
|
private static AmazonIdentityManagementServiceClient CreateIamClient(S3Region region) => new
|
|
(
|
|
credentials: new BasicAWSCredentials(region.Credentials.Key, region.Credentials.Secret),
|
|
clientConfig: new() { ServiceURL = StringUtils.EnsureStartsWith(region.Name, "https://") }
|
|
);
|
|
|
|
|
|
|
|
|
|
} |