1package appview
2
3import (
4 "context"
5
6 "github.com/sethvargo/go-envconfig"
7)
8
9type CoreConfig struct {
10 CookieSecret string `env:"COOKIE_SECRET, default=00000000000000000000000000000000"`
11 DbPath string `env:"DB_PATH, default=appview.db"`
12 ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:3000"`
13 AppviewHost string `env:"APPVIEW_HOST, default=https://tangled.sh"`
14 Dev bool `env:"DEV, default=false"`
15}
16
17type OAuthConfig struct {
18 Jwks string `env:"JWKS"`
19}
20
21type JetstreamConfig struct {
22 Endpoint string `env:"ENDPOINT, default=wss://jetstream1.us-east.bsky.network/subscribe"`
23}
24
25type ResendConfig struct {
26 ApiKey string `env:"API_KEY"`
27}
28
29type CamoConfig struct {
30 Host string `env:"HOST, default=https://camo.tangled.sh"`
31 SharedSecret string `env:"SHARED_SECRET"`
32}
33
34type AvatarConfig struct {
35 Host string `env:"HOST, default=https://avatar.tangled.sh"`
36 SharedSecret string `env:"SHARED_SECRET"`
37}
38
39type Config struct {
40 Core CoreConfig `env:",prefix=TANGLED_"`
41 Jetstream JetstreamConfig `env:",prefix=TANGLED_JETSTREAM_"`
42 Resend ResendConfig `env:",prefix=TANGLED_RESEND_"`
43 Camo CamoConfig `env:",prefix=TANGLED_CAMO_"`
44 Avatar AvatarConfig `env:",prefix=TANGLED_AVATAR_"`
45 OAuth OAuthConfig `env:",prefix=TANGLED_OAUTH_"`
46}
47
48func LoadConfig(ctx context.Context) (*Config, error) {
49 var cfg Config
50 err := envconfig.Process(ctx, &cfg)
51 if err != nil {
52 return nil, err
53 }
54
55 return &cfg, nil
56}