54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
cryptRand "crypto/rand"
|
|
"encoding/base64"
|
|
"github.com/spf13/viper"
|
|
"log"
|
|
"os"
|
|
)
|
|
|
|
// generateSecret generates a random string to use as sane defaults for secrets
|
|
func generateSecret() string {
|
|
b := make([]byte, 64)
|
|
_, err := cryptRand.Read(b)
|
|
if err != nil {
|
|
log.Printf("Could not generate Secrets: %v", err)
|
|
return "CHANGEME"
|
|
}
|
|
return base64.StdEncoding.EncodeToString(b)
|
|
}
|
|
|
|
// loadConfig reads in the Config file(s) and sets defaults.
|
|
func loadConfig() {
|
|
viper.SetDefault("port", 8443)
|
|
viper.SetDefault("address", "0.0.0.0")
|
|
viper.SetDefault("database.ip", "127.0.0.1")
|
|
viper.SetDefault("database.port", "5432")
|
|
viper.SetDefault("database.user", "patchman")
|
|
viper.SetDefault("database.password", "CHANGEME")
|
|
viper.SetDefault("database.name", "patchman")
|
|
viper.SetDefault("sessionsecret", generateSecret())
|
|
viper.SetConfigName("server.yaml")
|
|
viper.SetConfigType("yaml")
|
|
if os.Getenv("GIN_MODE") == "release" {
|
|
viper.AddConfigPath("/etc/patchman/")
|
|
} else {
|
|
viper.AddConfigPath("./")
|
|
}
|
|
// Read Config and handle produced error, separating out File not found
|
|
if err := viper.ReadInConfig(); err != nil {
|
|
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
|
|
err := viper.WriteConfig()
|
|
if err != nil {
|
|
log.Printf("Could not write config file. Running with default configuration: %w", err)
|
|
}
|
|
// Config file not found; ignore error if desired
|
|
} else {
|
|
// Config file was found but another error was produced
|
|
log.Fatalf("Could not load config: %w", err)
|
|
}
|
|
}
|
|
|
|
}
|