Skip to content

Commit 136f0fd

Browse files
committed
源站支持客户端证书
1 parent 021dc13 commit 136f0fd

11 files changed

Lines changed: 106 additions & 5 deletions

File tree

internal/web/actions/default/servers/groups/group/settings/httpReverseProxy/index.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ func (this *IndexAction) RunGet(params struct {
6363
"name": originConfig.Name,
6464
"isOn": originConfig.IsOn,
6565
"domains": originConfig.Domains,
66+
"hasCert": originConfig.Cert != nil,
6667
}
6768
primaryOriginMaps = append(primaryOriginMaps, m)
6869
}
@@ -77,6 +78,7 @@ func (this *IndexAction) RunGet(params struct {
7778
"name": originConfig.Name,
7879
"isOn": originConfig.IsOn,
7980
"domains": originConfig.Domains,
81+
"hasCert": originConfig.Cert != nil,
8082
}
8183
backupOriginMaps = append(backupOriginMaps, m)
8284
}

internal/web/actions/default/servers/groups/group/settings/tcpReverseProxy/index.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ func (this *IndexAction) RunGet(params struct {
6363
"name": originConfig.Name,
6464
"isOn": originConfig.IsOn,
6565
"domains": originConfig.Domains,
66+
"hasCert": originConfig.Cert != nil,
6667
}
6768
primaryOriginMaps = append(primaryOriginMaps, m)
6869
}
@@ -77,6 +78,7 @@ func (this *IndexAction) RunGet(params struct {
7778
"name": originConfig.Name,
7879
"isOn": originConfig.IsOn,
7980
"domains": originConfig.Domains,
81+
"hasCert": originConfig.Cert != nil,
8082
}
8183
backupOriginMaps = append(backupOriginMaps, m)
8284
}

internal/web/actions/default/servers/groups/group/settings/udpReverseProxy/index.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ func (this *IndexAction) RunGet(params struct {
6363
"name": originConfig.Name,
6464
"isOn": originConfig.IsOn,
6565
"domains": originConfig.Domains,
66+
"hasCert": originConfig.Cert != nil,
6667
}
6768
primaryOriginMaps = append(primaryOriginMaps, m)
6869
}
@@ -77,6 +78,7 @@ func (this *IndexAction) RunGet(params struct {
7778
"name": originConfig.Name,
7879
"isOn": originConfig.IsOn,
7980
"domains": originConfig.Domains,
81+
"hasCert": originConfig.Cert != nil,
8082
}
8183
backupOriginMaps = append(backupOriginMaps, m)
8284
}

internal/web/actions/default/servers/server/settings/locations/reverseProxy/index.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ func (this *IndexAction) RunGet(params struct {
6464
"name": originConfig.Name,
6565
"isOn": originConfig.IsOn,
6666
"domains": originConfig.Domains,
67+
"hasCert": originConfig.Cert != nil,
6768
}
6869
primaryOriginMaps = append(primaryOriginMaps, m)
6970
}
@@ -78,6 +79,7 @@ func (this *IndexAction) RunGet(params struct {
7879
"name": originConfig.Name,
7980
"isOn": originConfig.IsOn,
8081
"domains": originConfig.Domains,
82+
"hasCert": originConfig.Cert != nil,
8183
}
8284
backupOriginMaps = append(backupOriginMaps, m)
8385
}

