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
}