Bladeren bron

enhance(cert): do not create cert in db if issue failed

Jacky 2 maanden geleden
bovenliggende
commit
6c7edf5c25
3 gewijzigde bestanden met toevoegingen van 23 en 19 verwijderingen
  1. 18 11
      api/certificate/issue.go
  2. 0 8
      api/certificate/notifications.ts
  3. 5 0
      model/cert.go

+ 18 - 11
api/certificate/issue.go

@@ -1,13 +1,16 @@
 package certificate
 
 import (
+	"net/http"
+
 	"github.com/0xJacky/Nginx-UI/internal/cert"
 	"github.com/0xJacky/Nginx-UI/model"
+	"github.com/0xJacky/Nginx-UI/query"
 	"github.com/gin-gonic/gin"
 	"github.com/go-acme/lego/v4/certcrypto"
 	"github.com/gorilla/websocket"
 	"github.com/uozi-tech/cosy/logger"
-	"net/http"
+	"gorm.io/gen/field"
 )
 
 const (
@@ -46,6 +49,7 @@ func handleIssueCertLogChan(conn *websocket.Conn, log *cert.Logger, logChan chan
 }
 
 func IssueCert(c *gin.Context) {
+	name := c.Param("name")
 	var upGrader = websocket.Upgrader{
 		CheckOrigin: func(r *http.Request) bool {
 			return true
@@ -72,16 +76,18 @@ func IssueCert(c *gin.Context) {
 		return
 	}
 
-	certModel, err := model.FirstOrCreateCert(c.Param("name"), payload.GetKeyType())
+	certModel, err := model.FirstOrInit(name, payload.GetKeyType())
 	if err != nil {
 		logger.Error(err)
 		return
 	}
 
-	certInfo, _ := cert.GetCertInfo(certModel.SSLCertificatePath)
-	if certInfo != nil {
-		payload.Resource = certModel.Resource
-		payload.NotBefore = certInfo.NotBefore
+	if certModel.SSLCertificatePath != "" {
+		certInfo, _ := cert.GetCertInfo(certModel.SSLCertificatePath)
+		if certInfo != nil {
+			payload.Resource = certModel.Resource
+			payload.NotBefore = certInfo.NotBefore
+		}
 	}
 
 	logChan := make(chan string, 1)
@@ -109,22 +115,23 @@ func IssueCert(c *gin.Context) {
 			logger.Error(err)
 			return
 		}
-		return
+		return 
 	}
 
-	err = certModel.Updates(&model.Cert{
+	cert := query.Cert
+
+	_, err = cert.Where(cert.Name.Eq(name), cert.Filename.Eq(name), cert.KeyType.Eq(string(payload.KeyType))).
+	Assign(field.Attrs(&model.Cert{
 		Domains:                 payload.ServerName,
 		SSLCertificatePath:      payload.GetCertificatePath(),
 		SSLCertificateKeyPath:   payload.GetCertificateKeyPath(),
 		AutoCert:                model.AutoCertEnabled,
-		KeyType:                 payload.KeyType,
 		ChallengeMethod:         payload.ChallengeMethod,
 		DnsCredentialID:         payload.DNSCredentialID,
 		Resource:                payload.Resource,
 		MustStaple:              payload.MustStaple,
 		LegoDisableCNAMESupport: payload.LegoDisableCNAMESupport,
-	})
-
+	})).FirstOrCreate()
 	if err != nil {
 		logger.Error(err)
 		_ = ws.WriteJSON(IssueCertResponse{

+ 0 - 8
api/certificate/notifications.ts

@@ -1,8 +0,0 @@
-// Auto-generated notification messages
-// Do not edit manually
-
-const notifications: Record<string, string> = {
-  "Sync_Certificate_Error_Error": "err.Error()",
-};
-
-export default notifications;

+ 5 - 0
model/cert.go

@@ -63,6 +63,11 @@ func FirstOrCreateCert(confName string, keyType certcrypto.KeyType) (c Cert, err
 	return
 }
 
+func FirstOrInit(confName string, keyType certcrypto.KeyType) (c Cert, err error) {
+	err = db.FirstOrInit(&c, &Cert{Name: confName, Filename: confName, KeyType: keyType}).Error
+	return
+}
+
 func (c *Cert) Insert() error {
 	return db.Create(c).Error
 }