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 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://") } ); }