mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 02:15:48 +02:00
67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
package cert
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/0xJacky/Nginx-UI/internal/notification"
|
|
"github.com/0xJacky/Nginx-UI/query"
|
|
"github.com/uozi-tech/cosy/logger"
|
|
)
|
|
|
|
func CertExpiredNotify() {
|
|
c := query.Cert
|
|
|
|
certs, err := c.Find()
|
|
if err != nil {
|
|
logger.Errorf("CertExpiredNotify: Err: %v\n", err)
|
|
return
|
|
}
|
|
|
|
for _, certModel := range certs {
|
|
if certModel.SSLCertificatePath == "" {
|
|
continue
|
|
}
|
|
|
|
certInfo, err := GetCertInfo(certModel.SSLCertificatePath)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
now := time.Now()
|
|
|
|
// Calculate days until expiration
|
|
daysUntilExpiration := int(certInfo.NotAfter.Sub(now).Hours() / 24)
|
|
|
|
// ignore expired certificate
|
|
if daysUntilExpiration < -1 {
|
|
continue
|
|
}
|
|
|
|
mask := map[string]any{
|
|
"name": certModel.Name,
|
|
"days": daysUntilExpiration,
|
|
}
|
|
|
|
// Check if certificate is already expired
|
|
if now.After(certInfo.NotAfter) {
|
|
notification.Error("Certificate Expired", "Certificate %{name} has expired", mask)
|
|
continue
|
|
}
|
|
|
|
// Send notifications based on remaining days
|
|
switch {
|
|
case daysUntilExpiration <= 14:
|
|
notification.Info("Certificate Expiration Notice",
|
|
"Certificate %{name} will expire in %{days} days", mask)
|
|
case daysUntilExpiration <= 7:
|
|
notification.Warning("Certificate Expiring Soon",
|
|
"Certificate %{name} will expire in %{days} days", mask)
|
|
case daysUntilExpiration <= 3:
|
|
notification.Warning("Certificate Expiring Soon",
|
|
"Certificate %{name} will expire in %{days} days", mask)
|
|
case daysUntilExpiration <= 1:
|
|
notification.Error("Certificate Expiring Soon",
|
|
"Certificate %{name} will expire in 1 day", mask)
|
|
}
|
|
}
|
|
}
|