12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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)
- }
- }
- }
|