main / internal/infra/config/config.go
1.0 KB · Go Raw
1package config
2
3import (
4 "os"
5 "path/filepath"
6 "strings"
7
8 "github.com/joho/godotenv"
9)
10
11type Config struct {
12 Addr string
13 DataDir string
14 SessionKey string // random string
15 BaseURL string // external URL used in clone instructions, e.g. https://gitgud.ikuro.dev
16}
17
18func (c Config) DBPath() string {
19 return filepath.Join(c.DataDir, "app.db")
20}
21
22func (c Config) ReposDir() string {
23 return filepath.Join(c.DataDir, "repos")
24}
25
26func Load() (Config, error) {
27 // Load .env if present; in containers config comes from real env vars.
28 _ = godotenv.Load()
29
30 dataDir, err := filepath.Abs(os.Getenv("GITGUD_DATA_DIR"))
31 if err != nil {
32 return Config{}, err
33 }
34
35 baseURL := os.Getenv("GITGUD_BASE_URL")
36 if baseURL == "" {
37 addr := os.Getenv("GITGUD_ADDR")
38 if strings.HasPrefix(addr, ":") {
39 addr = "localhost" + addr
40 }
41 baseURL = "http://" + addr
42 }
43 baseURL = strings.TrimRight(baseURL, "/")
44
45 return Config{
46 Addr: os.Getenv("GITGUD_ADDR"),
47 DataDir: dataDir,
48 SessionKey: os.Getenv("GITGUD_SESSION_KEY"),
49 BaseURL: baseURL,
50 }, nil
51}