diff --git a/internal/web/actions/default/servers/addOriginPopup.go b/internal/web/actions/default/servers/addOriginPopup.go index 9789dcdd..9e39e906 100644 --- a/internal/web/actions/default/servers/addOriginPopup.go +++ b/internal/web/actions/default/servers/addOriginPopup.go @@ -52,6 +52,7 @@ func (this *AddOriginPopupAction) RunPost(params struct { PortRange: port, }, Description: "", + Weight: 10, IsOn: true, }) if err != nil { diff --git a/internal/web/actions/default/servers/create.go b/internal/web/actions/default/servers/create.go index 3d9aea1f..9ab96aae 100644 --- a/internal/web/actions/default/servers/create.go +++ b/internal/web/actions/default/servers/create.go @@ -161,6 +161,34 @@ func (this *CreateAction) RunPost(params struct { tlsConfig.AddListen(addr) } } + case serverconfigs.ServerTypeUDPProxy: + // 在DEMO模式下不能创建 + if teaconst.IsDemo { + this.Fail("DEMO模式下不能创建UDP反向代理") + } + + listen := []*serverconfigs.NetworkAddressConfig{} + err := json.Unmarshal([]byte(params.Addresses), &listen) + if err != nil { + this.Fail("端口地址解析失败:" + err.Error()) + } + if len(listen) == 0 { + this.Fail("至少需要绑定一个端口") + } + + for _, addr := range listen { + switch addr.Protocol.Primary() { + case serverconfigs.ProtocolUDP: + if udpConfig == nil { + udpConfig = &serverconfigs.UDPProtocolConfig{ + BaseProtocol: serverconfigs.BaseProtocol{ + IsOn: true, + }, + } + } + udpConfig.AddListen(addr) + } + } default: this.Fail("请选择正确的服务类型") } @@ -237,7 +265,7 @@ func (this *CreateAction) RunPost(params struct { // 源站地址 reverseProxyRefJSON := []byte{} switch params.ServerType { - case serverconfigs.ServerTypeHTTPProxy, serverconfigs.ServerTypeTCPProxy: + case serverconfigs.ServerTypeHTTPProxy, serverconfigs.ServerTypeTCPProxy, serverconfigs.ServerTypeUDPProxy: originConfigs := []*serverconfigs.OriginConfig{} err := json.Unmarshal([]byte(params.Origins), &originConfigs) if err != nil { diff --git a/internal/web/actions/default/servers/server/index.go b/internal/web/actions/default/servers/server/index.go index 631fc07d..dd3caa22 100644 --- a/internal/web/actions/default/servers/server/index.go +++ b/internal/web/actions/default/servers/server/index.go @@ -2,6 +2,8 @@ package server import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "strconv" ) @@ -18,5 +20,19 @@ func (this *IndexAction) RunGet(params struct { ServerId int64 }) { // TODO 等看板实现后,需要跳转到看板 + + // TCP & UDP跳转到设置 + serverTypeResp, err := this.RPC().ServerRPC().FindEnabledServerType(this.AdminContext(), &pb.FindEnabledServerTypeRequest{ServerId: params.ServerId}) + if err != nil { + this.ErrorPage(err) + return + } + serverType := serverTypeResp.Type + if serverType == serverconfigs.ServerTypeTCPProxy || serverType == serverconfigs.ServerTypeUDPProxy { + this.RedirectURL("/servers/server/settings?serverId=" + strconv.FormatInt(params.ServerId, 10)) + return + } + + // HTTP跳转到访问日志 this.RedirectURL("/servers/server/log?serverId=" + strconv.FormatInt(params.ServerId, 10)) } diff --git a/internal/web/actions/default/servers/server/settings/udp/index.go b/internal/web/actions/default/servers/server/settings/udp/index.go index c67d2b22..17e03544 100644 --- a/internal/web/actions/default/servers/server/settings/udp/index.go +++ b/internal/web/actions/default/servers/server/settings/udp/index.go @@ -1,9 +1,15 @@ package udp 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/iwind/TeaGo/actions" ) +// IndexAction UDP设置 type IndexAction struct { actionutils.ParentAction } @@ -16,7 +22,71 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - // TODO + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) + if !isOk { + return + } + udpConfig := &serverconfigs.UDPProtocolConfig{} + if len(server.UdpJSON) > 0 { + err := json.Unmarshal(server.UdpJSON, udpConfig) + if err != nil { + this.ErrorPage(err) + } + } else { + udpConfig.IsOn = true + } + + this.Data["serverType"] = server.Type + this.Data["udpConfig"] = udpConfig this.Show() } + +func (this *IndexAction) RunPost(params struct { + ServerId int64 + ServerType string + Addresses string + + Must *actions.Must +}) { + defer this.CreateLogInfo("修改代理服务 %d UDP设置", params.ServerId) + + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) + if !isOk { + return + } + + addresses := []*serverconfigs.NetworkAddressConfig{} + err := json.Unmarshal([]byte(params.Addresses), &addresses) + if err != nil { + this.Fail("端口地址解析失败:" + err.Error()) + } + + udpConfig := &serverconfigs.UDPProtocolConfig{} + if len(server.UdpJSON) > 0 { + err := json.Unmarshal(server.UdpJSON, udpConfig) + if err != nil { + this.ErrorPage(err) + } + } else { + udpConfig.IsOn = true + } + udpConfig.Listen = addresses + + configData, err := json.Marshal(udpConfig) + if err != nil { + this.ErrorPage(err) + return + } + + _, err = this.RPC().ServerRPC().UpdateServerUDP(this.AdminContext(), &pb.UpdateServerUDPRequest{ + ServerId: params.ServerId, + UdpJSON: configData, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/udp/init.go b/internal/web/actions/default/servers/server/settings/udp/init.go index a2a0543e..93a52aac 100644 --- a/internal/web/actions/default/servers/server/settings/udp/init.go +++ b/internal/web/actions/default/servers/server/settings/udp/init.go @@ -13,7 +13,7 @@ func init() { Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeServer)). Helper(serverutils.NewServerHelper()). Prefix("/servers/server/settings/udp"). - Get("", new(IndexAction)). + GetPost("", new(IndexAction)). EndAll() }) } diff --git a/internal/web/actions/default/servers/serverutils/server_helper.go b/internal/web/actions/default/servers/serverutils/server_helper.go index ed6f31eb..2872507a 100644 --- a/internal/web/actions/default/servers/serverutils/server_helper.go +++ b/internal/web/actions/default/servers/serverutils/server_helper.go @@ -93,7 +93,9 @@ func (this *ServerHelper) createLeftMenu(action *actions.ActionObject) { tabbar := actionutils.NewTabbar() tabbar.Add("服务列表", "", "/servers", "", false) //tabbar.Add("看板", "", "/servers/server/board?serverId="+serverIdString, "dashboard", selectedTabbar == "board") - tabbar.Add("日志", "", "/servers/server/log?serverId="+serverIdString, "history", selectedTabbar == "log") + if family == "http" { + tabbar.Add("日志", "", "/servers/server/log?serverId="+serverIdString, "history", selectedTabbar == "log") + } if family == "http" { tabbar.Add("统计", "", "/servers/server/stat?serverId="+serverIdString, "chart area", selectedTabbar == "stat") } @@ -350,6 +352,12 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "isActive": secondMenuItem == "udp", "isOn": serverConfig.UDP != nil && serverConfig.UDP.IsOn && len(serverConfig.UDP.Listen) > 0, }) + menuItems = append(menuItems, maps.Map{ + "name": "反向代理", + "url": "/servers/server/settings/reverseProxy?serverId=" + serverIdString, + "isActive": secondMenuItem == "reverseProxy", + "isOn": serverConfig.ReverseProxyRef != nil && serverConfig.ReverseProxyRef.IsOn, + }) } return menuItems diff --git a/web/views/@default/servers/addOriginPopup.html b/web/views/@default/servers/addOriginPopup.html index e800ba6c..061ce937 100644 --- a/web/views/@default/servers/addOriginPopup.html +++ b/web/views/@default/servers/addOriginPopup.html @@ -18,6 +18,11 @@ + + +