package config import ( "log/slog" "os" "github.com/joho/godotenv" ) type config struct { AdminPassword string Instance string Tag string JwtSecret string JwtIssuer string JwtAudience string DBEngine string DBHost string DBPort string DBUser string DBPassword string DBName string ImageKitId string } var Config *config func Load() *config { err := godotenv.Load() if err != nil { slog.Error("Error loading .env file - Using environment variables instead") } // Get mastodon instance instance := os.Getenv("CAOM_INSTANCE") if instance == "" { instance = "https://mstdn.party" } // Get mastodon tag tag := os.Getenv("CAOM_TAG") if tag == "" { tag = "catsofmastodon" } // Get admin password (Its a single user/admin app so its just fine) adminPassword := os.Getenv("CAOM_ADMIN_PASSWORD") if adminPassword == "" { slog.Warn("No admin password provided, using default password 'catsaregood'") adminPassword = "catsaregood" } // Jwt params secret := os.Getenv("CAOM_JWT_SECRET") if secret == "" { panic("No jwt secret provided") } issuer := os.Getenv("CAOM_JWT_ISSUER") if issuer == "" { slog.Info("No jwt issuer provided, using default issuer 'CatsOfMastodonBotGo'") issuer = "CatsOfMastodonBotGo" } audience := os.Getenv("CAOM_JWT_AUDIENCE") if audience == "" { slog.Info("No jwt audience provided, using default audience 'CatsOfMastodonBotGo'") audience = "CatsOfMastodonBotGo" } dbEngine := os.Getenv("CAOM_DB_ENGINE") dbHost := os.Getenv("CAOM_DB_HOST") dbPort := os.Getenv("CAOM_DB_PORT") dbUser := os.Getenv("CAOM_DB_USER") dbPassword := os.Getenv("CAOM_DB_PASSWORD") dbName := os.Getenv("CAOM_DB_NAME") if dbEngine == "" || dbHost == "" || dbPort == "" || dbUser == "" || dbPassword == "" || dbName == "" { slog.Info("No database connection provided, using sqlite") dbEngine = "sqlite" dbHost = "" dbPort = "" dbUser = "" dbPassword = "" dbName = "caom.db" } imageKitId := os.Getenv("CAOM_IMAGEKIT_ID") if imageKitId == "" { slog.Info("No imagekit id provided, not using imagekit") } // Inititlize AppContext var appContext = &config{ AdminPassword: adminPassword, Instance: instance, Tag: tag, JwtSecret: secret, JwtIssuer: issuer, JwtAudience: audience, DBEngine: dbEngine, DBHost: dbHost, DBPort: dbPort, DBUser: dbUser, DBPassword: dbPassword, DBName: dbName, ImageKitId: imageKitId, } return appContext } func Init() { Config = Load() }