阶段性提交

This commit is contained in:
GoEdgeLab
2020-09-15 14:44:52 +08:00
parent e3501a5a68
commit 4807a6672f
27 changed files with 1354 additions and 115 deletions

View File

@@ -0,0 +1,140 @@
package origins
import (
"encoding/json"
"errors"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"github.com/iwind/TeaGo/actions"
"regexp"
"strings"
)
// 添加源站
type AddPopupAction struct {
actionutils.ParentAction
}
func (this *AddPopupAction) RunGet(params struct {
ServerId int64
ReverseProxyId int64
OriginType string
}) {
this.Data["reverseProxyId"] = params.ReverseProxyId
this.Data["originType"] = params.OriginType
serverTypeResp, err := this.RPC().ServerRPC().FindEnabledServerType(this.AdminContext(), &pb.FindEnabledServerTypeRequest{ServerId: params.ServerId})
if err != nil {
this.ErrorPage(err)
return
}
serverType := serverTypeResp.Type
this.Data["serverType"] = serverType
this.Show()
}
func (this *AddPopupAction) RunPost(params struct {
OriginType string
ReverseProxyId int64
Protocol string
Addr string
Must *actions.Must
}) {
params.Must.
Field("addr", params.Addr).
Require("请输入源站地址")
addr := regexp.MustCompile(`\s+`).ReplaceAllString(params.Addr, "")
portIndex := strings.LastIndex(params.Addr, ":")
if portIndex < 0 {
this.Fail("地址中需要带有端口")
}
host := addr[:portIndex]
port := addr[portIndex+1:]
resp, err := this.RPC().OriginServerRPC().CreateOriginServer(this.AdminContext(), &pb.CreateOriginServerRequest{
Name: "",
Addr: &pb.NetworkAddress{
Protocol: params.Protocol,
Host: host,
PortRange: port,
},
Description: "",
})
if err != nil {
this.ErrorPage(err)
return
}
originId := resp.OriginId
originConfigResp, err := this.RPC().OriginServerRPC().FindEnabledOriginServerConfig(this.AdminContext(), &pb.FindEnabledOriginServerConfigRequest{OriginId: originId})
if err != nil {
this.ErrorPage(err)
return
}
originConfigData := originConfigResp.Config
var originConfig = &serverconfigs.OriginServerConfig{}
err = json.Unmarshal(originConfigData, originConfig)
if err != nil {
this.ErrorPage(err)
return
}
reverseProxyResp, err := this.RPC().ReverseProxyRPC().FindEnabledReverseProxy(this.AdminContext(), &pb.FindEnabledReverseProxyRequest{ReverseProxyId: params.ReverseProxyId})
if err != nil {
this.ErrorPage(err)
return
}
reverseProxy := reverseProxyResp.ReverseProxy
if reverseProxy == nil {
this.ErrorPage(errors.New("reverse proxy should not be nil"))
return
}
origins := []*serverconfigs.OriginServerConfig{}
switch params.OriginType {
case "primary":
if len(reverseProxy.PrimaryOriginsJSON) > 0 {
err = json.Unmarshal(reverseProxy.PrimaryOriginsJSON, &origins)
if err != nil {
this.ErrorPage(err)
return
}
}
case "backup":
if len(reverseProxy.BackupOriginsJSON) > 0 {
err = json.Unmarshal(reverseProxy.BackupOriginsJSON, &origins)
if err != nil {
this.ErrorPage(err)
return
}
}
}
origins = append(origins, originConfig)
originsData, err := json.Marshal(origins)
if err != nil {
this.ErrorPage(err)
return
}
switch params.OriginType {
case "primary":
_, err = this.RPC().ReverseProxyRPC().UpdateReverseProxyPrimaryOrigins(this.AdminContext(), &pb.UpdateReverseProxyPrimaryOriginsRequest{
ReverseProxyId: params.ReverseProxyId,
OriginsJSON: originsData,
})
case "backup":
_, err = this.RPC().ReverseProxyRPC().UpdateReverseProxyBackupOrigins(this.AdminContext(), &pb.UpdateReverseProxyBackupOriginsRequest{
ReverseProxyId: params.ReverseProxyId,
OriginsJSON: originsData,
})
}
if err != nil {
this.ErrorPage(err)
return
}
this.Success()
}

