nginx-ui/server/pkg/cert/auto_cert.go
2023-02-15 10:44:30 +08:00

66 lines
1.4 KiB
Go

package cert
import (
"github.com/0xJacky/Nginx-UI/server/model"
"log"
"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 AutoObtain() {
defer func() {
if err := recover(); err != nil {
log.Println("[AutoCert] Recover", err)
}
}()
log.Println("[AutoCert] Start")
autoCertList := model.GetAutoCertList()
for _, certModel := range autoCertList {
confName := certModel.Filename
if certModel.SSLCertificatePath == "" {
log.Println("[AutoCert] Error ssl_certificate_path is empty, " +
"try to reopen auto-cert for this config:" + confName)
continue
}
cert, err := GetCertInfo(certModel.SSLCertificatePath)
if err != nil {
log.Println("GetCertInfo Err", err)
// Get certificate info error, ignore this domain
continue
}
// every week
if time.Now().Sub(cert.NotBefore).Hours()/24 < 7 {
continue
}
//
// after 1 mo, reissue certificate
logChan := make(chan string, 1)
errChan := make(chan error, 1)
// support SAN certification
go IssueCert(certModel.Domains, logChan, errChan)
go handleIssueCertLogChan(logChan)
// block, unless errChan closed
for err = range errChan {
log.Println("Error cert.IssueCert", err)
}
close(logChan)
}
log.Println("[AutoCert] End")
}