123 lines
2.7 KiB
Go
123 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"gitea.pena/PenaSide/common/validate"
|
|
"gitea.pena/PenaSide/heruvym/internal/initialize"
|
|
minioDal "gitea.pena/PenaSide/heruvym/internal/repository/minio"
|
|
"github.com/caarlos0/env/v8"
|
|
"github.com/minio/minio-go/v7"
|
|
"github.com/pioz/faker"
|
|
"log"
|
|
)
|
|
|
|
func main() {
|
|
cfg, err := loadConfig()
|
|
if err != nil {
|
|
log.Fatalf("error loading config: %v", err)
|
|
}
|
|
|
|
if cfg.ClientHttpUrl == "" {
|
|
log.Fatalf("error client http url is empty")
|
|
}
|
|
|
|
if cfg.AdminHttpUrl == "" {
|
|
log.Fatalf("error admin http url is empty")
|
|
}
|
|
|
|
//err = validate.ValidateMongo(cfg.ExternalCfg.Database)
|
|
//if err != nil {
|
|
// log.Fatalf("error validating mongo: %v", err)
|
|
//}
|
|
|
|
err = validate.ValidateTgToken(cfg.TelegramToken)
|
|
if err != nil {
|
|
log.Fatalf("error validating telegram token: %v", err)
|
|
}
|
|
|
|
if cfg.TelegramChannelID == 0 {
|
|
log.Fatalf("telegram channel id must be set")
|
|
}
|
|
|
|
err = validateRedis(cfg)
|
|
if err != nil {
|
|
log.Fatalf("error validating redis: %v", err)
|
|
}
|
|
|
|
err = validateS3(cfg)
|
|
if err != nil {
|
|
log.Fatalf("error validating s3: %v", err)
|
|
}
|
|
}
|
|
|
|
func loadConfig() (initialize.Config, error) {
|
|
var config initialize.Config
|
|
if err := env.Parse(&config); err != nil {
|
|
return config, err
|
|
}
|
|
|
|
return config, nil
|
|
}
|
|
|
|
func validateRedis(cfg initialize.Config) error {
|
|
if cfg.RedisHost == "" {
|
|
return fmt.Errorf("redis host is empty")
|
|
}
|
|
|
|
_, err := initialize.Redis(context.TODO(), cfg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func validateS3(cfg initialize.Config) error {
|
|
if cfg.S3Endpoint == "" {
|
|
return fmt.Errorf("s3 endpoint is empty")
|
|
}
|
|
if cfg.S3AccessKey == "" {
|
|
return fmt.Errorf("s3 access key is empty")
|
|
}
|
|
if cfg.S3SecretKey == "" {
|
|
return fmt.Errorf("s3 secret key is empty")
|
|
}
|
|
|
|
ctx := context.TODO()
|
|
|
|
client, err := initialize.Minio(cfg)
|
|
if err != nil {
|
|
return fmt.Errorf("error connect s3 in validate: %w", err)
|
|
}
|
|
|
|
objectName := faker.String()
|
|
content := []byte(faker.String())
|
|
contentType := "text/plain"
|
|
|
|
exist, err := client.BucketExists(ctx, minioDal.Bucket)
|
|
if err != nil {
|
|
return fmt.Errorf("error find s3 bucket in validate: %w", err)
|
|
}
|
|
|
|
// не создаем бакет так как бакет могут не дать создать
|
|
if !exist {
|
|
log.Println("bucket does not exist")
|
|
return nil
|
|
}
|
|
|
|
_, err = client.PutObject(ctx, minioDal.Bucket, objectName,
|
|
bytes.NewReader(content), int64(len(content)),
|
|
minio.PutObjectOptions{ContentType: contentType})
|
|
if err != nil {
|
|
return fmt.Errorf("error create test object: %w", err)
|
|
}
|
|
|
|
err = client.RemoveObject(ctx, minioDal.Bucket, objectName, minio.RemoveObjectOptions{})
|
|
if err != nil {
|
|
return fmt.Errorf("error remove test object: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|