View File

@@ -0,0 +1,85 @@
package origins
import (
"encoding/json"
"errors"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
)
type DeleteAction struct {
actionutils.ParentAction
}
func (this *DeleteAction) RunPost(params struct {
ReverseProxyId int64
OriginId int64
OriginType string
}) {
reverseProxyResp, err := this.RPC().ReverseProxyRPC().FindEnabledReverseProxy(this.AdminContext(), &pb.FindEnabledReverseProxyRequest{ReverseProxyId: params.ReverseProxyId})
if err != nil {
this.ErrorPage(err)
return
}
reverseProxy := reverseProxyResp.ReverseProxy
if reverseProxy == nil {
this.ErrorPage(errors.New("reverse proxy is nil"))
return
}
origins := []*serverconfigs.OriginServerConfig{}
switch params.OriginType {
case "primary":
err = json.Unmarshal(reverseProxy.PrimaryOriginsJSON, &origins)
if err != nil {
this.ErrorPage(err)
return
}
case "backup":
err = json.Unmarshal(reverseProxy.BackupOriginsJSON, &origins)
if err != nil {
this.ErrorPage(err)
return
}
default:
this.ErrorPage(errors.New("invalid origin type '" + params.OriginType + "'"))
return
}
result := []*serverconfigs.OriginServerConfig{}
for _, origin := range origins {
if origin.Id == params.OriginId {
continue
}
result = append(result, origin)
}
resultData, err := json.Marshal(result)
if err != nil {
this.ErrorPage(err)
return
}
switch params.OriginType {
case "primary":
_, err = this.RPC().ReverseProxyRPC().UpdateReverseProxyPrimaryOrigins(this.AdminContext(), &pb.UpdateReverseProxyPrimaryOriginsRequest{
ReverseProxyId: params.ReverseProxyId,
OriginsJSON: resultData,
})
if err != nil {
this.ErrorPage(err)
return
}
case "backup":
_, err = this.RPC().ReverseProxyRPC().UpdateReverseProxyBackupOrigins(this.AdminContext(), &pb.UpdateReverseProxyBackupOriginsRequest{
ReverseProxyId: params.ReverseProxyId,
OriginsJSON: resultData,
})
if err != nil {
this.ErrorPage(err)
return
}
}
this.Success()
}

View File

@@ -0,0 +1,18 @@
package origins
import (
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
"github.com/iwind/TeaGo"
)
func init() {
TeaGo.BeforeStart(func(server *TeaGo.Server) {
server.
Helper(helpers.NewUserMustAuth()).
Prefix("/servers/server/settings/origins").
GetPost("/addPopup", new(AddPopupAction)).
Post("/delete", new(DeleteAction)).
GetPost("/updatePopup", new(UpdatePopupAction)).
EndAll()
})
}

View File

