mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-18 06:40:25 +08:00
添加和修改API节点时,检查HTTP API端口是否和GRPC端口冲突
This commit is contained in:
@@ -4,10 +4,12 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/oplogs"
|
"github.com/TeaOSLab/EdgeAdmin/internal/oplogs"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
"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/rpc/pb"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
|
||||||
"github.com/iwind/TeaGo/actions"
|
"github.com/iwind/TeaGo/actions"
|
||||||
|
"github.com/iwind/TeaGo/lists"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreatePopupAction struct {
|
type CreatePopupAction struct {
|
||||||
@@ -40,11 +42,11 @@ func (this *CreatePopupAction) RunPost(params struct {
|
|||||||
Field("name", params.Name).
|
Field("name", params.Name).
|
||||||
Require("请输入API节点名称")
|
Require("请输入API节点名称")
|
||||||
|
|
||||||
httpConfig := &serverconfigs.HTTPProtocolConfig{}
|
var httpConfig = &serverconfigs.HTTPProtocolConfig{}
|
||||||
httpsConfig := &serverconfigs.HTTPSProtocolConfig{}
|
var httpsConfig = &serverconfigs.HTTPSProtocolConfig{}
|
||||||
|
|
||||||
// 监听地址
|
// 监听地址
|
||||||
listens := []*serverconfigs.NetworkAddressConfig{}
|
var listens = []*serverconfigs.NetworkAddressConfig{}
|
||||||
err := json.Unmarshal(params.ListensJSON, &listens)
|
err := json.Unmarshal(params.ListensJSON, &listens)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
@@ -64,15 +66,19 @@ func (this *CreatePopupAction) RunPost(params struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Rest监听地址
|
// Rest监听地址
|
||||||
restHTTPConfig := &serverconfigs.HTTPProtocolConfig{}
|
var restHTTPConfig = &serverconfigs.HTTPProtocolConfig{}
|
||||||
restHTTPSConfig := &serverconfigs.HTTPSProtocolConfig{}
|
var restHTTPSConfig = &serverconfigs.HTTPSProtocolConfig{}
|
||||||
if params.RestIsOn {
|
if params.RestIsOn {
|
||||||
restListens := []*serverconfigs.NetworkAddressConfig{}
|
var restListens = []*serverconfigs.NetworkAddressConfig{}
|
||||||
err = json.Unmarshal(params.RestListensJSON, &restListens)
|
err = json.Unmarshal(params.RestListensJSON, &restListens)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if len(restListens) == 0 {
|
||||||
|
this.Fail("请至少添加一个HTTP API监听端口")
|
||||||
|
return
|
||||||
|
}
|
||||||
for _, addr := range restListens {
|
for _, addr := range restListens {
|
||||||
if addr.Protocol.IsHTTPFamily() {
|
if addr.Protocol.IsHTTPFamily() {
|
||||||
restHTTPConfig.IsOn = true
|
restHTTPConfig.IsOn = true
|
||||||
@@ -82,10 +88,35 @@ func (this *CreatePopupAction) RunPost(params struct {
|
|||||||
restHTTPSConfig.Listen = append(restHTTPSConfig.Listen, addr)
|
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 {
|
if len(params.CertIdsJSON) > 0 {
|
||||||
err = json.Unmarshal(params.CertIdsJSON, &certIds)
|
err = json.Unmarshal(params.CertIdsJSON, &certIds)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -97,7 +128,7 @@ func (this *CreatePopupAction) RunPost(params struct {
|
|||||||
this.Fail("请添加至少一个证书")
|
this.Fail("请添加至少一个证书")
|
||||||
}
|
}
|
||||||
|
|
||||||
certRefs := []*sslconfigs.SSLCertRef{}
|
var certRefs = []*sslconfigs.SSLCertRef{}
|
||||||
for _, certId := range certIds {
|
for _, certId := range certIds {
|
||||||
certRefs = append(certRefs, &sslconfigs.SSLCertRef{
|
certRefs = append(certRefs, &sslconfigs.SSLCertRef{
|
||||||
IsOn: true,
|
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)
|
err = json.Unmarshal(params.AccessAddrsJSON, &accessAddrs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/oplogs"
|
"github.com/TeaOSLab/EdgeAdmin/internal/oplogs"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
"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/rpc/pb"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
|
||||||
"github.com/iwind/TeaGo/actions"
|
"github.com/iwind/TeaGo/actions"
|
||||||
|
"github.com/iwind/TeaGo/lists"
|
||||||
"github.com/iwind/TeaGo/maps"
|
"github.com/iwind/TeaGo/maps"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -175,12 +177,16 @@ func (this *UpdateAction) RunPost(params struct {
|
|||||||
var restHTTPConfig = &serverconfigs.HTTPProtocolConfig{}
|
var restHTTPConfig = &serverconfigs.HTTPProtocolConfig{}
|
||||||
var restHTTPSConfig = &serverconfigs.HTTPSProtocolConfig{}
|
var restHTTPSConfig = &serverconfigs.HTTPSProtocolConfig{}
|
||||||
if params.RestIsOn {
|
if params.RestIsOn {
|
||||||
restListens := []*serverconfigs.NetworkAddressConfig{}
|
var restListens = []*serverconfigs.NetworkAddressConfig{}
|
||||||
err = json.Unmarshal(params.RestListensJSON, &restListens)
|
err = json.Unmarshal(params.RestListensJSON, &restListens)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if len(restListens) == 0 {
|
||||||
|
this.Fail("请至少添加一个HTTP API监听端口")
|
||||||
|
return
|
||||||
|
}
|
||||||
for _, addr := range restListens {
|
for _, addr := range restListens {
|
||||||
if addr.Protocol.IsHTTPFamily() {
|
if addr.Protocol.IsHTTPFamily() {
|
||||||
restHTTPConfig.IsOn = true
|
restHTTPConfig.IsOn = true
|
||||||
@@ -190,6 +196,31 @@ func (this *UpdateAction) RunPost(params struct {
|
|||||||
restHTTPSConfig.Listen = append(restHTTPSConfig.Listen, addr)
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 证书
|
// 证书
|
||||||
|
|||||||
@@ -41,10 +41,10 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-if="restIsOn">
|
<tr v-if="restIsOn">
|
||||||
<td class="color-border">HTTP API监听端口</td>
|
<td class="color-border">HTTP API监听端口 *</td>
|
||||||
<td>
|
<td>
|
||||||
<network-addresses-box :v-name="'restListensJSON'" :v-server-type="'httpWeb'" @change="changeRestListens"></network-addresses-box>
|
<network-addresses-box :v-name="'restListensJSON'" :v-server-type="'httpWeb'" @change="changeRestListens"></network-addresses-box>
|
||||||
<p class="comment">HTTP API节点进程监听的网络端口。</p>
|
<p class="comment">HTTP API节点进程监听的网络端口,需要和当前节点的GRPC端口不同。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>是否启用</td>
|
<td>启用当前节点</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="ui checkbox">
|
<div class="ui checkbox">
|
||||||
<input type="checkbox" name="isOn" value="1" checked="checked"/>
|
<input type="checkbox" name="isOn" value="1" checked="checked"/>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Tea.context(function () {
|
|||||||
|
|
||||||
this.hasHTTPS = this.grpcAddrs.$any(function (k, v) {
|
this.hasHTTPS = this.grpcAddrs.$any(function (k, v) {
|
||||||
return v.protocol == "https"
|
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"
|
return v.protocol == "https"
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,10 +46,10 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-if="node.restIsOn">
|
<tr v-if="node.restIsOn">
|
||||||
<td class="color-border">HTTP API监听端口</td>
|
<td class="color-border">HTTP API监听端口 *</td>
|
||||||
<td>
|
<td>
|
||||||
<network-addresses-box :v-name="'restListensJSON'" :v-server-type="'httpWeb'" @change="changeRestListens" :v-addresses="node.restListens"></network-addresses-box>
|
<network-addresses-box :v-name="'restListensJSON'" :v-server-type="'httpWeb'" @change="changeRestListens" :v-addresses="node.restListens"></network-addresses-box>
|
||||||
<p class="comment">HTTP API节点进程监听的网络端口。</p>
|
<p class="comment">HTTP API节点进程监听的网络端口,需要和当前节点的GRPC端口不同。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>启用</td>
|
<td>启用当前节点</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="ui checkbox">
|
<div class="ui checkbox">
|
||||||
<input type="checkbox" name="isOn" value="1" v-model="node.isOn"/>
|
<input type="checkbox" name="isOn" value="1" v-model="node.isOn"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user