mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-01 06:36:38 +08:00
44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
package job
|
|
|
|
import (
|
|
"log/slog"
|
|
"openflare/model"
|
|
"openflare/service"
|
|
"time"
|
|
)
|
|
|
|
type SSLRenewJob struct {
|
|
}
|
|
|
|
func (j *SSLRenewJob) Run() {
|
|
slog.Info("The scheduled certificate update task is currently in progress ...")
|
|
|
|
certificates, err := model.ListTLSCertificates()
|
|
if err != nil {
|
|
slog.Error("failed to list certificates in SSL renew job", "error", err)
|
|
return
|
|
}
|
|
|
|
now := time.Now()
|
|
for _, cert := range certificates {
|
|
if !cert.AutoRenew || cert.Provider != "acme" || cert.ApplyStatus == "applying" {
|
|
continue
|
|
}
|
|
|
|
sub := cert.NotAfter.Sub(now)
|
|
// Expiring in less than 7 days (7 * 24 hours)
|
|
if sub.Hours() < 168 {
|
|
slog.Info("Update the SSL certificate for the domain", "domain", cert.PrimaryDomain)
|
|
|
|
// Invoke renew process (async go-routine handles Lego inside)
|
|
_, err := service.RenewTLSCertificate(cert.ID)
|
|
if err != nil {
|
|
slog.Error("Failed to update the SSL certificate", "domain", cert.PrimaryDomain, "error", err)
|
|
continue
|
|
}
|
|
slog.Info("Triggered the SSL certificate renew for domain", "domain", cert.PrimaryDomain)
|
|
}
|
|
}
|
|
slog.Info("The scheduled certificate update task has completed")
|
|
}
|