@@ -0,0 +1,178 @@
package origins
import (
"encoding/json"
"errors"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"github.com/iwind/TeaGo/actions"
"github.com/iwind/TeaGo/maps"
"regexp"
"strings"
)
// 修改源站
type UpdatePopupAction struct {
actionutils.ParentAction
}
func (this *UpdatePopupAction) Init() {
this.Nav("", "", "")
}
func (this *UpdatePopupAction) RunGet(params struct {
ServerId int64
ReverseProxyId int64
OriginType string
OriginId int64
}) {
this.Data["originType"] = params.OriginType
this.Data["reverseProxyId"] = params.ReverseProxyId
this.Data["originId"] = params.OriginId
serverTypeResp, err := this.RPC().ServerRPC().FindEnabledServerType(this.AdminContext(), &pb.FindEnabledServerTypeRequest{
ServerId: params.ServerId,
})
if err != nil {
this.ErrorPage(err)
return
}
this.Data["serverType"] = serverTypeResp.Type
// 源站信息
originResp, err := this.RPC().OriginServerRPC().FindEnabledOriginServerConfig(this.AdminContext(), &pb.FindEnabledOriginServerConfigRequest{OriginId: params.OriginId})
if err != nil {
this.ErrorPage(err)
return
}
configData := originResp.Config
config := &serverconfigs.OriginServerConfig{}
err = json.Unmarshal(configData, config)
if err != nil {
this.ErrorPage(err)
return
}
this.Data["origin"] = maps.Map{
"id": config.Id,
"protocol": config.Addr.Protocol,
"addr": config.Addr.Host + ":" + config.Addr.PortRange,
}
this.Show()
}
func (this *UpdatePopupAction) RunPost(params struct {
OriginType string
OriginId int64
ReverseProxyId int64
Protocol string
Addr string
Must *actions.Must
}) {
params.Must.
Field("addr", params.Addr).
Require("请输入源站地址")
addr := regexp.MustCompile(`\s+`).ReplaceAllString(params.Addr, "")
portIndex := strings.LastIndex(params.Addr, ":")
if portIndex < 0 {
this.Fail("地址中需要带有端口")
}
host := addr[:portIndex]
port := addr[portIndex+1:]
_, err := this.RPC().OriginServerRPC().UpdateOriginServer(this.AdminContext(), &pb.UpdateOriginServerRequest{
OriginId: params.OriginId,
Name: "",
Addr: &pb.NetworkAddress{
Protocol: params.Protocol,
Host: host,
PortRange: port,
},
Description: "",
})
if err != nil {
this.ErrorPage(err)
return
}
originConfigResp, err := this.RPC().OriginServerRPC().FindEnabledOriginServerConfig(this.AdminContext(), &pb.FindEnabledOriginServerConfigRequest{OriginId: params.OriginId})
if err != nil {
this.ErrorPage(err)
return
}
originConfigData := originConfigResp.Config
var originConfig = &serverconfigs.OriginServerConfig{}
err = json.Unmarshal(originConfigData, originConfig)
if err != nil {
this.ErrorPage(err)
return
}
// 查找反向代理信息
reverseProxyResp, err := this.RPC().ReverseProxyRPC().FindEnabledReverseProxy(this.AdminContext(), &pb.FindEnabledReverseProxyRequest{ReverseProxyId: params.ReverseProxyId})
if err != nil {
this.ErrorPage(err)
return
}
reverseProxy := reverseProxyResp.ReverseProxy
if reverseProxy == nil {
this.ErrorPage(errors.New("reverse proxy should not be nil"))
return
}
origins := []*serverconfigs.OriginServerConfig{}
switch params.OriginType {
case "primary":
if len(reverseProxy.PrimaryOriginsJSON) > 0 {
err = json.Unmarshal(reverseProxy.PrimaryOriginsJSON, &origins)
if err != nil {
this.ErrorPage(err)
return
}
}
case "backup":
if len(reverseProxy.BackupOriginsJSON) > 0 {
err = json.Unmarshal(reverseProxy.BackupOriginsJSON, &origins)
if err != nil {
this.ErrorPage(err)
return
}
}
}
for index, origin := range origins {
if origin.Id == params.OriginId {
origins[index] = originConfig
}
}
// 保存
originsData, err := json.Marshal(origins)
if err != nil {
this.ErrorPage(err)
return
}
switch params.OriginType {
case "primary":
_, err = this.RPC().ReverseProxyRPC().UpdateReverseProxyPrimaryOrigins(this.AdminContext(), &pb.UpdateReverseProxyPrimaryOriginsRequest{
ReverseProxyId: params.ReverseProxyId,
OriginsJSON: originsData,
})
case "backup":
_, err = this.RPC().ReverseProxyRPC().UpdateReverseProxyBackupOrigins(this.AdminContext(), &pb.UpdateReverseProxyBackupOriginsRequest{
ReverseProxyId: params.ReverseProxyId,
OriginsJSON: originsData,
})
}
if err != nil {
this.ErrorPage(err)
return
}
this.Success()
}

