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

This commit is contained in:
Jacky 2025-03-03 16:26:15 +08:00
parent 09671501e0
commit 6c7edf5c25
No known key found for this signature in database
GPG key ID: 215C21B10DF38B4D
3 changed files with 23 additions and 19 deletions

View file

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

View file

@ -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;

View file

@ -63,6 +63,11 @@ func FirstOrCreateCert(confName string, keyType certcrypto.KeyType) (c Cert, err
return 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 { func (c *Cert) Insert() error {
return db.Create(c).Error return db.Create(c).Error
} }