package config import ( stdLog "log" "net/url" "go.uber.org/zap" "git.ssns.se/git/frozendragon/minecraft-ui/internal/env" "git.ssns.se/git/frozendragon/minecraft-ui/internal/log" ) // Config defines required configuration to instantiate the service. type Config struct { LoggerConfig zap.Config Logger *zap.Logger StdLogger *stdLog.Logger DatabaseURL *url.URL DatabaseCertPath string Addr string BasicAuthUser string BasicAuthPass string } // New instantiates and validates a new configuration from an environment func. func New(env env.Client) (*Config, error) { loggerConfig := log.NewProductionConfig() if logLevel := env.GetOr("LOG_LEVEL", "debug"); logLevel != "" { l, err := log.NewLevel(logLevel) if err != nil { return nil, err } loggerConfig.Level.SetLevel(l) } logger, err := loggerConfig.Build() if err != nil { return nil, err } stdLogger := zap.NewStdLog(logger) zap.RedirectStdLog(logger) if err != nil { return nil, err } conf := &Config{ LoggerConfig: loggerConfig, Logger: logger, StdLogger: stdLogger, Addr: ":" + env.GetOr("PORT", defaultPort), BasicAuthUser: env.GetOr("BASIC_AUTH_USER", ""), BasicAuthPass: env.GetOr("BASIC_AUTH_PASS", ""), } return conf, nil }