ikurotime / gitgud

public
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}