1package config
2
3import (
4 "context"
5
6 "github.com/sethvargo/go-envconfig"
7)
8
9type Repo struct {
10 ScanPath string `env:"SCAN_PATH, default=/home/git"`
11 Readme []string `env:"README"`
12 MainBranch string `env:"MAIN_BRANCH, default=main"`
13}
14
15type Server struct {
16 ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:5555"`
17 InternalListenAddr string `env:"INTERNAL_LISTEN_ADDR, default=127.0.0.1:5444"`
18 Secret string `env:"SECRET, required"`
19 DBPath string `env:"DB_PATH, default=knotserver.db"`
20 Hostname string `env:"HOSTNAME, required"`
21 JetstreamEndpoint string `env:"JETSTREAM_ENDPOINT, default=wss://jetstream1.us-west.bsky.network/subscribe"`
22
23 // This disables signature verification so use with caution.
24 Dev bool `env:"DEV, default=false"`
25}
26
27type Owner struct {
28 Did string `env:"DID, required"`
29 AppPassword string `env:"APP_PASSWORD, required"`
30}
31
32type Config struct {
33 Repo Repo `env:",prefix=KNOT_REPO_"`
34 Server Server `env:",prefix=KNOT_SERVER_"`
35 Owner Owner `env:",prefix=KNOT_OWNER_"`
36 AppViewEndpoint string `env:"APPVIEW_ENDPOINT, default=https://tangled.sh"`
37}
38
39func Load(ctx context.Context) (*Config, error) {
40 var cfg Config
41 err := envconfig.Process(ctx, &cfg)
42 if err != nil {
43 return nil, err
44 }
45
46 if cfg.Repo.Readme == nil {
47 cfg.Repo.Readme = []string{
48 "README.md", "readme.md",
49 "README",
50 "readme",
51 "README.markdown",
52 "readme.markdown",
53 "README.txt",
54 "readme.txt",
55 "README.rst",
56 "readme.rst",
57 "README.org",
58 "readme.org",
59 "README.asciidoc",
60 "readme.asciidoc",
61 }
62 }
63
64 return &cfg, nil
65}