108 lines
2.4 KiB
Go
108 lines
2.4 KiB
Go
|
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
|
||
|
}
|