github.com/vseinstrumentiru/lego@v1.0.2/internal/lego/monitor/errorhandler/config.go (about)

     1  package errorhandler
     2  
     3  import (
     4  	"emperror.dev/errors"
     5  	"github.com/spf13/pflag"
     6  	"github.com/spf13/viper"
     7  )
     8  
     9  type Config struct {
    10  	Providers []string
    11  	Sentry    struct {
    12  		DSN string
    13  	}
    14  }
    15  
    16  const (
    17  	LogProvider    = "log"
    18  	SentryProvider = "sentry"
    19  )
    20  
    21  func (c Config) SetDefaults(env *viper.Viper, flag *pflag.FlagSet) {
    22  	env.SetDefault("srv.monitor.errorhandler.providers", []string{LogProvider})
    23  }
    24  
    25  func (c Config) Validate() (err error) {
    26  	providers := map[string]bool{
    27  		LogProvider:    false,
    28  		SentryProvider: false,
    29  	}
    30  
    31  	for _, p := range c.Providers {
    32  		if used, ok := providers[p]; !ok {
    33  			err = errors.Append(err, errors.Errorf("errorHandler provider %s not defined", p))
    34  		} else if used {
    35  			err = errors.Append(err, errors.Errorf("errorHandler provider %s must be defined only once", p))
    36  		}
    37  
    38  		providers[p] = true
    39  	}
    40  
    41  	if providers[SentryProvider] && c.Sentry.DSN == "" {
    42  		err = errors.Append(err, errors.New("sentry errorHandler provider requires uri"))
    43  	}
    44  
    45  	return err
    46  }