mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-12 19:05:55 +02:00
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package cert
|
|
|
|
import (
|
|
"github.com/0xJacky/Nginx-UI/server/model"
|
|
"log"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func handleIssueCertLogChan(logChan chan string) {
|
|
defer func() {
|
|
if err := recover(); err != nil {
|
|
log.Println("[Auto Cert] handleIssueCertLogChan", err)
|
|
}
|
|
}()
|
|
|
|
for logString := range logChan {
|
|
log.Println("[Auto Cert] Info", logString)
|
|
}
|
|
}
|
|
|
|
func AutoCert() {
|
|
defer func() {
|
|
if err := recover(); err != nil {
|
|
log.Println("[AutoCert] Recover", err)
|
|
}
|
|
}()
|
|
log.Println("[AutoCert] Start")
|
|
autoCertList := model.GetAutoCertList()
|
|
for i := range autoCertList {
|
|
domain := autoCertList[i].Domain
|
|
|
|
certModel, err := model.FirstCert(domain)
|
|
|
|
if err != nil {
|
|
log.Println("[AutoCert] Error get certificate from database", err)
|
|
continue
|
|
}
|
|
|
|
if certModel.SSLCertificatePath == "" {
|
|
log.Println("[AutoCert] Error ssl_certificate_path is empty, " +
|
|
"try to reopen auto-cert for this domain:" + domain)
|
|
continue
|
|
}
|
|
|
|
cert, err := GetCertInfo(certModel.SSLCertificatePath)
|
|
if err != nil {
|
|
log.Println("GetCertInfo Err", err)
|
|
// Get certificate info error, ignore this domain
|
|
continue
|
|
}
|
|
// before 1 mo
|
|
if time.Now().Before(cert.NotBefore.AddDate(0, 1, 0)) {
|
|
continue
|
|
}
|
|
// after 1 mo, reissue certificate
|
|
logChan := make(chan string, 1)
|
|
errChan := make(chan error, 1)
|
|
|
|
// support SAN certification
|
|
go IssueCert(strings.Split(domain, "_"), logChan, errChan)
|
|
|
|
go handleIssueCertLogChan(logChan)
|
|
|
|
// block, unless errChan closed
|
|
for err = range errChan {
|
|
log.Println("Error cert.IssueCert", err)
|
|
}
|
|
|
|
close(logChan)
|
|
}
|
|
}
|