refactor: replace SQLite/GORM with JSON file storage
- Remove GORM and SQLite, use simple JSON file (data/certs.json) for persistence - CertStore with sync.RWMutex for thread-safe in-memory cache - All handlers updated to use config.Store instead of config.DB - Cron job and stats updated accordingly - go mod tidy removes unused gorm/sqlite dependencies
Dieser Commit ist enthalten in:
@@ -16,8 +16,8 @@ import (
|
||||
func main() {
|
||||
cfg := config.Load()
|
||||
|
||||
// Initialize database
|
||||
config.InitDB(cfg)
|
||||
// Initialize certificate store (JSON file persistence)
|
||||
config.InitStore(cfg)
|
||||
|
||||
// Setup Gin
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
@@ -62,20 +62,19 @@ func main() {
|
||||
c := cron.New()
|
||||
c.AddFunc("0 3 * * *", func() {
|
||||
log.Println("Running scheduled certificate renewal check...")
|
||||
var certs []config.Certificate
|
||||
config.DB.Where("auto_renew = ? AND status = ?", true, "active").Find(&certs)
|
||||
certs := config.Store.GetActiveWithAutoRenew()
|
||||
|
||||
for _, cert := range certs {
|
||||
if cert.ExpiresAt != nil && time.Until(*cert.ExpiresAt).Hours() < float64(cert.RenewDays*24) {
|
||||
log.Printf("Auto-renewing certificate for %s (expires %s)", cert.Domain, cert.ExpiresAt.Format(time.RFC3339))
|
||||
if err := services.RenewCertificate(&cert, cfg); err != nil {
|
||||
if err := services.RenewCertificate(cert, cfg); err != nil {
|
||||
cert.Status = "error"
|
||||
cert.ErrorMessage = "auto renew: " + err.Error()
|
||||
log.Printf("Auto-renew failed for %s: %v", cert.Domain, err)
|
||||
} else {
|
||||
log.Printf("Auto-renew succeeded for %s", cert.Domain)
|
||||
}
|
||||
config.DB.Save(&cert)
|
||||
config.Store.Upsert(cert)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren