Skip to content

Commit 6c7edf5

Browse files
committed
enhance(cert): do not create cert in db if issue failed
1 parent 0967150 commit 6c7edf5

File tree

3 files changed

+23
-19
lines changed

3 files changed

+23
-19
lines changed

api/certificate/issue.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package certificate
22

33
import (
4+
"net/http"
5+
46
"github.com/0xJacky/Nginx-UI/internal/cert"
57
"github.com/0xJacky/Nginx-UI/model"
8+
"github.com/0xJacky/Nginx-UI/query"
69
"github.com/gin-gonic/gin"
710
"github.com/go-acme/lego/v4/certcrypto"
811
"github.com/gorilla/websocket"
912
"github.com/uozi-tech/cosy/logger"
10-
"net/http"
13+
"gorm.io/gen/field"
1114
)
1215

1316
const (
@@ -46,6 +49,7 @@ func handleIssueCertLogChan(conn *websocket.Conn, log *cert.Logger, logChan chan
4649
}
4750

4851
func IssueCert(c *gin.Context) {
52+
name := c.Param("name")
4953
var upGrader = websocket.Upgrader{
5054
CheckOrigin: func(r *http.Request) bool {
5155
return true
@@ -72,16 +76,18 @@ func IssueCert(c *gin.Context) {
7276
return
7377
}
7478

75-
certModel, err := model.FirstOrCreateCert(c.Param("name"), payload.GetKeyType())
79+
certModel, err := model.FirstOrInit(name, payload.GetKeyType())
7680
if err != nil {
7781
logger.Error(err)
7882
return
7983
}
8084

81-
certInfo, _ := cert.GetCertInfo(certModel.SSLCertificatePath)
82-
if certInfo != nil {
83-
payload.Resource = certModel.Resource
84-
payload.NotBefore = certInfo.NotBefore
85+
if certModel.SSLCertificatePath != "" {
86+
certInfo, _ := cert.GetCertInfo(certModel.SSLCertificatePath)
87+
if certInfo != nil {
88+
payload.Resource = certModel.Resource
89+
payload.NotBefore = certInfo.NotBefore
90+
}
8591
}
8692

8793
logChan := make(chan string, 1)
@@ -109,22 +115,23 @@ func IssueCert(c *gin.Context) {
109115
logger.Error(err)
110116
return
111117
}
112-
return
118+
return
113119
}
114120

115-
err = certModel.Updates(&model.Cert{
121+
cert := query.Cert
122+
123+
_, err = cert.Where(cert.Name.Eq(name), cert.Filename.Eq(name), cert.KeyType.Eq(string(payload.KeyType))).
124+
Assign(field.Attrs(&model.Cert{
116125
Domains: payload.ServerName,
117126
SSLCertificatePath: payload.GetCertificatePath(),
118127
SSLCertificateKeyPath: payload.GetCertificateKeyPath(),
119128
AutoCert: model.AutoCertEnabled,
120-
KeyType: payload.KeyType,
121129
ChallengeMethod: payload.ChallengeMethod,
122130
DnsCredentialID: payload.DNSCredentialID,
123131
Resource: payload.Resource,
124132
MustStaple: payload.MustStaple,
125133
LegoDisableCNAMESupport: payload.LegoDisableCNAMESupport,
126-
})
127-
134+
})).FirstOrCreate()
128135
if err != nil {
129136
logger.Error(err)
130137
_ = ws.WriteJSON(IssueCertResponse{

api/certificate/notifications.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

model/cert.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ func FirstOrCreateCert(confName string, keyType certcrypto.KeyType) (c Cert, err
6363
return
6464
}
6565

66+
func FirstOrInit(confName string, keyType certcrypto.KeyType) (c Cert, err error) {
67+
err = db.FirstOrInit(&c, &Cert{Name: confName, Filename: confName, KeyType: keyType}).Error
68+
return
69+
}
70+
6671
func (c *Cert) Insert() error {
6772
return db.Create(c).Error
6873
}

0 commit comments

Comments
 (0)