@@ -203,31 +203,55 @@ func (r *Resolver) ResolveEndpoint(_ context.Context, params s3v2.EndpointParame
203203 return transport.Endpoint {URI : u }, nil
204204}
205205
206- func GetS3BucketBasicsClient (ctx context.Context , region string , accessKey , secretKey string , endpointUrl string ) (BucketBasics , error ) {
207- cfg , err := config .LoadDefaultConfig (ctx , config .WithCredentialsProvider (credentialsv2 .NewStaticCredentialsProvider (accessKey , secretKey , "" )))
208- if err != nil {
209- return BucketBasics {}, err
206+ func getS3DefaultSDKConfig (ctx context.Context , region , accessKey , secretKey , endpointUrl string ) (s3Cfg awsv2.Config , err error ) {
207+ if len (endpointUrl ) != 0 && len (region ) == 0 {
208+ // case handled for minio
209+ region = "us-east-1"
210+ s3Cfg = awsv2.Config {Region : region }
211+ return s3Cfg , nil
210212 }
211- sdkConfig := awsv2.Config {Region : region }
212- sdkConfig .Credentials = cfg .Credentials
213- var s3Client * s3v2.Client
214- if len (endpointUrl ) > 0 {
215- if len (region ) == 0 {
216- region = "us-east-1" //for minio
217- sdkConfig = awsv2.Config {Region : region }
213+ var cfg awsv2.Config
214+ if len (accessKey ) == 0 || len (secretKey ) == 0 {
215+ // case handled for S3 IAM role
216+ cfg , err = config .LoadDefaultConfig (ctx , config .WithRegion (region ))
217+ if err != nil {
218+ return awsv2.Config {}, err
218219 }
219- endpointURL , err := url .Parse (endpointUrl )
220+ } else {
221+ // case handled for S3 with access key and secret key
222+ cfg , err = config .LoadDefaultConfig (ctx , config .WithCredentialsProvider (credentialsv2 .NewStaticCredentialsProvider (accessKey , secretKey , "" )))
223+ if err != nil {
224+ return awsv2.Config {}, err
225+ }
226+ }
227+ s3Cfg = awsv2.Config {Region : region , Credentials : cfg .Credentials }
228+ return s3Cfg , nil
229+ }
230+
231+ func getS3Client (s3Cfg awsv2.Config , endpointUrl string ) (s3Client * s3v2.Client , err error ) {
232+ if len (endpointUrl ) > 0 {
233+ parsedEndpointUrl , err := url .Parse (endpointUrl )
220234 if err != nil {
221- return BucketBasics {} , err
235+ return s3Client , err
222236 }
223- s3Client = s3v2 .NewFromConfig (sdkConfig , func (o * s3v2.Options ) {
237+ return s3v2 .NewFromConfig (s3Cfg , func (o * s3v2.Options ) {
224238 o .UsePathStyle = true
225- o .EndpointResolverV2 = & Resolver {URL : endpointURL }
226- })
239+ o .EndpointResolverV2 = & Resolver {URL : parsedEndpointUrl }
240+ }), nil
227241 } else {
228- s3Client = s3v2 .NewFromConfig (sdkConfig )
242+ return s3v2 .NewFromConfig (s3Cfg ), nil
229243 }
244+ }
230245
246+ func GetS3BucketBasicsClient (ctx context.Context , region , accessKey , secretKey , endpointUrl string ) (BucketBasics , error ) {
247+ s3Cfg , err := getS3DefaultSDKConfig (ctx , region , accessKey , secretKey , endpointUrl )
248+ if err != nil {
249+ return BucketBasics {}, err
250+ }
251+ s3Client , err := getS3Client (s3Cfg , endpointUrl )
252+ if err != nil {
253+ return BucketBasics {}, err
254+ }
231255 bucketBasics := BucketBasics {S3Client : s3Client }
232256 return bucketBasics , nil
233257}
0 commit comments