internal/web/actions/default/servers/server/settings/origins/addPopup.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
99
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
1010
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
11+
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
1112
"github.com/iwind/TeaGo/actions"
1213
"net/url"
1314
"regexp"
@@ -62,6 +63,8 @@ func (this *AddPopupAction) RunPost(params struct {
6263
MaxIdleConns int32
6364
IdleTimeout int
6465

66+
CertIdsJSON []byte
67+
6568
DomainsJSON []byte
6669

6770
Description string
@@ -129,6 +132,31 @@ func (this *AddPopupAction) RunPost(params struct {
129132
return
130133
}
131134

135+
// 证书
136+
var certIds = []int64{}
137+
if len(params.CertIdsJSON) > 0 {
138+
err = json.Unmarshal(params.CertIdsJSON, &certIds)
139+
if err != nil {
140+
this.ErrorPage(err)
141+
return
142+
}
143+
}
144+
var certRefJSON []byte
145+
if len(certIds) > 0 {
146+
var certId = certIds[0]
147+
if certId > 0 {
148+
var certRef = &sslconfigs.SSLCertRef{
149+
IsOn: true,
150+
CertId: certId,
151+
}
152+
certRefJSON, err = json.Marshal(certRef)
153+
if err != nil {
154+
this.ErrorPage(err)
155+
return
156+
}
157+
}
158+
}
159+
132160
var domains = []string{}
133161
if len(params.DomainsJSON) > 0 {
134162
err = json.Unmarshal(params.DomainsJSON, &domains)
@@ -158,6 +186,7 @@ func (this *AddPopupAction) RunPost(params struct {
158186
IdleTimeoutJSON: idleTimeoutJSON,
159187
MaxConns: params.MaxConns,
160188
MaxIdleConns: params.MaxIdleConns,
189+
CertRefJSON: certRefJSON,
161190
Domains: domains,
162191
})
163192
if err != nil {

internal/web/actions/default/servers/server/settings/origins/updatePopup.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
88
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
99
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
10+
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
1011
"github.com/iwind/TeaGo/actions"
1112
"github.com/iwind/TeaGo/maps"
1213
"github.com/iwind/TeaGo/types"
@@ -86,6 +87,12 @@ func (this *UpdatePopupAction) RunGet(params struct {
8687
config.Domains = []string{}
8788
}
8889

90+
// 重置数据
91+
if config.Cert != nil {
92+
config.Cert.CertData = nil
93+
config.Cert.KeyData = nil
94+
}
95+
8996
this.Data["origin"] = maps.Map{
9097
"id": config.Id,
9198
"protocol": config.Addr.Protocol,
@@ -99,6 +106,7 @@ func (this *UpdatePopupAction) RunGet(params struct {
99106
"idleTimeout": idleTimeout,
100107
"maxConns": config.MaxConns,
101108
"maxIdleConns": config.MaxIdleConns,
109+
"cert": config.Cert,
102110
"domains": config.Domains,
103111
}
104112

@@ -121,6 +129,7 @@ func (this *UpdatePopupAction) RunPost(params struct {
121129
MaxIdleConns int32
122130
IdleTimeout int
123131

132+
CertIdsJSON []byte
124133
DomainsJSON []byte
125134

126135
Description string
@@ -188,6 +197,31 @@ func (this *UpdatePopupAction) RunPost(params struct {
188197
return
189198
}
190199

200+
// 证书
201+
var certIds = []int64{}
202+
if len(params.CertIdsJSON) > 0 {
203+
err = json.Unmarshal(params.CertIdsJSON, &certIds)
204+
if err != nil {
205+
this.ErrorPage(err)
206+
return
207+
}
208+
}
209+
var certRefJSON []byte
210+
if len(certIds) > 0 {
211+
var certId = certIds[0]
212+
if certId > 0 {
213+
var certRef = &sslconfigs.SSLCertRef{
214+
IsOn: true,
215+
CertId: certId,
216+
}
217+
certRefJSON, err = json.Marshal(certRef)
218+
if err != nil {
219+
this.ErrorPage(err)
220+
return
221+
}
222+
}
223+
}
224+
191225
var domains = []string{}
192226
if len(params.DomainsJSON) > 0 {
193227
err = json.Unmarshal(params.DomainsJSON, &domains)
@@ -218,6 +252,7 @@ func (this *UpdatePopupAction) RunPost(params struct {
218252
IdleTimeoutJSON: idleTimeoutJSON,
219253
MaxConns: params.MaxConns,
220254
MaxIdleConns: params.MaxIdleConns,
255+
CertRefJSON: certRefJSON,
221256
Domains: domains,
222257
})
223258
if err != nil {

internal/web/actions/default/servers/server/settings/reverseProxy/index.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ func (this *IndexAction) RunGet(params struct {
9191
"name": originConfig.Name,
9292
"isOn": originConfig.IsOn,
9393
"domains": originConfig.Domains,
94+
"hasCert": originConfig.Cert != nil,
9495
}
9596
primaryOriginMaps = append(primaryOriginMaps, m)
9697
}
@@ -105,6 +106,7 @@ func (this *IndexAction) RunGet(params struct {
105106
"name": originConfig.Name,
106107
"isOn": originConfig.IsOn,
107108
"domains": originConfig.Domains,
109+
"hasCert": originConfig.Cert != nil,
108110
}
109111
backupOriginMaps = append(backupOriginMaps, m)
110112
}

web/public/js/components/server/origin-list-box.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ Vue.component("origin-list-table", {
9292
<div v-if="origin.domains != null && origin.domains.length > 0">
9393
<grey-label v-for="domain in origin.domains">{{domain}}</grey-label>
9494
</div>
95+
<div v-if="origin.hasCert">
96+
<tiny-basic-label>证书</tiny-basic-label>
97+
</div>
9598
</td>
9699
<td :class="{disabled:!origin.isOn}">{{origin.weight}}</td>
97100
<td>

web/public/js/components/server/ssl-certs-box.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
11
Vue.component("ssl-certs-box", {
22
props: [
33
"v-certs", // 证书列表
4+
"v-cert", // 单个证书
45
"v-protocol", // 协议:https|tls
5-
"v-view-size", // 弹窗尺寸
6-
"v-single-mode" // 单证书模式
6+
"v-view-size", // 弹窗尺寸:normal, mini
7+
"v-single-mode", // 单证书模式
8+
"v-description" // 描述文字
79
],
810
data: function () {
911
let certs = this.vCerts
1012
if (certs == null) {
1113
certs = []
1214
}
15+
if (this.vCert != null) {
16+
certs.push(this.vCert)
17+
}
18+
19+
let description = this.vDescription
20+
if (description == null || typeof (description) != "string") {
21+
description = ""
22+
}
1323

1424
return {
15-
certs: certs
25+
certs: certs,
26+
description: description
1627
}
1728
},
1829
methods: {
@@ -77,13 +88,14 @@ Vue.component("ssl-certs-box", {
7788
template: `<div>
7889
<input type="hidden" name="certIdsJSON" :value="JSON.stringify(certIds())"/>
7990
<div v-if="certs != null && certs.length > 0">
80-
<div class="ui label small" v-for="(cert, index) in certs">
91+
<div class="ui label small basic" v-for="(cert, index) in certs">
8192
{{cert.name}} / {{cert.dnsNames}} / 有效至{{formatTime(cert.timeEndAt)}} &nbsp; <a href="" title="删除" @click.prevent="removeCert(index)"><i class="icon remove"></i></a>
8293
</div>
8394
<div class="ui divider" v-if="buttonsVisible()"></div>
8495
</div>
8596
<div v-else>
86-
<span class="red">选择或上传证书后<span v-if="vProtocol == 'https'">HTTPS</span><span v-if="vProtocol == 'tls'">TLS</span>服务才能生效。</span>
97+
<span class="red" v-if="description.length == 0">选择或上传证书后<span v-if="vProtocol == 'https'">HTTPS</span><span v-if="vProtocol == 'tls'">TLS</span>服务才能生效。</span>
98+
<span class="grey" v-if="description.length > 0">{{description}}</span>
8799
<div class="ui divider" v-if="buttonsVisible()"></div>
88100
</div>
89101
<div v-if="buttonsVisible()">

web/views/@default/servers/server/settings/origins/addPopup.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ <h3>添加源站</h3>
3939
<td colspan="2"><more-options-indicator></more-options-indicator></td>
4040
</tr>
4141
<tbody v-show="moreOptionsVisible">
42+
<tr v-if="protocol == 'https' || protocol == 'tls'">
43+
<td>{{protocol.toUpperCase()}}证书</td>
44+
<td>
45+
<ssl-certs-box :v-single-mode="true" :v-view-size="'mini'" :v-description="'可以选择连接源站使用的证书。'"></ssl-certs-box>
46+
</td>
47+
</tr>
4248
<tr v-if="isHTTP">
4349
<td>专属域名</td>
4450
<td>

0 commit comments

Comments
 (0)