From 15e89a7717aab3a0c8334d82c92f1293e03781a2 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Fri, 4 Nov 2022 12:04:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=92=8C=E4=BF=AE=E6=94=B9AP?= =?UTF-8?q?I=E8=8A=82=E7=82=B9=E6=97=B6=EF=BC=8C=E6=A3=80=E6=9F=A5HTTP=20A?= =?UTF-8?q?PI=E7=AB=AF=E5=8F=A3=E6=98=AF=E5=90=A6=E5=92=8CGRPC=E7=AB=AF?= =?UTF-8?q?=E5=8F=A3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/default/api/node/createPopup.go | 49 +++++++++++++++---- .../web/actions/default/api/node/update.go | 33 ++++++++++++- web/views/@default/api/node/createPopup.html | 6 +-- web/views/@default/api/node/createPopup.js | 2 +- web/views/@default/api/node/update.html | 6 +-- 5 files changed, 79 insertions(+), 17 deletions(-) diff --git a/internal/web/actions/default/api/node/createPopup.go b/internal/web/actions/default/api/node/createPopup.go index 493f0a41..ed2c7c58 100644 --- a/internal/web/actions/default/api/node/createPopup.go +++ b/internal/web/actions/default/api/node/createPopup.go @@ -4,10 +4,12 @@ import ( "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/oplogs" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/configutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs" "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/lists" ) type CreatePopupAction struct { @@ -40,11 +42,11 @@ func (this *CreatePopupAction) RunPost(params struct { Field("name", params.Name). Require("请输入API节点名称") - httpConfig := &serverconfigs.HTTPProtocolConfig{} - httpsConfig := &serverconfigs.HTTPSProtocolConfig{} + var httpConfig = &serverconfigs.HTTPProtocolConfig{} + var httpsConfig = &serverconfigs.HTTPSProtocolConfig{} // 监听地址 - listens := []*serverconfigs.NetworkAddressConfig{} + var listens = []*serverconfigs.NetworkAddressConfig{} err := json.Unmarshal(params.ListensJSON, &listens) if err != nil { this.ErrorPage(err) @@ -64,15 +66,19 @@ func (this *CreatePopupAction) RunPost(params struct { } // Rest监听地址 - restHTTPConfig := &serverconfigs.HTTPProtocolConfig{} - restHTTPSConfig := &serverconfigs.HTTPSProtocolConfig{} + var restHTTPConfig = &serverconfigs.HTTPProtocolConfig{} + var restHTTPSConfig = &serverconfigs.HTTPSProtocolConfig{} if params.RestIsOn { - restListens := []*serverconfigs.NetworkAddressConfig{} + var restListens = []*serverconfigs.NetworkAddressConfig{} err = json.Unmarshal(params.RestListensJSON, &restListens) if err != nil { this.ErrorPage(err) return } + if len(restListens) == 0 { + this.Fail("请至少添加一个HTTP API监听端口") + return + } for _, addr := range restListens { if addr.Protocol.IsHTTPFamily() { restHTTPConfig.IsOn = true @@ -82,10 +88,35 @@ func (this *CreatePopupAction) RunPost(params struct { restHTTPSConfig.Listen = append(restHTTPSConfig.Listen, addr) } } + + // 是否有端口冲突 + var rpcAddresses = []string{} + for _, listen := range listens { + err := listen.Init() + if err != nil { + this.Fail("校验配置失败:" + configutils.QuoteIP(listen.Host) + ":" + listen.PortRange + ": " + err.Error()) + return + } + rpcAddresses = append(rpcAddresses, listen.Addresses()...) + } + + for _, listen := range restListens { + err := listen.Init() + if err != nil { + this.Fail("校验配置失败:" + configutils.QuoteIP(listen.Host) + ":" + listen.PortRange + ": " + err.Error()) + return + } + for _, address := range listen.Addresses() { + if lists.ContainsString(rpcAddresses, address) { + this.Fail("HTTP API地址 '" + address + "' 和 GRPC地址冲突,请修改后提交") + return + } + } + } } // 证书 - certIds := []int64{} + var certIds = []int64{} if len(params.CertIdsJSON) > 0 { err = json.Unmarshal(params.CertIdsJSON, &certIds) if err != nil { @@ -97,7 +128,7 @@ func (this *CreatePopupAction) RunPost(params struct { this.Fail("请添加至少一个证书") } - certRefs := []*sslconfigs.SSLCertRef{} + var certRefs = []*sslconfigs.SSLCertRef{} for _, certId := range certIds { certRefs = append(certRefs, &sslconfigs.SSLCertRef{ IsOn: true, @@ -131,7 +162,7 @@ func (this *CreatePopupAction) RunPost(params struct { } // 访问地址 - accessAddrs := []*serverconfigs.NetworkAddressConfig{} + var accessAddrs = []*serverconfigs.NetworkAddressConfig{} err = json.Unmarshal(params.AccessAddrsJSON, &accessAddrs) if err != nil { this.ErrorPage(err) diff --git a/internal/web/actions/default/api/node/update.go b/internal/web/actions/default/api/node/update.go index da9acbc7..354b5251 100644 --- a/internal/web/actions/default/api/node/update.go +++ b/internal/web/actions/default/api/node/update.go @@ -4,10 +4,12 @@ import ( "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/oplogs" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/configutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs" "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/lists" "github.com/iwind/TeaGo/maps" ) @@ -175,12 +177,16 @@ func (this *UpdateAction) RunPost(params struct { var restHTTPConfig = &serverconfigs.HTTPProtocolConfig{} var restHTTPSConfig = &serverconfigs.HTTPSProtocolConfig{} if params.RestIsOn { - restListens := []*serverconfigs.NetworkAddressConfig{} + var restListens = []*serverconfigs.NetworkAddressConfig{} err = json.Unmarshal(params.RestListensJSON, &restListens) if err != nil { this.ErrorPage(err) return } + if len(restListens) == 0 { + this.Fail("请至少添加一个HTTP API监听端口") + return + } for _, addr := range restListens { if addr.Protocol.IsHTTPFamily() { restHTTPConfig.IsOn = true @@ -190,6 +196,31 @@ func (this *UpdateAction) RunPost(params struct { restHTTPSConfig.Listen = append(restHTTPSConfig.Listen, addr) } } + + // 是否有端口冲突 + var rpcAddresses = []string{} + for _, listen := range listens { + err := listen.Init() + if err != nil { + this.Fail("校验配置失败:" + configutils.QuoteIP(listen.Host) + ":" + listen.PortRange + ": " + err.Error()) + return + } + rpcAddresses = append(rpcAddresses, listen.Addresses()...) + } + + for _, listen := range restListens { + err := listen.Init() + if err != nil { + this.Fail("校验配置失败:" + configutils.QuoteIP(listen.Host) + ":" + listen.PortRange + ": " + err.Error()) + return + } + for _, address := range listen.Addresses() { + if lists.ContainsString(rpcAddresses, address) { + this.Fail("HTTP API地址 '" + address + "' 和 GRPC地址冲突,请修改后提交") + return + } + } + } } // 证书 diff --git a/web/views/@default/api/node/createPopup.html b/web/views/@default/api/node/createPopup.html index 0acd42b3..49f7d63d 100644 --- a/web/views/@default/api/node/createPopup.html +++ b/web/views/@default/api/node/createPopup.html @@ -41,10 +41,10 @@ - HTTP API监听端口 + HTTP API监听端口 * -

HTTP API节点进程监听的网络端口。

+

HTTP API节点进程监听的网络端口,需要和当前节点的GRPC端口不同。

@@ -54,7 +54,7 @@ - 是否启用 + 启用当前节点
diff --git a/web/views/@default/api/node/createPopup.js b/web/views/@default/api/node/createPopup.js index 8fd1eb9a..7363ef1e 100644 --- a/web/views/@default/api/node/createPopup.js +++ b/web/views/@default/api/node/createPopup.js @@ -18,7 +18,7 @@ Tea.context(function () { this.hasHTTPS = this.grpcAddrs.$any(function (k, v) { return v.protocol == "https" - }) || (this.node.restIsOn && this.restAddrs.$any(function (k, v) { + }) || (this.restIsOn && this.restAddrs.$any(function (k, v) { return v.protocol == "https" })) } diff --git a/web/views/@default/api/node/update.html b/web/views/@default/api/node/update.html index 1075325e..9e468d1f 100644 --- a/web/views/@default/api/node/update.html +++ b/web/views/@default/api/node/update.html @@ -46,10 +46,10 @@ - HTTP API监听端口 + HTTP API监听端口 * -

HTTP API节点进程监听的网络端口。

+

HTTP API节点进程监听的网络端口,需要和当前节点的GRPC端口不同。

@@ -66,7 +66,7 @@ - 启用 + 启用当前节点