70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
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")
|
|
}
|