package main import ( "bytes" "context" "fmt" "gitea.pena/PenaSide/common/validate" "gitea.pena/PenaSide/verification/internal/config" "gitea.pena/PenaSide/verification/internal/repository" "github.com/caarlos0/env/v8" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" "github.com/pioz/faker" "log" ) func main() { cfg, err := loadConfig() if err != nil { log.Fatalf("error loading config: %v", err) } err = validateNotEmpty(cfg) if err != nil { log.Fatalf("error validating config: %v", err) } err = validateS3(cfg) if err != nil { log.Fatalf("error validating s3: %v", err) } if err = validate.ValidateTgToken(cfg.TelegramToken); err != nil { log.Fatalf("error validating telegram token: %v", err) } if err = validate.ValidateMongo(cfg.ExternalCfg.Database); err != nil { log.Fatalf("error validating mongodb: %v", err) } } func loadConfig() (config.Config, error) { var cfg config.Config if err := env.Parse(&cfg); err != nil { return cfg, err } return cfg, nil } func validateNotEmpty(cfg config.Config) error { if cfg.TelegramChannelID == 0 { return fmt.Errorf("TelegramChannelID is empty") } if cfg.ClientHttpURL == "" { return fmt.Errorf("ClientHttpURL is empty") } if cfg.AdminHttpURL == "" { return fmt.Errorf("AdminHttpURL is empty") } if cfg.CustomerMicroserviceRPCURL == "" { return fmt.Errorf("CustomerMicroserviceRPCURL is empty") } if cfg.TrashLogHost == "" { return fmt.Errorf("TrashLogHost is empty") } if cfg.VerificationMicroserviceURL == "" { return fmt.Errorf("VerificationMicroserviceURL is empty") } return nil } func validateS3(cfg config.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 := minio.New(cfg.S3Endpoint, &minio.Options{ Creds: credentials.NewStaticV4(cfg.S3AccessKey, cfg.S3SecretKey, ""), Secure: true, }) if err != nil { return fmt.Errorf("error creating minio client: %v", err) } objectName := faker.String() content := []byte(faker.String()) contentType := "text/plain" exist, err := client.BucketExists(ctx, repository.VerificationBucket) 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, repository.VerificationBucket, 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, repository.VerificationBucket, objectName, minio.RemoveObjectOptions{}) if err != nil { return fmt.Errorf("error remove test object: %w", err) } return nil }