79 lines
1.6 KiB
Go
79 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/minio/minio-go/v7"
|
|
"github.com/minio/minio-go/v7/pkg/credentials"
|
|
)
|
|
|
|
const ENCRYPT_KEY_PATH = "_key.gpg"
|
|
|
|
func getMinio(config *S3Config) (*minio.Client, error) {
|
|
creds := credentials.NewStaticV4(config.AccessKey, config.SecretKey, "")
|
|
minioClient, err := minio.New(config.Endpoint, &minio.Options{
|
|
Creds: creds,
|
|
Secure: config.UseSSL,
|
|
Region: config.Region,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return minioClient, nil
|
|
}
|
|
|
|
func getInternalMinio(config *AppConfig) (*minio.Client, error) {
|
|
return getMinio(&config.LocalS3)
|
|
}
|
|
|
|
func getTargetMinio(config *AppConfig) (*minio.Client, error) {
|
|
return getMinio(&config.TargetS3)
|
|
}
|
|
|
|
func prepareKey(config *AppConfig, minioClient *minio.Client) error {
|
|
var err error
|
|
if _, err := os.Stat(config.Key.LocalPath); !os.IsNotExist(err) {
|
|
return nil
|
|
}
|
|
err = minioClient.FGetObject(
|
|
context.Background(),
|
|
config.Key.Bucket,
|
|
config.Key.Name,
|
|
ENCRYPT_KEY_PATH,
|
|
minio.GetObjectOptions{},
|
|
)
|
|
if err == nil {
|
|
config.Key.LocalPath = ENCRYPT_KEY_PATH
|
|
}
|
|
return err
|
|
}
|
|
|
|
func init_app() (*minio.Client, *minio.Client, *AppConfig) {
|
|
fmt.Println("initing...")
|
|
var err error
|
|
|
|
config := GetConfig()
|
|
|
|
var internalMinio *minio.Client
|
|
internalMinio, err = getInternalMinio(config)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
|
|
var targetMinio *minio.Client
|
|
targetMinio, err = getTargetMinio(config)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
|
|
err = prepareKey(config, targetMinio)
|
|
if err != nil {
|
|
fmt.Println("Unable to get public key from target S3")
|
|
log.Fatalln(err)
|
|
}
|
|
return internalMinio, targetMinio, config
|
|
}
|