package media import ( "context" "errors" "git.agecem.com/agecem/agecem-org/config" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" "github.com/spf13/viper" ) func NewMediaClient(endpoint, accessKeyId, secretAccessKey string, useSSL bool) (*MediaClient, error) { if accessKeyId == "" { return nil, errors.New("accessKeyId was found empty, but cannot be") } if secretAccessKey == "" { return nil, errors.New("secretAccessKey was found empty, but cannot be") } var mediaClient MediaClient minioClient, err := minio.New(endpoint, &minio.Options{ Creds: credentials.NewStaticV4(accessKeyId, secretAccessKey, ""), Secure: useSSL, }) if err != nil { return &mediaClient, err } mediaClient.MinioClient = *minioClient return &mediaClient, nil } func NewMediaClientFromViper() (*MediaClient, error) { var cfg config.Config if err := viper.Unmarshal(&cfg); err != nil { return nil, err } mediaClient, err := NewMediaClient(cfg.Server.Documents.Endpoint, cfg.Server.Documents.AccessKeyId, cfg.Server.Documents.SecretAccessKey, cfg.Server.Documents.UseSSL) if err != nil { return mediaClient, err } return mediaClient, nil } type MediaClient struct { MinioClient minio.Client } func (m *MediaClient) Seed() ([]string, error) { var cfg config.Config if err := viper.Unmarshal(&cfg); err != nil { return nil, err } var new_buckets []string for _, bucket := range cfg.Server.Documents.Buckets { exists, err := m.MinioClient.BucketExists(context.Background(), bucket) if err != nil { return new_buckets, err } if exists { continue } if err = m.MinioClient.MakeBucket(context.Background(), bucket, minio.MakeBucketOptions{}); err != nil { return new_buckets, err } new_buckets = append(new_buckets, bucket) } return new_buckets, nil }