codeword/cmd/validator/main.go

108 lines
2.4 KiB
Go
Raw Normal View History

2025-01-03 09:26:26 +00:00
package main
import (
"errors"
"fmt"
"gitea.pena/PenaSide/codeword/internal/initialize"
"gitea.pena/PenaSide/codeword/internal/utils/encrypt"
"gitea.pena/PenaSide/common/validate"
"github.com/caarlos0/env/v8"
"log"
)
func main() {
config, err := loadConfig()
if err != nil {
log.Fatalf("error loading config: %v", err)
}
urls := []string{
config.AuthMicroserviceURL,
config.DiscountMicroserviceGRPC,
config.TrashLogHost,
config.ExternalCfg.MailClientCfg.ApiURL,
config.DefaultRedirectionURL,
config.MailRecoveryURL,
}
if err = validateURLs(urls); err != nil {
log.Fatalf("error validating urls: %v", err)
}
if err = validateEncrypt(config); err != nil {
log.Fatalf("error validating encrypt: %v", err)
}
if err = validate.ValidateRedis(config.RedisHost, config.RedisPassword, config.RedisDB); err != nil {
log.Fatalf("error validating redis: %v", err)
}
if err = validate.ValidateKafka(config.KafkaBrokers, config.KafkaTopicTariff); err != nil {
log.Fatalf("error validating kafka: %v", err)
}
if err = validate.ValidateSmtp(config.ExternalCfg.MailClientCfg.ApiKey); err != nil {
log.Fatalf("error validating smtp: %v", err)
}
if err = validate.ValidateMongo(config.ExternalCfg.Database); err != nil {
log.Fatalf("error validating mongodb: %v", err)
}
}
func loadConfig() (*initialize.Config, error) {
var config initialize.Config
if err := env.Parse(&config); err != nil {
return nil, err
}
return &config, nil
}
func validateURLs(urls []string) error {
for index, u := range urls {
if u == "" {
return fmt.Errorf("empty url, index: %d", index)
}
// todo check the liveness of these URLs, many services do not support
}
return nil
}
func validateEncrypt(cfg *initialize.Config) error {
if cfg.EncryptPrivateKey == "" {
return errors.New("encrypt private key dont be empty")
}
if cfg.EncryptPublicKey == "" {
return errors.New("encrypt public key dont be empty")
}
if cfg.EncryptSignSecret == "" {
return errors.New("encrypt sign secret dont be empty")
}
encryptUtil := encrypt.New(&encrypt.EncryptDeps{
PrivateKey: cfg.EncryptPrivateKey,
PublicKey: cfg.EncryptPublicKey,
SignSecret: cfg.EncryptSignSecret,
})
sign, err := encryptUtil.SignCommonSecret()
if err != nil {
return err
}
ok, err := encryptUtil.VerifySignature(sign)
if err != nil {
return err
}
if !ok {
return errors.New("failed verify signature, invalid keys")
}
return nil
}