Skip to content
Snippets Groups Projects
Commit 2f386bbe authored by ludo8147's avatar ludo8147
Browse files

undo config

parent cd5caf5c
No related branches found
No related tags found
No related merge requests found
Pipeline #68723 canceled
......@@ -6,14 +6,17 @@ import (
"os"
"log/slog"
"unicode"
fp "path/filepath"
configParser "github.com/caarlos0/env/v9"
)
const BODY_SIZE_LIMIT = 32 * 1024 * 1024 // 32 MB, in bytes
var version string = "n/a"
type Config struct {
Version string
......@@ -32,65 +35,86 @@ type Config struct {
DatabasePassword string `env:"DB_PASSWORD" envDefault:""`
}
func New() (*Config, error) {
func New() ( *Config, error ){
cfg := Config{
Version: version,
}
if err := configParser.Parse(&cfg); err != nil {
if err := configParser.Parse( &cfg ); err != nil {
return nil, err
}
possibleEnvValues := map[string]bool{
"development": true,
"testing": true,
"production": true,
"staging": true,
possibleEnvValues := map[ string ] bool {
"development": true,
"testing": true,
"production": true,
"staging": true,
}
if _, ok := possibleEnvValues[cfg.Environment]; !ok {
if _, ok := possibleEnvValues[ cfg.Environment ]; !ok {
return nil, errors.New(
fmt.Sprintf("Invalid environment value: %s", cfg.Environment),
fmt.Sprintf( "Invalid environment value: %s", cfg.Environment ),
)
}
if cfg.Environment == "development" {
cfg.LogLevel = "debug"
}
if cfg.Environment == "development" { cfg.LogLevel = "debug" }
if _, err := cfg.GetLogLevel(); err != nil {
return nil, err
}
if len(cfg.DatabaseHost) >= 1 && len(cfg.DatabasePassword) == 0 {
return nil, errors.New("Database password is required when database host is set")
if len( cfg.DatabaseHost ) >= 1 && len( cfg.DatabasePassword ) >= 2 {
if ! fp.IsLocal( cfg.DatabasePassword ) && ! fp.IsAbs( cfg.DatabasePassword ) {
return nil, errors.New(
fmt.Sprintln( "Database password must be a file path" ),
)
}
_, err := os.Stat( cfg.DatabasePassword )
if err != nil {
if errors.Is( err, os.ErrNotExist ){
return nil, errors.New(
fmt.Sprintln( "Database password file does not exist" ),
)
}
return nil, errors.New(
fmt.Sprintln( "Database password file not accessible" ),
)
}
}
if len(cfg.FontColor) >= 1 {
if len(cfg.FontColor) >= 21 {
return nil, errors.New("Font color too long")
if len( cfg.FontColor ) >= 1 {
if len( cfg.FontColor ) >= 21 {
return nil, errors.New(
fmt.Sprintln( "Font color too long" ),
)
}
for _, r := range cfg.FontColor {
if !unicode.IsLetter(r) {
return nil, errors.New("Invalid character in font color")
if ! unicode.IsLetter( r ) {
return nil, errors.New(
fmt.Sprintln( "Invalid character in font color" ),
)
}
}
}
return &cfg, nil
}
func (cfg *Config) GetLogLevel() (slog.Level, error) {
possibleLogLevels := map[string]slog.Level{
"error": slog.LevelError,
"debug": slog.LevelDebug,
func ( cfg *Config ) GetLogLevel() ( slog.Level, error ){
possibleLogLevels := map[ string ] slog.Level {
"error": slog.LevelError,
"debug": slog.LevelDebug,
}
level, ok := possibleLogLevels[cfg.LogLevel]
level, ok := possibleLogLevels[ cfg.LogLevel ]
if !ok {
return slog.LevelError, errors.New(
fmt.Sprintf("Invalid log level: %s", cfg.LogLevel),
fmt.Sprintf( "Invalid log level: %s", cfg.LogLevel ),
)
} else {
}else{
return level, nil
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment