Skip to content

Commit e9d26de

Browse files
committed
enhance: auto obtain cert
1 parent e260860 commit e9d26de

File tree

4 files changed

+70
-74
lines changed

4 files changed

+70
-74
lines changed

frontend/src/views/cert/Cert.vue

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,10 @@ const columns = [{
2929
},
3030
search: true
3131
}, {
32-
title: () => $gettext('Domain'),
33-
dataIndex: 'domain',
32+
title: () => $gettext('Config Name'),
33+
dataIndex: 'filename',
3434
sorter: true,
35-
pithy: true,
36-
edit: {
37-
type: input
38-
},
39-
search: true
35+
pithy: true
4036
}, {
4137
title: () => $gettext('Auto Cert'),
4238
dataIndex: 'auto_cert',

server/api/domain.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,7 @@ func AddDomainToAutoCert(c *gin.Context) {
364364
}
365365

366366
err = certModel.Updates(&model.Cert{
367+
Name: name,
367368
AutoCert: model.AutoCertEnabled,
368369
})
369370

server/model/cert.go

Lines changed: 54 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,97 @@
11
package model
22

33
import (
4-
"github.com/0xJacky/Nginx-UI/server/pkg/nginx"
5-
"github.com/lib/pq"
6-
"os"
4+
"github.com/0xJacky/Nginx-UI/server/pkg/nginx"
5+
"github.com/lib/pq"
6+
"os"
77
)
88

99
const (
10-
AutoCertEnabled = 1
11-
AutoCertDisabled = -1
10+
AutoCertEnabled = 1
11+
AutoCertDisabled = -1
1212
)
1313

1414
type CertDomains []string
1515

1616
type Cert struct {
17-
Model
18-
Name string `json:"name"`
19-
Domains pq.StringArray `json:"domains" gorm:"type:text[]"`
20-
Filename string `json:"filename"`
21-
SSLCertificatePath string `json:"ssl_certificate_path"`
22-
SSLCertificateKeyPath string `json:"ssl_certificate_key_path"`
23-
AutoCert int `json:"auto_cert"`
24-
Log string `json:"log"`
17+
Model
18+
Name string `json:"name"`
19+
Domains pq.StringArray `json:"domains" gorm:"type:text[]"`
20+
Filename string `json:"filename"`
21+
SSLCertificatePath string `json:"ssl_certificate_path"`
22+
SSLCertificateKeyPath string `json:"ssl_certificate_key_path"`
23+
AutoCert int `json:"auto_cert"`
24+
Log string `json:"log"`
2525
}
2626

2727
func FirstCert(confName string) (c Cert, err error) {
28-
err = db.First(&c, &Cert{
29-
Filename: confName,
30-
}).Error
28+
err = db.First(&c, &Cert{
29+
Filename: confName,
30+
}).Error
3131

32-
return
32+
return
3333
}
3434

3535
func FirstOrCreateCert(confName string) (c Cert, err error) {
36-
err = db.FirstOrCreate(&c, &Cert{Filename: confName}).Error
37-
return
36+
err = db.FirstOrCreate(&c, &Cert{Filename: confName}).Error
37+
return
3838
}
3939

4040
func (c *Cert) Insert() error {
41-
return db.Create(c).Error
41+
return db.Create(c).Error
4242
}
4343

4444
func GetAutoCertList() (c []*Cert) {
45-
var t []*Cert
46-
db.Where("auto_cert", AutoCertEnabled).Find(&t)
45+
var t []*Cert
46+
db.Where("auto_cert", AutoCertEnabled).Find(&t)
4747

48-
// check if this domain is enabled
49-
enabledConfig, err := os.ReadDir(nginx.GetConfPath("sites-enabled"))
48+
// check if this domain is enabled
49+
enabledConfig, err := os.ReadDir(nginx.GetConfPath("sites-enabled"))
5050

51-
if err != nil {
52-
return
53-
}
51+
if err != nil {
52+
return
53+
}
5454

55-
enabledConfigMap := make(map[string]bool)
56-
for i := range enabledConfig {
57-
enabledConfigMap[enabledConfig[i].Name()] = true
58-
}
55+
enabledConfigMap := make(map[string]bool)
56+
for i := range enabledConfig {
57+
enabledConfigMap[enabledConfig[i].Name()] = true
58+
}
5959

60-
for _, v := range t {
61-
if enabledConfigMap[v.Filename] == true {
62-
c = append(c, v)
63-
}
64-
}
60+
for _, v := range t {
61+
if enabledConfigMap[v.Filename] == true {
62+
c = append(c, v)
63+
}
64+
}
6565

66-
return
66+
return
6767
}
6868

6969
func GetCertList(name, domain string) (c []Cert) {
70-
tx := db
71-
if name != "" {
72-
tx = tx.Where("name LIKE ? or domain LIKE ?", "%"+name+"%", "%"+name+"%")
73-
}
74-
if domain != "" {
75-
tx = tx.Where("domain LIKE ?", "%"+domain+"%")
76-
}
77-
tx.Find(&c)
78-
return
70+
tx := db
71+
if name != "" {
72+
tx = tx.Where("name LIKE ? or domain LIKE ?", "%"+name+"%", "%"+name+"%")
73+
}
74+
if domain != "" {
75+
tx = tx.Where("domain LIKE ?", "%"+domain+"%")
76+
}
77+
tx.Find(&c)
78+
return
7979
}
8080

8181
func FirstCertByID(id int) (c Cert, err error) {
82-
err = db.First(&c, id).Error
82+
err = db.First(&c, id).Error
8383

84-
return
84+
return
8585
}
8686

8787
func (c *Cert) Updates(n *Cert) error {
88-
return db.Model(&Cert{}).Where("id", c.ID).Updates(n).Error
88+
return db.Model(&Cert{}).Where("id", c.ID).Updates(n).Error
8989
}
9090

9191
func (c *Cert) Remove() error {
92-
return db.Where("filename", c.Filename).Delete(c).Error
92+
if c.Filename == "" {
93+
return db.Delete(c).Error
94+
}
95+
96+
return db.Where("filename", c.Filename).Delete(c).Error
9397
}

server/pkg/cert/auto_cert.go

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -81,23 +81,18 @@ func AutoObtain() {
8181
continue
8282
}
8383

84-
if certModel.SSLCertificatePath == "" {
85-
errLog.Exit(confName, errors.New("ssl_certificate_path is empty, "+
86-
"try to reopen auto-cert for this config:"+confName))
87-
continue
88-
}
89-
90-
cert, err := GetCertInfo(certModel.SSLCertificatePath)
91-
if err != nil {
92-
errLog.Push("get cert info", err)
93-
// Get certificate info error, ignore this domain
94-
continue
95-
}
96-
// every week
97-
if time.Now().Sub(cert.NotBefore).Hours()/24 < 7 {
98-
continue
84+
if certModel.SSLCertificatePath != "" {
85+
cert, err := GetCertInfo(certModel.SSLCertificatePath)
86+
if err != nil {
87+
errLog.Push("get cert info", err)
88+
// Get certificate info error, ignore this domain
89+
continue
90+
}
91+
// every week
92+
if time.Now().Sub(cert.NotBefore).Hours()/24 < 7 {
93+
continue
94+
}
9995
}
100-
//
10196
// after 1 mo, reissue certificate
10297
logChan := make(chan string, 1)
10398
errChan := make(chan error, 1)
@@ -108,7 +103,7 @@ func AutoObtain() {
108103
go handleIssueCertLogChan(logChan)
109104

110105
// block, unless errChan closed
111-
for err = range errChan {
106+
for err := range errChan {
112107
errLog.Push("issue cert", err)
113108
}
114109
// store error log to db

0 commit comments

Comments
 (0)