ezhik.

Veil Browser

Прототип
GitHub ↗ Скачать ZIP
config.go1.5 KB · goraw
package config

import (
	"fmt"
	"os"
	"strconv"
	"time"
)

type Config struct {
	Address         string
	AllowedOrigin   string
	SessionTTL      time.Duration
	CleanupInterval time.Duration
	SecureCookies   bool
}

func Load() (Config, error) {
	ttl, err := durationFromEnv("SESSION_TTL", 30*time.Minute)
	if err != nil {
		return Config{}, err
	}
	cleanup, err := durationFromEnv("SESSION_CLEANUP_INTERVAL", time.Minute)
	if err != nil {
		return Config{}, err
	}
	secureCookies, err := boolFromEnv("SECURE_COOKIES", false)
	if err != nil {
		return Config{}, err
	}

	return Config{
		Address:         stringFromEnv("HTTP_ADDR", ":8080"),
		AllowedOrigin:   stringFromEnv("APP_ORIGIN", "http://localhost:3000"),
		SessionTTL:      ttl,
		CleanupInterval: cleanup,
		SecureCookies:   secureCookies,
	}, nil
}

func stringFromEnv(name, fallback string) string {
	if value := os.Getenv(name); value != "" {
		return value
	}
	return fallback
}

func durationFromEnv(name string, fallback time.Duration) (time.Duration, error) {
	value := os.Getenv(name)
	if value == "" {
		return fallback, nil
	}
	duration, err := time.ParseDuration(value)
	if err != nil || duration <= 0 {
		return 0, fmt.Errorf("%s must be a positive duration", name)
	}
	return duration, nil
}

func boolFromEnv(name string, fallback bool) (bool, error) {
	value := os.Getenv(name)
	if value == "" {
		return fallback, nil
	}
	result, err := strconv.ParseBool(value)
	if err != nil {
		return false, fmt.Errorf("%s must be true or false", name)
	}
	return result, nil
}