package config import ( "gorm.io/driver/sqlite" "gorm.io/gorm" "gorm.io/gorm/logger" "log" "os" ) var DB *gorm.DB type Config struct { Port string DBPath string CertDir string AccountsDir string } func Load() *Config { port := os.Getenv("PORT") if port == "" { port = "8080" } dbPath := os.Getenv("DB_PATH") if dbPath == "" { dbPath = "./data/autossl.db" } certDir := os.Getenv("CERT_DIR") if certDir == "" { certDir = "./data/certs" } accountsDir := os.Getenv("ACCOUNTS_DIR") if accountsDir == "" { accountsDir = "./data/accounts" } return &Config{ Port: port, DBPath: dbPath, CertDir: certDir, AccountsDir: accountsDir, } } func InitDB(cfg *Config) { // Ensure data directories exist dirs := []string{"./data", cfg.CertDir, cfg.AccountsDir} for _, d := range dirs { if err := os.MkdirAll(d, 0700); err != nil { log.Fatalf("Failed to create directory %s: %v", d, err) } } var err error DB, err = gorm.Open(sqlite.Open(cfg.DBPath), &gorm.Config{ Logger: logger.Default.LogMode(logger.Warn), }) if err != nil { log.Fatalf("Failed to connect database: %v", err) } // Auto migrate if err := DB.AutoMigrate(&Certificate{}); err != nil { log.Fatalf("Failed to migrate database: %v", err) } log.Println("Database initialized successfully") }