mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-12 02:45:49 +02:00
fix: dns manager issue
This commit is contained in:
parent
fcc22632ec
commit
c95aa36433
2 changed files with 93 additions and 89 deletions
|
@ -14,6 +14,10 @@ const code = computed(() => {
|
||||||
})
|
})
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
|
data.configuration = {
|
||||||
|
credentials: {},
|
||||||
|
additional: {}
|
||||||
|
}
|
||||||
providers.value?.forEach((v: any, k: number) => {
|
providers.value?.forEach((v: any, k: number) => {
|
||||||
if (v.code === code.value) {
|
if (v.code === code.value) {
|
||||||
provider_idx.value = k
|
provider_idx.value = k
|
||||||
|
|
|
@ -1,128 +1,128 @@
|
||||||
package cert
|
package cert
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/0xJacky/Nginx-UI/server/model"
|
"github.com/0xJacky/Nginx-UI/server/model"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func handleIssueCertLogChan(logChan chan string) {
|
func handleIssueCertLogChan(logChan chan string) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
log.Println("[Auto Cert] handleIssueCertLogChan", err)
|
log.Println("[Auto Cert] handleIssueCertLogChan", err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
for logString := range logChan {
|
for logString := range logChan {
|
||||||
log.Println("[Auto Cert] Info", logString)
|
log.Println("[Auto Cert] Info", logString)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type AutoCertErrorLog struct {
|
type AutoCertErrorLog struct {
|
||||||
buffer []string
|
buffer []string
|
||||||
cert *model.Cert
|
cert *model.Cert
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *AutoCertErrorLog) SetCertModel(cert *model.Cert) {
|
func (t *AutoCertErrorLog) SetCertModel(cert *model.Cert) {
|
||||||
t.cert = cert
|
t.cert = cert
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *AutoCertErrorLog) Push(text string, err error) {
|
func (t *AutoCertErrorLog) Push(text string, err error) {
|
||||||
t.buffer = append(t.buffer, text+" "+err.Error())
|
t.buffer = append(t.buffer, text+" "+err.Error())
|
||||||
log.Println("[AutoCert Error]", text, err)
|
log.Println("[AutoCert Error]", text, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *AutoCertErrorLog) Exit(text string, err error) {
|
func (t *AutoCertErrorLog) Exit(text string, err error) {
|
||||||
t.buffer = append(t.buffer, text+" "+err.Error())
|
t.buffer = append(t.buffer, text+" "+err.Error())
|
||||||
log.Println("[AutoCert Error]", text, err)
|
log.Println("[AutoCert Error]", text, err)
|
||||||
|
|
||||||
if t.cert == nil {
|
if t.cert == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = t.cert.Updates(&model.Cert{
|
_ = t.cert.Updates(&model.Cert{
|
||||||
Log: t.ToString(),
|
Log: t.ToString(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *AutoCertErrorLog) ToString() (content string) {
|
func (t *AutoCertErrorLog) ToString() (content string) {
|
||||||
|
|
||||||
for _, v := range t.buffer {
|
for _, v := range t.buffer {
|
||||||
content += fmt.Sprintf("[AutoCert Error] %s\n", v)
|
content += fmt.Sprintf("[AutoCert Error] %s\n", v)
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func AutoObtain() {
|
func AutoObtain() {
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
log.Println("[AutoCert] Recover", err)
|
log.Println("[AutoCert] Recover", err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
log.Println("[AutoCert] Start")
|
log.Println("[AutoCert] Start")
|
||||||
autoCertList := model.GetAutoCertList()
|
autoCertList := model.GetAutoCertList()
|
||||||
for _, certModel := range autoCertList {
|
for _, certModel := range autoCertList {
|
||||||
confName := certModel.Filename
|
confName := certModel.Filename
|
||||||
|
|
||||||
errLog := &AutoCertErrorLog{}
|
errLog := &AutoCertErrorLog{}
|
||||||
errLog.SetCertModel(certModel)
|
errLog.SetCertModel(certModel)
|
||||||
|
|
||||||
if len(certModel.Filename) == 0 {
|
if len(certModel.Filename) == 0 {
|
||||||
errLog.Exit("", errors.New("filename is empty"))
|
errLog.Exit("", errors.New("filename is empty"))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(certModel.Domains) == 0 {
|
if len(certModel.Domains) == 0 {
|
||||||
errLog.Exit(confName, errors.New("domains list is empty, "+
|
errLog.Exit(confName, errors.New("domains list is empty, "+
|
||||||
"try to reopen auto-cert for this config:"+confName))
|
"try to reopen auto-cert for this config:"+confName))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if certModel.SSLCertificatePath != "" {
|
if certModel.SSLCertificatePath != "" {
|
||||||
cert, err := GetCertInfo(certModel.SSLCertificatePath)
|
cert, err := GetCertInfo(certModel.SSLCertificatePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errLog.Push("get cert info", err)
|
errLog.Push("get cert info", err)
|
||||||
// Get certificate info error, ignore this domain
|
// Get certificate info error, ignore this domain
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// every week
|
// every week
|
||||||
if time.Now().Sub(cert.NotBefore).Hours()/24 < 7 {
|
if time.Now().Sub(cert.NotBefore).Hours()/24 < 7 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// after 1 mo, reissue certificate
|
// after 1 mo, reissue certificate
|
||||||
logChan := make(chan string, 1)
|
logChan := make(chan string, 1)
|
||||||
errChan := make(chan error, 1)
|
errChan := make(chan error, 1)
|
||||||
|
|
||||||
// support SAN certification
|
// support SAN certification
|
||||||
payload := &ConfigPayload{
|
payload := &ConfigPayload{
|
||||||
ServerName: certModel.Domains,
|
ServerName: certModel.Domains,
|
||||||
ChallengeMethod: certModel.ChallengeMethod,
|
ChallengeMethod: certModel.ChallengeMethod,
|
||||||
DNSCredentialID: certModel.DnsCredentialID,
|
DNSCredentialID: certModel.DnsCredentialID,
|
||||||
}
|
}
|
||||||
go IssueCert(payload, logChan, errChan)
|
go IssueCert(payload, logChan, errChan)
|
||||||
|
|
||||||
go handleIssueCertLogChan(logChan)
|
go handleIssueCertLogChan(logChan)
|
||||||
|
|
||||||
// block, unless errChan closed
|
// block, unless errChan closed
|
||||||
for err := range errChan {
|
for err := range errChan {
|
||||||
errLog.Push("issue cert", err)
|
errLog.Push("issue cert", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
logStr := errLog.ToString()
|
logStr := errLog.ToString()
|
||||||
if logStr != "" {
|
if logStr != "" {
|
||||||
// store error log to db
|
// store error log to db
|
||||||
_ = certModel.Updates(&model.Cert{
|
_ = certModel.Updates(&model.Cert{
|
||||||
Log: errLog.ToString(),
|
Log: errLog.ToString(),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
certModel.ClearLog()
|
certModel.ClearLog()
|
||||||
}
|
}
|
||||||
|
|
||||||
close(logChan)
|
close(logChan)
|
||||||
}
|
}
|
||||||
log.Println("[AutoCert] End")
|
log.Println("[AutoCert] End")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue