Paperclip/pkg/filekit/models/destination.go
2025-03-30 21:28:24 +08:00

55 lines
1.4 KiB
Go

package models
import (
pkg "git.solsynth.dev/hypernet/paperclip/pkg/internal"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
)
const (
DestinationTypeLocal = "local"
DestinationTypeS3 = "s3"
)
type BaseDestination struct {
ID int `json:"id,omitempty"` // Auto filled with index, only for user
Type string `json:"type"`
Label string `json:"label"`
Region string `json:"region"`
IsBoost bool `json:"is_boost"`
}
type LocalDestination struct {
BaseDestination
Path string `json:"path"`
AccessBaseURL string `json:"access_baseurl"`
}
type S3Destination struct {
BaseDestination
Path string `json:"path"`
Bucket string `json:"bucket"`
Endpoint string `json:"endpoint"`
SecretID string `json:"secret_id"`
SecretKey string `json:"secret_key"`
AccessBaseURL string `json:"access_baseurl"`
ImageProxyURL string `json:"image_proxy_baseurl"`
EnableSSL bool `json:"enable_ssl"`
EnableSigned bool `json:"enable_signed"`
BucketLookup int `json:"bucket_lookup"`
}
func (v S3Destination) GetClient() (*minio.Client, error) {
client, err := minio.New(v.Endpoint, &minio.Options{
Creds: credentials.NewStaticV4(v.SecretID, v.SecretKey, ""),
Secure: v.EnableSSL,
BucketLookup: minio.BucketLookupType(v.BucketLookup),
})
if err == nil {
client.SetAppInfo("HyperNet.Paperclip", pkg.AppVersion)
}
return client, err
}