mirror of
https://github.com/sstent/GarminSync.git
synced 2026-01-25 16:42:20 +00:00
65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"time"
|
|
)
|
|
|
|
// Config holds application configuration
|
|
type Config struct {
|
|
GarminEmail string
|
|
GarminPassword string
|
|
DatabasePath string
|
|
RateLimit time.Duration
|
|
SessionPath string
|
|
}
|
|
|
|
// LoadConfig loads configuration from environment variables
|
|
func LoadConfig() (*Config, error) {
|
|
email := os.Getenv("GARMIN_EMAIL")
|
|
password := os.Getenv("GARMIN_PASSWORD")
|
|
if email == "" || password == "" {
|
|
return nil, fmt.Errorf("GARMIN_EMAIL and GARMIN_PASSWORD environment variables are required")
|
|
}
|
|
|
|
databasePath := os.Getenv("DATABASE_PATH")
|
|
if databasePath == "" {
|
|
databasePath = "garmin.db"
|
|
}
|
|
|
|
rateLimit := parseDuration(os.Getenv("RATE_LIMIT"), 2*time.Second)
|
|
sessionPath := os.Getenv("SESSION_PATH")
|
|
if sessionPath == "" {
|
|
sessionPath = "/data/session.json"
|
|
}
|
|
|
|
// Ensure session path directory exists
|
|
if err := os.MkdirAll(filepath.Dir(sessionPath), 0755); err != nil {
|
|
return nil, fmt.Errorf("failed to create session directory: %w", err)
|
|
}
|
|
|
|
return &Config{
|
|
GarminEmail: email,
|
|
GarminPassword: password,
|
|
DatabasePath: databasePath,
|
|
RateLimit: rateLimit,
|
|
SessionPath: sessionPath,
|
|
}, nil
|
|
}
|
|
|
|
// parseDuration parses a duration string with a default
|
|
func parseDuration(value string, defaultValue time.Duration) time.Duration {
|
|
if value == "" {
|
|
return defaultValue
|
|
}
|
|
|
|
d, err := time.ParseDuration(value)
|
|
if err != nil {
|
|
return defaultValue
|
|
}
|
|
|
|
return d
|
|
}
|