View File

@@ -1,22 +1,89 @@
package reverseProxy
import (
"encoding/json"
"errors"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/serverutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"github.com/iwind/TeaGo/maps"
)
// 源站列表
type IndexAction struct {
actionutils.ParentAction
}
func (this *IndexAction) Init() {
this.Nav("", "setting", "index")
this.SecondMenu("reverseProxy")
this.FirstMenu("index")
}
func (this *IndexAction) RunGet(params struct {
ServerId int64
}) {
// TODO
server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId)
if !isOk {
return
}
this.Data["serverType"] = server.Type
this.Data["reverseProxyId"] = server.ReverseProxyId
if server.ReverseProxyId <= 0 {
// TODO 应该在界面上提示用户开启
this.ErrorPage(errors.New("reverse proxy should not be nil"))
return
}
reverseProxyResp, err := this.RPC().ReverseProxyRPC().FindEnabledReverseProxy(this.AdminContext(), &pb.FindEnabledReverseProxyRequest{ReverseProxyId: server.ReverseProxyId})
if err != nil {
this.ErrorPage(err)
return
}
reverseProxy := reverseProxyResp.ReverseProxy
if reverseProxy == nil {
// TODO 应该在界面上提示用户开启
this.ErrorPage(errors.New("reverse proxy should not be nil"))
return
}
primaryOrigins := []*serverconfigs.OriginServerConfig{}
backupOrigins := []*serverconfigs.OriginServerConfig{}
if len(reverseProxy.PrimaryOriginsJSON) > 0 {
err = json.Unmarshal(reverseProxy.PrimaryOriginsJSON, &primaryOrigins)
if err != nil {
this.ErrorPage(err)
return
}
}
if len(reverseProxy.BackupOriginsJSON) > 0 {
err = json.Unmarshal(reverseProxy.BackupOriginsJSON, &backupOrigins)
if err != nil {
this.ErrorPage(err)
return
}
}
primaryOriginMaps := []maps.Map{}
backupOriginMaps := []maps.Map{}
for _, originConfig := range primaryOrigins {
m := maps.Map{
"id": originConfig.Id,
"weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
}
primaryOriginMaps = append(primaryOriginMaps, m)
}
for _, originConfig := range backupOrigins {
m := maps.Map{
"id": originConfig.Id,
"weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
}
backupOriginMaps = append(backupOriginMaps, m)
}
this.Data["primaryOrigins"] = primaryOriginMaps
this.Data["backupOrigins"] = backupOriginMaps
this.Show()
}

View File

@@ -11,8 +11,12 @@ func init() {
server.
Helper(helpers.NewUserMustAuth()).
Helper(serverutils.NewServerHelper()).
Data("mainTab", "setting").
Data("secondMenuItem", "reverseProxy").
Prefix("/servers/server/settings/reverseProxy").
Get("", new(IndexAction)).
GetPost("/scheduling", new(SchedulingAction)).
GetPost("/updateSchedulingPopup", new(UpdateSchedulingPopupAction)).
EndAll()
})
}

View File

