this repo has no description
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 ClientSecret string `env:"CLIENT_SECRET"` 29 ClientKid string `env:"CLIENT_KID"` 30} 31 32type JetstreamConfig struct { 33 Endpoint string `env:"ENDPOINT, default=wss://jetstream1.us-east.bsky.network/subscribe"` 34} 35 36type ConsumerConfig struct { 37 RetryInterval time.Duration `env:"RETRY_INTERVAL, default=60s"` 38 MaxRetryInterval time.Duration `env:"MAX_RETRY_INTERVAL, default=120m"` 39 ConnectionTimeout time.Duration `env:"CONNECTION_TIMEOUT, default=5s"` 40 WorkerCount int `env:"WORKER_COUNT, default=64"` 41 QueueSize int `env:"QUEUE_SIZE, default=100"` 42} 43 44type ResendConfig struct { 45 ApiKey string `env:"API_KEY"` 46 SentFrom string `env:"SENT_FROM, default=noreply@notifs.tangled.sh"` 47} 48 49type CamoConfig struct { 50 Host string `env:"HOST, default=https://camo.tangled.sh"` 51 SharedSecret string `env:"SHARED_SECRET"` 52} 53 54type AvatarConfig struct { 55 Host string `env:"HOST, default=https://avatar.tangled.sh"` 56 SharedSecret string `env:"SHARED_SECRET"` 57} 58 59type PosthogConfig struct { 60 ApiKey string `env:"API_KEY"` 61 Endpoint string `env:"ENDPOINT, default=https://eu.i.posthog.com"` 62} 63 64type RedisConfig struct { 65 Addr string `env:"ADDR, default=localhost:6379"` 66 Password string `env:"PASS"` 67 DB int `env:"DB, default=0"` 68} 69 70type PdsConfig struct { 71 Host string `env:"HOST, default=https://tngl.sh"` 72 AdminSecret string `env:"ADMIN_SECRET"` 73} 74 75type Cloudflare struct { 76 ApiToken string `env:"API_TOKEN"` 77 ZoneId string `env:"ZONE_ID"` 78 TurnstileSiteKey string `env:"TURNSTILE_SITE_KEY"` 79 TurnstileSecretKey string `env:"TURNSTILE_SECRET_KEY"` 80} 81 82func (cfg RedisConfig) ToURL() string { 83 u := &url.URL{ 84 Scheme: "redis", 85 Host: cfg.Addr, 86 Path: fmt.Sprintf("/%d", cfg.DB), 87 } 88 89 if cfg.Password != "" { 90 u.User = url.UserPassword("", cfg.Password) 91 } 92 93 return u.String() 94} 95 96type Config struct { 97 Core CoreConfig `env:",prefix=TANGLED_"` 98 Jetstream JetstreamConfig `env:",prefix=TANGLED_JETSTREAM_"` 99 Knotstream ConsumerConfig `env:",prefix=TANGLED_KNOTSTREAM_"` 100 Spindlestream ConsumerConfig `env:",prefix=TANGLED_SPINDLESTREAM_"` 101 Resend ResendConfig `env:",prefix=TANGLED_RESEND_"` 102 Posthog PosthogConfig `env:",prefix=TANGLED_POSTHOG_"` 103 Camo CamoConfig `env:",prefix=TANGLED_CAMO_"` 104 Avatar AvatarConfig `env:",prefix=TANGLED_AVATAR_"` 105 OAuth OAuthConfig `env:",prefix=TANGLED_OAUTH_"` 106 Redis RedisConfig `env:",prefix=TANGLED_REDIS_"` 107 Pds PdsConfig `env:",prefix=TANGLED_PDS_"` 108 Cloudflare Cloudflare `env:",prefix=TANGLED_CLOUDFLARE_"` 109} 110 111func LoadConfig(ctx context.Context) (*Config, error) { 112 var cfg Config 113 err := envconfig.Process(ctx, &cfg) 114 if err != nil { 115 return nil, err 116 } 117 118 return &cfg, nil 119}