Files
go-eve-pi/options.go
2025-10-10 20:48:35 +02:00

84 lines
1.7 KiB
Go

package main
import (
"fmt"
"os"
"strings"
logger "git.site.quack-lab.dev/dave/cylogger"
"github.com/joho/godotenv"
)
var options Options
func init() {
var err error
options, err = LoadOptions()
if err != nil {
logger.Error("Failed to load options %v", err)
return
}
}
type Options struct {
DBPath string
Port string
ESIScopes []string
ESIRedirectURI string
ESIClientID string
WebhookURL string
WebhookEmail string
WebhookToken string
}
func LoadOptions() (Options, error) {
// Load environment variables strictly from .env file (fail if there's an error loading)
if err := godotenv.Load(); err != nil {
return Options{}, fmt.Errorf("error loading .env file: %w", err)
}
dbPath := getOrDefault("DB_PATH", "eve-pi.db")
port := getOrDefault("HTTP_SERVER_PORT", "3000")
clientID := getOrFatal("ESI_CLIENT_ID")
redirectURI := getOrFatal("ESI_REDIRECT_URI")
rawScopes := getOrDefault("ESI_SCOPES", "esi-planets.manage_planets.v1")
scopes := strings.Fields(rawScopes)
webhookUrl := getOrFatal("WEBHOOK_URL")
webhookEmail := getOrFatal("WEBHOOK_EMAIL")
webhookToken := getOrFatal("WEBHOOK_TOKEN")
return Options{
DBPath: dbPath,
Port: port,
ESIClientID: clientID,
ESIRedirectURI: redirectURI,
ESIScopes: scopes,
WebhookURL: webhookUrl,
WebhookEmail: webhookEmail,
WebhookToken: webhookToken,
}, nil
}
func getOrFatal(key string) string {
value := os.Getenv(key)
if value == "" {
logger.Error("Environment variable %s is required", key)
os.Exit(1)
}
return value
}
func getOrDefault(key, defaultValue string) string {
value := os.Getenv(key)
if value == "" {
return defaultValue
}
return value
}