forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
1package config 2 3import ( 4 "context" 5 "fmt" 6 "net/url" 7 8 "github.com/sethvargo/go-envconfig" 9) 10 11type CoreConfig struct { 12 CookieSecret string `env:"COOKIE_SECRET, default=00000000000000000000000000000000"` 13 DbPath string `env:"DB_PATH, default=appview.db"` 14 ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:3000"` 15 AppviewHost string `env:"APPVIEW_HOST, default=https://tangled.sh"` 16 Dev bool `env:"DEV, default=false"` 17} 18 19type OAuthConfig struct { 20 Jwks string `env:"JWKS"` 21} 22 23type JetstreamConfig struct { 24 Endpoint string `env:"ENDPOINT, default=wss://jetstream1.us-east.bsky.network/subscribe"` 25} 26 27type ResendConfig struct { 28 ApiKey string `env:"API_KEY"` 29 SentFrom string `env:"SENT_FROM, default=noreply@notifs.tangled.sh"` 30} 31 32type CamoConfig struct { 33 Host string `env:"HOST, default=https://camo.tangled.sh"` 34 SharedSecret string `env:"SHARED_SECRET"` 35} 36 37type AvatarConfig struct { 38 Host string `env:"HOST, default=https://avatar.tangled.sh"` 39 SharedSecret string `env:"SHARED_SECRET"` 40} 41 42type PosthogConfig struct { 43 ApiKey string `env:"API_KEY"` 44 Endpoint string `env:"ENDPOINT, default=https://eu.i.posthog.com"` 45} 46 47type RedisConfig struct { 48 Addr string `env:"ADDR, default=localhost:6379"` 49 Password string `env:"PASS"` 50 DB int `env:"DB, default=0"` 51} 52 53func (cfg RedisConfig) ToURL() string { 54 u := &url.URL{ 55 Scheme: "redis", 56 Host: cfg.Addr, 57 Path: fmt.Sprintf("/%d", cfg.DB), 58 } 59 60 if cfg.Password != "" { 61 u.User = url.UserPassword("", cfg.Password) 62 } 63 64 return u.String() 65} 66 67type Config struct { 68 Core CoreConfig `env:",prefix=TANGLED_"` 69 Jetstream JetstreamConfig `env:",prefix=TANGLED_JETSTREAM_"` 70 Resend ResendConfig `env:",prefix=TANGLED_RESEND_"` 71 Posthog PosthogConfig `env:",prefix=TANGLED_POSTHOG_"` 72 Camo CamoConfig `env:",prefix=TANGLED_CAMO_"` 73 Avatar AvatarConfig `env:",prefix=TANGLED_AVATAR_"` 74 OAuth OAuthConfig `env:",prefix=TANGLED_OAUTH_"` 75 Redis RedisConfig `env:",prefix=TANGLED_REDIS_"` 76} 77 78func LoadConfig(ctx context.Context) (*Config, error) { 79 var cfg Config 80 err := envconfig.Process(ctx, &cfg) 81 if err != nil { 82 return nil, err 83 } 84 85 return &cfg, nil 86}