Skip to content

Commit 32153a9

Browse files
committed
Added build nginx config from json
1 parent 6f42852 commit 32153a9

File tree

8 files changed

+375
-221
lines changed

8 files changed

+375
-221
lines changed

server/api/cert.go

Lines changed: 152 additions & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -1,169 +1,164 @@
11
package api
22

33
import (
4-
"encoding/json"
5-
"github.com/0xJacky/Nginx-UI/server/settings"
6-
"github.com/0xJacky/Nginx-UI/server/tool"
7-
"github.com/0xJacky/Nginx-UI/server/tool/nginx"
8-
"github.com/gin-gonic/gin"
9-
"github.com/gorilla/websocket"
10-
"log"
11-
"net/http"
12-
"os"
4+
"encoding/json"
5+
"github.com/0xJacky/Nginx-UI/server/settings"
6+
"github.com/0xJacky/Nginx-UI/server/tool"
7+
"github.com/0xJacky/Nginx-UI/server/tool/nginx"
8+
"github.com/gin-gonic/gin"
9+
"github.com/gorilla/websocket"
10+
"log"
11+
"net/http"
12+
"os"
1313
)
1414

1515
func CertInfo(c *gin.Context) {
16-
domain := c.Param("domain")
16+
domain := c.Param("domain")
1717

18-
key, err := tool.GetCertInfo(domain)
18+
key, err := tool.GetCertInfo(domain)
1919

20-
if err != nil {
21-
ErrHandler(c, err)
22-
return
23-
}
24-
25-
c.JSON(http.StatusOK, gin.H{
26-
"subject_name": key.Subject.CommonName,
27-
"issuer_name": key.Issuer.CommonName,
28-
"not_after": key.NotAfter,
29-
"not_before": key.NotBefore,
30-
})
20+
c.JSON(http.StatusOK, gin.H{
21+
"error": err,
22+
"subject_name": key.Subject.CommonName,
23+
"issuer_name": key.Issuer.CommonName,
24+
"not_after": key.NotAfter,
25+
"not_before": key.NotBefore,
26+
})
3127
}
3228

3329
func IssueCert(c *gin.Context) {
34-
domain := c.Param("domain")
35-
var upGrader = websocket.Upgrader{
36-
CheckOrigin: func(r *http.Request) bool {
37-
return true
38-
},
39-
}
40-
41-
// upgrade http to websocket
42-
ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
43-
if err != nil {
44-
log.Println(err)
45-
return
46-
}
47-
48-
defer func(ws *websocket.Conn) {
49-
err := ws.Close()
50-
if err != nil {
51-
log.Println(err)
52-
return
53-
}
54-
}(ws)
55-
56-
for {
57-
// read
58-
mt, message, err := ws.ReadMessage()
59-
if err != nil {
60-
break
61-
}
62-
if string(message) == "go" {
63-
var m []byte
64-
65-
if settings.ServerSettings.Demo {
66-
m, _ = json.Marshal(gin.H{
67-
"status": "error",
68-
"message": "this feature is not available in demo",
69-
})
70-
_ = ws.WriteMessage(mt, m)
71-
return
72-
}
73-
74-
err = tool.IssueCert(domain)
75-
76-
if err != nil {
77-
78-
log.Println(err)
79-
80-
m, err = json.Marshal(gin.H{
81-
"status": "error",
82-
"message": err.Error(),
83-
})
84-
85-
if err != nil {
86-
log.Println(err)
87-
return
88-
}
89-
90-
err = ws.WriteMessage(mt, m)
91-
92-
if err != nil {
93-
log.Println(err)
94-
return
95-
}
96-
97-
return
98-
}
99-
100-
sslCertificatePath := nginx.GetNginxConfPath("ssl/" + domain + "/fullchain.cer")
101-
_, err = os.Stat(sslCertificatePath)
102-
103-
if err != nil {
104-
log.Println(err)
105-
return
106-
}
107-
108-
log.Println("[found]", "fullchain.cer")
109-
m, err = json.Marshal(gin.H{
110-
"status": "success",
111-
"message": "[found] fullchain.cer",
112-
})
113-
114-
if err != nil {
115-
log.Println(err)
116-
return
117-
}
118-
119-
err = ws.WriteMessage(mt, m)
120-
121-
if err != nil {
122-
log.Println(err)
123-
return
124-
}
125-
126-
sslCertificateKeyPath := nginx.GetNginxConfPath("ssl/" + domain + "/" + domain + ".key")
127-
_, err = os.Stat(sslCertificateKeyPath)
128-
129-
if err != nil {
130-
log.Println(err)
131-
return
132-
}
133-
134-
log.Println("[found]", "cert key")
135-
m, err = json.Marshal(gin.H{
136-
"status": "success",
137-
"message": "[found] cert key",
138-
})
139-
140-
if err != nil {
141-
log.Println(err)
142-
}
143-
144-
err = ws.WriteMessage(mt, m)
145-
146-
if err != nil {
147-
log.Println(err)
148-
}
149-
150-
log.Println("申请成功")
151-
m, err = json.Marshal(gin.H{
152-
"status": "success",
153-
"message": "申请成功",
154-
"ssl_certificate": sslCertificatePath,
155-
"ssl_certificate_key": sslCertificateKeyPath,
156-
})
157-
158-
if err != nil {
159-
log.Println(err)
160-
}
161-
162-
err = ws.WriteMessage(mt, m)
163-
164-
if err != nil {
165-
log.Println(err)
166-
}
167-
}
168-
}
30+
domain := c.Param("domain")
31+
var upGrader = websocket.Upgrader{
32+
CheckOrigin: func(r *http.Request) bool {
33+
return true
34+
},
35+
}
36+
37+
// upgrade http to websocket
38+
ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
39+
if err != nil {
40+
log.Println(err)
41+
return
42+
}
43+
44+
defer func(ws *websocket.Conn) {
45+
err := ws.Close()
46+
if err != nil {
47+
log.Println("defer websocket close err", err)
48+
}
49+
}(ws)
50+
51+
for {
52+
// read
53+
mt, message, err := ws.ReadMessage()
54+
if err != nil {
55+
break
56+
}
57+
if string(message) == "go" {
58+
var m []byte
59+
60+
if settings.ServerSettings.Demo {
61+
m, _ = json.Marshal(gin.H{
62+
"status": "error",
63+
"message": "this feature is not available in demo",
64+
})
65+
_ = ws.WriteMessage(mt, m)
66+
return
67+
}
68+
69+
err = tool.IssueCert(domain)
70+
71+
if err != nil {
72+
73+
log.Println(err)
74+
75+
m, err = json.Marshal(gin.H{
76+
"status": "error",
77+
"message": err.Error(),
78+
})
79+
80+
if err != nil {
81+
log.Println(err)
82+
return
83+
}
84+
85+
err = ws.WriteMessage(mt, m)
86+
87+
if err != nil {
88+
log.Println(err)
89+
return
90+
}
91+
92+
return
93+
}
94+
95+
sslCertificatePath := nginx.GetNginxConfPath("ssl/" + domain + "/fullchain.cer")
96+
_, err = os.Stat(sslCertificatePath)
97+
98+
if err != nil {
99+
log.Println(err)
100+
return
101+
}
102+
103+
log.Println("[found]", "fullchain.cer")
104+
m, err = json.Marshal(gin.H{
105+
"status": "success",
106+
"message": "[found] fullchain.cer",
107+
})
108+
109+
if err != nil {
110+
log.Println(err)
111+
return
112+
}
113+
114+
err = ws.WriteMessage(mt, m)
115+
116+
if err != nil {
117+
log.Println(err)
118+
return
119+
}
120+
121+
sslCertificateKeyPath := nginx.GetNginxConfPath("ssl/" + domain + "/" + domain + ".key")
122+
_, err = os.Stat(sslCertificateKeyPath)
123+
124+
if err != nil {
125+
log.Println(err)
126+
return
127+
}
128+
129+
log.Println("[found]", "cert key")
130+
m, err = json.Marshal(gin.H{
131+
"status": "success",
132+
"message": "[found] cert key",
133+
})
134+
135+
if err != nil {
136+
log.Println(err)
137+
}
138+
139+
err = ws.WriteMessage(mt, m)
140+
141+
if err != nil {
142+
log.Println(err)
143+
}
144+
145+
log.Println("申请成功")
146+
m, err = json.Marshal(gin.H{
147+
"status": "success",
148+
"message": "申请成功",
149+
"ssl_certificate": sslCertificatePath,
150+
"ssl_certificate_key": sslCertificateKeyPath,
151+
})
152+
153+
if err != nil {
154+
log.Println(err)
155+
}
156+
157+
err = ws.WriteMessage(mt, m)
158+
159+
if err != nil {
160+
log.Println(err)
161+
}
162+
}
163+
}
169164
}

