| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package config
- import (
- "crypto/rand"
- "encoding/hex"
- "log/slog"
- "os"
- )
- type Config struct {
- Port string
- DBPath string
- SessionSecret string
- FrontendDir string
- }
- func Load() Config {
- c := Config{
- Port: envOr("GOFLARE_PORT", ":42069"),
- DBPath: envOr("GOFLARE_DB_PATH", "goflare.db"),
- SessionSecret: os.Getenv("GOFLARE_SESSION_SECRET"),
- FrontendDir: envOr("GOFLARE_FRONTEND_DIR", "frontend/dist"),
- }
- if c.SessionSecret == "" {
- c.SessionSecret = randomHex(32)
- slog.Warn("GOFLARE_SESSION_SECRET not set, using random value (sessions won't survive restarts)")
- }
- return c
- }
- func envOr(key, fallback string) string {
- if v := os.Getenv(key); v != "" {
- return v
- }
- return fallback
- }
- func randomHex(n int) string {
- b := make([]byte, n)
- _, err := rand.Read(b)
- if err != nil {
- panic("failed to generate random bytes: " + err.Error())
- }
- return hex.EncodeToString(b)
- }
|