The codebase that powers boop.cat boop.cat
11
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 116 lines 2.7 kB view raw
1// Copyright 2025 boop.cat 2// Licensed under the Apache License, Version 2.0 3// See LICENSE file for details. 4 5package config 6 7import ( 8 "os" 9 "strconv" 10 "strings" 11) 12 13type Config struct { 14 Port int 15 Env string 16 TrustProxy bool 17 18 DBPath string 19 20 SessionSecret string 21 CookieSecure bool 22 23 DeliveryMode string 24 EdgeRootDomain string 25 26 B2KeyID string 27 B2AppKey string 28 B2BucketID string 29 B2BucketName string 30 31 CFAPIToken string 32 CFAccountID string 33 CFZoneID string 34 CFKVNSRoutes string 35 CFKVNSFBound string 36 37 GitHubClientID string 38 GitHubClientSecret string 39 GoogleClientID string 40 GoogleClientSecret string 41 AtprotoPrivateKey string 42 43 AdminAPIKey string 44 45 RateAPIV1WindowMs int 46 RateAPIV1Max int 47} 48 49func Load() *Config { 50 return &Config{ 51 Port: getEnvInt("PORT", 8787), 52 Env: getEnv("NODE_ENV", "development"), 53 TrustProxy: getEnvBool("TRUST_PROXY", false), 54 55 DBPath: getEnv("FSD_DB_PATH", ""), 56 57 SessionSecret: getEnv("SESSION_SECRET", ""), 58 CookieSecure: getEnvBool("COOKIE_SECURE", false), 59 60 DeliveryMode: strings.ToLower(getEnv("FSD_DELIVERY", "")), 61 EdgeRootDomain: strings.ToLower(strings.TrimSpace(getEnv("FSD_EDGE_ROOT_DOMAIN", ""))), 62 63 B2KeyID: getEnv("B2_KEY_ID", ""), 64 B2AppKey: getEnv("B2_APP_KEY", ""), 65 B2BucketID: getEnv("B2_BUCKET_ID", ""), 66 B2BucketName: getEnv("B2_BUCKET_NAME", ""), 67 68 CFAPIToken: getEnv("CF_API_TOKEN", ""), 69 CFAccountID: getEnv("CF_ACCOUNT_ID", ""), 70 CFZoneID: getEnv("CF_ZONE_ID", ""), 71 CFKVNSRoutes: getEnv("CF_KV_NS_ROUTES", ""), 72 CFKVNSFBound: getEnv("CF_KV_NS_FBOUND", ""), 73 74 GitHubClientID: getEnv("GITHUB_CLIENT_ID", ""), 75 GitHubClientSecret: getEnv("GITHUB_CLIENT_SECRET", ""), 76 GoogleClientID: getEnv("GOOGLE_CLIENT_ID", ""), 77 GoogleClientSecret: getEnv("GOOGLE_CLIENT_SECRET", ""), 78 AtprotoPrivateKey: getEnv("ATPROTO_PRIVATE_KEY_1", ""), 79 80 AdminAPIKey: getEnv("ADMIN_API_KEY", ""), 81 82 RateAPIV1WindowMs: getEnvInt("RATE_API_V1_WINDOW_MS", 15*60*1000), 83 RateAPIV1Max: getEnvInt("RATE_API_V1_MAX", 100), 84 } 85} 86 87func (c *Config) IsProd() bool { 88 return c.Env == "production" 89} 90 91func (c *Config) EdgeEnabled() bool { 92 return c.DeliveryMode == "edge" && c.EdgeRootDomain != "" 93} 94 95func getEnv(key, fallback string) string { 96 if v := os.Getenv(key); v != "" { 97 return v 98 } 99 return fallback 100} 101 102func getEnvInt(key string, fallback int) int { 103 if v := os.Getenv(key); v != "" { 104 if i, err := strconv.Atoi(v); err == nil { 105 return i 106 } 107 } 108 return fallback 109} 110 111func getEnvBool(key string, fallback bool) bool { 112 if v := os.Getenv(key); v != "" { 113 return v == "1" || v == "true" 114 } 115 return fallback 116}