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 ServerMetadataUrl string `env:"SERVER_METADATA_URL"`
20}
21
22type JetstreamConfig struct {
23 Endpoint string `env:"ENDPOINT, default=wss://jetstream1.us-east.bsky.network/subscribe"`
24}
25
26type ResendConfig struct {
27 ApiKey string `env:"API_KEY"`
28}
29
30type CamoConfig struct {
31 Host string `env:"HOST, default=https://camo.tangled.sh"`
32 SharedSecret string `env:"SHARED_SECRET"`
33}
34
35type AvatarConfig struct {
36 Host string `env:"HOST, default=https://avatar.tangled.sh"`
37 SharedSecret string `env:"SHARED_SECRET"`
38}
39
40type Config struct {
41 Core CoreConfig `env:",prefix=TANGLED_"`
42 Jetstream JetstreamConfig `env:",prefix=TANGLED_JETSTREAM_"`
43 Resend ResendConfig `env:",prefix=TANGLED_RESEND_"`
44 Camo CamoConfig `env:",prefix=TANGLED_CAMO_"`
45 Avatar AvatarConfig `env:",prefix=TANGLED_AVATAR_"`
46 OAuth OAuthConfig `env:",prefix=TANGLED_OAUTH_"`
47}
48
49func LoadConfig(ctx context.Context) (*Config, error) {
50 var cfg Config
51 err := envconfig.Process(ctx, &cfg)
52 if err != nil {
53 return nil, err
54 }
55
56 return &cfg, nil
57}