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