@@ -0,0 +1,59 @@
package reverseProxy
import (
"encoding/json"
"errors"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/serverutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/schedulingconfigs"
)
type SchedulingAction struct {
actionutils.ParentAction
}
func (this *SchedulingAction) Init() {
this.FirstMenu("scheduling")
}
func (this *SchedulingAction) RunGet(params struct {
ServerId int64
}) {
server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId)
if !isOk {
return
}
if server.ReverseProxyId <= 0 {
// TODO 在界面上提示用户未开通,并提供开通按钮,用户点击后开通
this.WriteString("此服务尚未开通反向代理功能")
return
}
this.Data["reverseProxyId"] = server.ReverseProxyId
reverseProxyResp, err := this.RPC().ReverseProxyRPC().FindEnabledReverseProxyConfig(this.AdminContext(), &pb.FindEnabledReverseProxyConfigRequest{
ReverseProxyId: server.ReverseProxyId,
})
if err != nil {
this.ErrorPage(err)
return
}
reverseProxy := &serverconfigs.ReverseProxyConfig{}
err = json.Unmarshal(reverseProxyResp.Config, reverseProxy)
if err != nil {
this.ErrorPage(err)
return
}
schedulingCode := reverseProxy.FindSchedulingConfig().Code
schedulingMap := schedulingconfigs.FindSchedulingType(schedulingCode)
if schedulingMap == nil {
this.ErrorPage(errors.New("invalid scheduling code '" + schedulingCode + "'"))
return
}
this.Data["scheduling"] = schedulingMap
this.Show()
}

View File

@@ -0,0 +1,155 @@
package reverseProxy
import (
"encoding/json"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/serverutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/schedulingconfigs"
"github.com/iwind/TeaGo/actions"
"github.com/iwind/TeaGo/lists"
"github.com/iwind/TeaGo/maps"
"github.com/iwind/TeaGo/types"
)
// 修改调度算法
type UpdateSchedulingPopupAction struct {
actionutils.ParentAction
}
func (this *UpdateSchedulingPopupAction) Init() {
}
func (this *UpdateSchedulingPopupAction) RunGet(params struct {
Type string
ServerId int64
ReverseProxyId int64
}) {
this.Data["dataType"] = params.Type
this.Data["serverId"] = params.ServerId
this.Data["reverseProxyId"] = params.ReverseProxyId
_, serverConfig, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId)
if !isOk {
return
}
reverseProxyResp, err := this.RPC().ReverseProxyRPC().FindEnabledReverseProxyConfig(this.AdminContext(), &pb.FindEnabledReverseProxyConfigRequest{
ReverseProxyId: params.ReverseProxyId,
})
if err != nil {
this.ErrorPage(err)
return
}
configData := reverseProxyResp.Config
reverseProxyConfig := &serverconfigs.ReverseProxyConfig{}
err = json.Unmarshal(configData, reverseProxyConfig)
if err != nil {
this.ErrorPage(err)
return
}
schedulingObject := &serverconfigs.SchedulingConfig{
Code: "random",
Options: nil,
}
if reverseProxyConfig.Scheduling != nil {
schedulingObject = reverseProxyConfig.Scheduling
}
this.Data["scheduling"] = schedulingObject
// 调度类型
schedulingTypes := []maps.Map{}
for _, m := range schedulingconfigs.AllSchedulingTypes() {
networks, ok := m["networks"]
if !ok {
continue
}
if !types.IsSlice(networks) {
continue
}
if (serverConfig.IsHTTP() && lists.Contains(networks, "http")) ||
(serverConfig.IsTCP() && lists.Contains(networks, "tcp")) ||
(serverConfig.IsUDP() && lists.Contains(networks, "udp")) ||
(serverConfig.IsUnix() && lists.Contains(networks, "unix")) {
schedulingTypes = append(schedulingTypes, m)
}
}
this.Data["schedulingTypes"] = schedulingTypes
this.Show()
}
func (this *UpdateSchedulingPopupAction) RunPost(params struct {
ServerId int64
ReverseProxyId int64
Type string
HashKey string
StickyType string
StickyParam string
Must *actions.Must
}) {
reverseProxyResp, err := this.RPC().ReverseProxyRPC().FindEnabledReverseProxyConfig(this.AdminContext(), &pb.FindEnabledReverseProxyConfigRequest{ReverseProxyId: params.ReverseProxyId})
if err != nil {
this.ErrorPage(err)
return
}
configData := reverseProxyResp.Config
reverseProxy := &serverconfigs.ReverseProxyConfig{}
err = json.Unmarshal(configData, reverseProxy)
if err != nil {
this.ErrorPage(err)
return
}
if reverseProxy.Scheduling == nil {
reverseProxy.FindSchedulingConfig()
}
options := maps.Map{}
if params.Type == "hash" {
params.Must.
Field("hashKey", params.HashKey).
Require("请输入Key")
options["key"] = params.HashKey
} else if params.Type == "sticky" {
params.Must.
Field("stickyType", params.StickyType).
Require("请选择参数类型").
Field("stickyParam", params.StickyParam).
Require("请输入参数名").
Match("^[a-zA-Z0-9]+$", "参数名只能是英文字母和数字的组合").
MaxCharacters(50, "参数名长度不能超过50位")
options["type"] = params.StickyType
options["param"] = params.StickyParam
}
if schedulingconfigs.FindSchedulingType(params.Type) == nil {
this.Fail("不支持此种算法")
}
reverseProxy.Scheduling.Code = params.Type
reverseProxy.Scheduling.Options = options
schedulingData, err := json.Marshal(reverseProxy.Scheduling)
if err != nil {
this.ErrorPage(err)
return
}
_, err = this.RPC().ReverseProxyRPC().UpdateReverseProxyScheduling(this.AdminContext(), &pb.UpdateReverseProxySchedulingRequest{
ReverseProxyId: params.ReverseProxyId,
SchedulingJSON: schedulingData,
})
if err != nil {
this.ErrorPage(err)
}
this.Success()
}

