Files
Squid 5a0e2e630b Add self-hosted RCS backend, extension, and ops tooling
Ship the Go/SQLite API and Web UI, Chrome/Brave capture addon,
Docker Compose, Pangolin reverse-proxy support, and a user-crontab
watchdog so the binary stays running without systemd.
2026-08-06 22:02:45 +02:00

56 lines
1.4 KiB
Go

package config
import (
"os"
"path/filepath"
"strings"
)
// Config holds runtime settings for the RCS backend.
type Config struct {
Addr string
DataDir string
DBPath string
ScreenshotDir string
APIKey string
ImgurClientID string
// PublicBaseURL is the canonical public origin (e.g. https://rcs.example.com).
PublicBaseURL string
// TrustProxy honors X-Forwarded-Proto / X-Forwarded-Host when behind a reverse proxy.
TrustProxy bool
}
// Load reads configuration from environment variables with sensible defaults.
func Load() Config {
dataDir := envOr("RCS_DATA_DIR", "data")
dbPath := envOr("RCS_DB_PATH", filepath.Join(dataDir, "rcs.db"))
screenshotDir := filepath.Join(dataDir, "screenshots")
return Config{
Addr: envOr("RCS_ADDR", "127.0.0.1:8080"),
DataDir: dataDir,
DBPath: dbPath,
ScreenshotDir: screenshotDir,
APIKey: os.Getenv("RCS_API_KEY"),
ImgurClientID: os.Getenv("IMGUR_CLIENT_ID"),
PublicBaseURL: strings.TrimRight(os.Getenv("RCS_PUBLIC_BASE_URL"), "/"),
TrustProxy: envTruthy("RCS_TRUST_PROXY"),
}
}
func envOr(key, fallback string) string {
if value := os.Getenv(key); value != "" {
return value
}
return fallback
}
func envTruthy(key string) bool {
switch strings.ToLower(strings.TrimSpace(os.Getenv(key))) {
case "1", "true", "yes", "on":
return true
default:
return false
}
}