package config import ( "fmt" "os" ) // Config holds application configuration loaded from environment variables. type Config struct { // GiteaURL is the base URL of the Gitea instance. GiteaURL string // GiteaToken is the default API token (optional; users can set their own via cookie). GiteaToken string // ListenAddr is the server listen address. ListenAddr string // SessionSecret is the HMAC key for signing session cookies. SessionSecret string } // Load reads configuration from environment variables. // Returns an error if required variables are missing. func Load() (*Config, error) { cfg := &Config{ GiteaURL: os.Getenv("GITEA_URL"), GiteaToken: os.Getenv("GITEA_TOKEN"), ListenAddr: os.Getenv("LISTEN_ADDR"), SessionSecret: os.Getenv("SESSION_SECRET"), } if cfg.ListenAddr == "" { cfg.ListenAddr = ":8080" } if cfg.GiteaURL == "" { return nil, fmt.Errorf("GITEA_URL environment variable is required") } if cfg.SessionSecret == "" { return nil, fmt.Errorf("SESSION_SECRET environment variable is required") } if len(cfg.SessionSecret) < 32 { return nil, fmt.Errorf("SESSION_SECRET must be at least 32 characters") } return cfg, nil }