package hws import ( "time" "git.haelnorr.com/h/golib/env" ) type Config struct { Host string // ENV HWS_HOST: Host to listen on (default: 127.0.0.1) Port uint64 // ENV HWS_PORT: Port to listen on (default: 3000) TrustedHost string // ENV HWS_TRUSTED_HOST: Domain/Hostname to accept as trusted (default: same as Host) GZIP bool // ENV HWS_GZIP: Flag for GZIP compression on requests (default: false) ReadHeaderTimeout time.Duration // ENV HWS_READ_HEADER_TIMEOUT: Timeout for reading request headers in seconds (default: 2) WriteTimeout time.Duration // ENV HWS_WRITE_TIMEOUT: Timeout for writing requests in seconds (default: 10) IdleTimeout time.Duration // ENV HWS_IDLE_TIMEOUT: Timeout for idle connections in seconds (default: 120) } // ConfigFromEnv returns a Config struct loaded from the environment variables func ConfigFromEnv() (*Config, error) { host := env.String("HWS_HOST", "127.0.0.1") trustedHost := env.String("HWS_TRUSTED_HOST", host) cfg := &Config{ Host: host, Port: env.UInt64("HWS_PORT", 3000), TrustedHost: trustedHost, GZIP: env.Bool("HWS_GZIP", false), ReadHeaderTimeout: time.Duration(env.Int("HWS_READ_HEADER_TIMEOUT", 2)) * time.Second, WriteTimeout: time.Duration(env.Int("HWS_WRITE_TIMEOUT", 10)) * time.Second, IdleTimeout: time.Duration(env.Int("HWS_IDLE_TIMEOUT", 120)) * time.Second, } return cfg, nil }