server/api/domain.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,9 @@ func GetDomain(c *gin.Context) {
7171
enabled = false
7272
}
7373

74-
content, err := ioutil.ReadFile(path)
74+
config, err := nginx.ParseNgxConfig(path)
7575

7676
if err != nil {
77-
if os.IsNotExist(err) {
78-
c.JSON(http.StatusNotFound, gin.H{
79-
"message": err.Error(),
80-
})
81-
return
82-
}
8377
ErrHandler(c, err)
8478
return
8579
}
@@ -89,8 +83,8 @@ func GetDomain(c *gin.Context) {
8983
c.JSON(http.StatusOK, gin.H{
9084
"enabled": enabled,
9185
"name": name,
92-
"config": string(content),
93-
"auto_cert": err == nil,
86+
"config": config.BuildConfig(),
87+
"tokenized": config,
9488
})
9589

9690
}
@@ -150,7 +144,7 @@ func EnableDomain(c *gin.Context) {
150144
return
151145
}
152146

153-
// 测试配置文件,不通过则撤回启用
147+
// Test nginx config, if not pass then rollback.
154148
err = nginx.TestNginxConf()
155149
if err != nil {
156150
_ = os.Remove(enabledConfigFilePath)

server/test/nextcloud_ngx.conf

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ server {
1717

1818
fastcgi_hide_header X-Powered-By; # Remove X-Powered-By, which is an information leak
1919

20+
if ($invalid_referer) {
21+
return 403;
22+
}
23+
2024
location = /robots.txt {
2125
allow all;
2226
log_not_found off;
@@ -54,13 +58,13 @@ server {
5458
fastcgi_buffers 64 4K;
5559

5660
# Enable gzip but do not remove ETag headers
57-
gzip on; gzip_vary on; location /x/ {} gzip_comp_level 4;
61+
gzip on; gzip_vary on; location /x/ {}gzip_comp_level 4;
5862
gzip_min_length 256;gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
5963
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
6064

6165
# Uncomment if your server is build with the ngx_pagespeed module
6266
# This module is currently not supported.
63-
#pagespeed off;
67+
# pagespeed off;
6468
location / {
6569
if ( $http_user_agent ~ ^DavClnt ) {
6670
return 302 /remote.php/webdav/$is_args$args;

0 commit comments

Comments
 (0)