Refactor S3 client initialization to streamline configuration and add public read policy setup; improve error handling for bucket policy application
All checks were successful
CI - Build and Push / Build and Push Docker Image (push) Successful in 53s

This commit is contained in:
2025-10-26 07:03:35 +08:00
parent efc20ac1ab
commit 28fb0ca1c8

View File

@@ -49,12 +49,7 @@ func initDatabase(dbConfig config.DatabaseConfig) *sql.DB {
}
func initS3Client(s3Config config.S3Config) *s3.Client {
var cfg aws.Config
var err error
if s3Config.Endpoint != "" {
// Custom endpoint (e.g., MinIO)
cfg, err = awsconfig.LoadDefaultConfig(context.Background(),
cfg, err := awsconfig.LoadDefaultConfig(context.Background(),
awsconfig.WithRegion(s3Config.Region),
awsconfig.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(
s3Config.AccessKeyID,
@@ -65,24 +60,38 @@ func initS3Client(s3Config config.S3Config) *s3.Client {
if err != nil {
panic(err)
}
return s3.NewFromConfig(cfg, func(o *s3.Options) {
client := s3.NewFromConfig(cfg, func(o *s3.Options) {
o.BaseEndpoint = aws.String(s3Config.Endpoint)
o.UsePathStyle = true
})
// Set bucket policy for public read access
setBucketPublicReadPolicy(client, s3Config.Bucket)
return client
}
// Standard AWS S3
cfg, err = awsconfig.LoadDefaultConfig(context.Background(),
awsconfig.WithRegion(s3Config.Region),
awsconfig.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(
s3Config.AccessKeyID,
s3Config.SecretAccessKey,
"",
)),
)
func setBucketPublicReadPolicy(client *s3.Client, bucket string) {
policy := `{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::` + bucket + `/*"
}
]
}`
_, err := client.PutBucketPolicy(context.Background(), &s3.PutBucketPolicyInput{
Bucket: aws.String(bucket),
Policy: aws.String(policy),
})
if err != nil {
panic(err)
// Log error but don't panic - bucket might already have the policy
// or the user might not have permission to set policies
println("Warning: Failed to set bucket policy:", err.Error())
}
return s3.NewFromConfig(cfg)
}