View File

@@ -49,40 +49,201 @@ func (this *IndexAction) RunPost(params struct {
Must *actions.Must
}) {
_, config, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId)
serverId := params.ServerId
server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId)
if !isOk {
return
}
listen := []*serverconfigs.NetworkAddressConfig{}
err := json.Unmarshal([]byte(params.Addresses), &listen)
addresses := []*serverconfigs.NetworkAddressConfig{}
err := json.Unmarshal([]byte(params.Addresses), &addresses)
if err != nil {
this.Fail("端口地址解析失败:" + err.Error())
}
if config.IsHTTP() {
config.HTTP.Listen = listen
} else if config.IsTCP() {
config.TCP.Listen = listen
} else if config.IsUnix() {
config.Unix.Listen = listen
} else if config.IsUDP() {
config.UDP.Listen = listen
}
switch server.Type {
case serverconfigs.ServerTypeHTTPProxy, serverconfigs.ServerTypeHTTPWeb:
var httpConfig = &serverconfigs.HTTPProtocolConfig{}
if len(server.HttpJSON) > 0 {
err = json.Unmarshal(server.HttpJSON, httpConfig)
if err != nil {
this.ErrorPage(err)
return
}
httpConfig.Listen = []*serverconfigs.NetworkAddressConfig{}
} else {
httpConfig.IsOn = true
}
configData, err := config.AsJSON()
if err != nil {
this.ErrorPage(err)
return
}
var httpsConfig = &serverconfigs.HTTPSProtocolConfig{}
if len(server.HttpsJSON) > 0 {
err = json.Unmarshal(server.HttpsJSON, httpsConfig)
if err != nil {
this.ErrorPage(err)
return
}
httpsConfig.Listen = []*serverconfigs.NetworkAddressConfig{}
} else {
httpsConfig.IsOn = true
}
_, err = this.RPC().ServerRPC().UpdateServerConfig(this.AdminContext(), &pb.UpdateServerConfigRequest{
ServerId: params.ServerId,
Config: configData,
})
if err != nil {
this.ErrorPage(err)
return
for _, addr := range addresses {
switch addr.Protocol.Primary() {
case serverconfigs.ProtocolHTTP:
httpConfig.AddListen(addr)
case serverconfigs.ProtocolHTTPS:
httpsConfig.AddListen(addr)
}
}
httpData, err := json.Marshal(httpConfig)
if err != nil {
this.ErrorPage(err)
return
}
httpsData, err := json.Marshal(httpsConfig)
if err != nil {
this.ErrorPage(err)
return
}
_, err = this.RPC().ServerRPC().UpdateServerHTTP(this.AdminContext(), &pb.UpdateServerHTTPRequest{
ServerId: serverId,
Config: httpData,
})
if err != nil {
this.ErrorPage(err)
return
}
_, err = this.RPC().ServerRPC().UpdateServerHTTPS(this.AdminContext(), &pb.UpdateServerHTTPSRequest{
ServerId: serverId,
Config: httpsData,
})
if err != nil {
this.ErrorPage(err)
return
}
case serverconfigs.ServerTypeTCPProxy:
tcpProxy := &serverconfigs.TCPProtocolConfig{}
if len(server.TcpJSON) > 0 {
err = json.Unmarshal(server.TcpJSON, tcpProxy)
if err != nil {
this.ErrorPage(err)
return
}
tcpProxy.Listen = []*serverconfigs.NetworkAddressConfig{}
} else {
tcpProxy.IsOn = true
}
tlsProxy := &serverconfigs.TLSProtocolConfig{}
if len(server.TlsJSON) > 0 {
err = json.Unmarshal(server.TlsJSON, tlsProxy)
if err != nil {
this.ErrorPage(err)
return
}
tlsProxy.Listen = []*serverconfigs.NetworkAddressConfig{}
} else {
tlsProxy.IsOn = true
}
for _, addr := range addresses {
switch addr.Protocol.Primary() {
case serverconfigs.ProtocolTCP:
tcpProxy.AddListen(addr)
case serverconfigs.ProtocolTLS:
tlsProxy.AddListen(addr)
}
}
tcpData, err := json.Marshal(tcpProxy)
if err != nil {
this.ErrorPage(err)
return
}
tlsData, err := json.Marshal(tlsProxy)
if err != nil {
this.ErrorPage(err)
return
}
_, err = this.RPC().ServerRPC().UpdateServerTCP(this.AdminContext(), &pb.UpdateServerTCPRequest{
ServerId: serverId,
Config: tcpData,
})
if err != nil {
this.ErrorPage(err)
return
}
_, err = this.RPC().ServerRPC().UpdateServerTLS(this.AdminContext(), &pb.UpdateServerTLSRequest{
ServerId: serverId,
Config: tlsData,
})
if err != nil {
this.ErrorPage(err)
return
}
case serverconfigs.ServerTypeUnixProxy:
unixConfig := &serverconfigs.UnixProtocolConfig{}
if len(server.UnixJSON) > 0 {
err = json.Unmarshal(server.UnixJSON, unixConfig)
if err != nil {
this.ErrorPage(err)
return
}
unixConfig.Listen = []*serverconfigs.NetworkAddressConfig{}
}
for _, addr := range addresses {
switch addr.Protocol.Primary() {
case serverconfigs.ProtocolUnix:
unixConfig.AddListen(addr)
}
}
unixData, err := json.Marshal(unixConfig)
if err != nil {
this.ErrorPage(err)
return
}
_, err = this.RPC().ServerRPC().UpdateServerUnix(this.AdminContext(), &pb.UpdateServerUnixRequest{
ServerId: serverId,
Config: unixData,
})
if err != nil {
this.ErrorPage(err)
return
}
case serverconfigs.ServerTypeUDPProxy:
udpConfig := &serverconfigs.UDPProtocolConfig{}
if len(server.UdpJSON) > 0 {
err = json.Unmarshal(server.UdpJSON, udpConfig)
if err != nil {
this.ErrorPage(err)
return
}
udpConfig.Listen = []*serverconfigs.NetworkAddressConfig{}
}
for _, addr := range addresses {
switch addr.Protocol.Primary() {
case serverconfigs.ProtocolUDP:
udpConfig.AddListen(addr)
}
}
udpData, err := json.Marshal(udpConfig)
if err != nil {
this.ErrorPage(err)
return
}
_, err = this.RPC().ServerRPC().UpdateServerUDP(this.AdminContext(), &pb.UpdateServerUDPRequest{
ServerId: serverId,
Config: udpData,
})
if err != nil {
this.ErrorPage(err)
return
}
}
this.Success()