forked from tangled.org/core
this repo has no description
at master 3.6 kB view raw
1package config 2 3import ( 4 "context" 5 "fmt" 6 "net/url" 7 "time" 8 9 "github.com/sethvargo/go-envconfig" 10) 11 12type CoreConfig struct { 13 CookieSecret string `env:"COOKIE_SECRET, default=00000000000000000000000000000000"` 14 DbPath string `env:"DB_PATH, default=appview.db"` 15 ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:3000"` 16 AppviewHost string `env:"APPVIEW_HOST, default=https://tangled.sh"` 17 Dev bool `env:"DEV, default=false"` 18 DisallowedNicknamesFile string `env:"DISALLOWED_NICKNAMES_FILE"` 19 20 // temporarily, to add users to default knot and spindle 21 AppPassword string `env:"APP_PASSWORD"` 22 23 // uhhhh this is because knot1 is under icy's did 24 TmpAltAppPassword string `env:"ALT_APP_PASSWORD"` 25} 26 27type OAuthConfig struct { 28 Jwks string `env:"JWKS"` 29} 30 31type JetstreamConfig struct { 32 Endpoint string `env:"ENDPOINT, default=wss://jetstream1.us-east.bsky.network/subscribe"` 33} 34 35type ConsumerConfig struct { 36 RetryInterval time.Duration `env:"RETRY_INTERVAL, default=60s"` 37 MaxRetryInterval time.Duration `env:"MAX_RETRY_INTERVAL, default=120m"` 38 ConnectionTimeout time.Duration `env:"CONNECTION_TIMEOUT, default=5s"` 39 WorkerCount int `env:"WORKER_COUNT, default=64"` 40 QueueSize int `env:"QUEUE_SIZE, default=100"` 41} 42 43type ResendConfig struct { 44 ApiKey string `env:"API_KEY"` 45 SentFrom string `env:"SENT_FROM, default=noreply@notifs.tangled.sh"` 46} 47 48type CamoConfig struct { 49 Host string `env:"HOST, default=https://camo.tangled.sh"` 50 SharedSecret string `env:"SHARED_SECRET"` 51} 52 53type AvatarConfig struct { 54 Host string `env:"HOST, default=https://avatar.tangled.sh"` 55 SharedSecret string `env:"SHARED_SECRET"` 56} 57 58type PosthogConfig struct { 59 ApiKey string `env:"API_KEY"` 60 Endpoint string `env:"ENDPOINT, default=https://eu.i.posthog.com"` 61} 62 63type RedisConfig struct { 64 Addr string `env:"ADDR, default=localhost:6379"` 65 Password string `env:"PASS"` 66 DB int `env:"DB, default=0"` 67} 68 69type PdsConfig struct { 70 Host string `env:"HOST, default=https://tngl.sh"` 71 AdminSecret string `env:"ADMIN_SECRET"` 72} 73 74type Cloudflare struct { 75 ApiToken string `env:"API_TOKEN"` 76 ZoneId string `env:"ZONE_ID"` 77 TurnstileSiteKey string `env:"TURNSTILE_SITE_KEY"` 78 TurnstileSecretKey string `env:"TURNSTILE_SECRET_KEY"` 79} 80 81func (cfg RedisConfig) ToURL() string { 82 u := &url.URL{ 83 Scheme: "redis", 84 Host: cfg.Addr, 85 Path: fmt.Sprintf("/%d", cfg.DB), 86 } 87 88 if cfg.Password != "" { 89 u.User = url.UserPassword("", cfg.Password) 90 } 91 92 return u.String() 93} 94 95type Config struct { 96 Core CoreConfig `env:",prefix=TANGLED_"` 97 Jetstream JetstreamConfig `env:",prefix=TANGLED_JETSTREAM_"` 98 Knotstream ConsumerConfig `env:",prefix=TANGLED_KNOTSTREAM_"` 99 Spindlestream ConsumerConfig `env:",prefix=TANGLED_SPINDLESTREAM_"` 100 Resend ResendConfig `env:",prefix=TANGLED_RESEND_"` 101 Posthog PosthogConfig `env:",prefix=TANGLED_POSTHOG_"` 102 Camo CamoConfig `env:",prefix=TANGLED_CAMO_"` 103 Avatar AvatarConfig `env:",prefix=TANGLED_AVATAR_"` 104 OAuth OAuthConfig `env:",prefix=TANGLED_OAUTH_"` 105 Redis RedisConfig `env:",prefix=TANGLED_REDIS_"` 106 Pds PdsConfig `env:",prefix=TANGLED_PDS_"` 107 Cloudflare Cloudflare `env:",prefix=TANGLED_CLOUDFLARE_"` 108} 109 110func LoadConfig(ctx context.Context) (*Config, error) { 111 var cfg Config 112 err := envconfig.Process(ctx, &cfg) 113 if err != nil { 114 return nil, err 115 } 116 117 return &cfg, nil 118}