diff --git a/internal/web/actions/default/servers/create.go b/internal/web/actions/default/servers/create.go index 7d778b49..2ef2f87f 100644 --- a/internal/web/actions/default/servers/create.go +++ b/internal/web/actions/default/servers/create.go @@ -74,7 +74,6 @@ func (this *CreateAction) RunPost(params struct { var unixConfig *serverconfigs.UnixProtocolConfig = nil var udpConfig *serverconfigs.UDPProtocolConfig = nil var webId int64 = 0 - var reverseProxyId int64 = 0 switch params.ServerType { case serverconfigs.ServerTypeHTTPProxy, serverconfigs.ServerTypeHTTPWeb: @@ -157,6 +156,7 @@ func (this *CreateAction) RunPost(params struct { } // 源站地址 + reverseProxyRefJSON := []byte{} switch params.ServerType { case serverconfigs.ServerTypeHTTPProxy, serverconfigs.ServerTypeTCPProxy: origins := []*serverconfigs.OriginServerConfig{} @@ -174,7 +174,15 @@ func (this *CreateAction) RunPost(params struct { this.ErrorPage(err) return } - reverseProxyId = resp.ReverseProxyId + reverseProxyRef := &serverconfigs.ReverseProxyRef{ + IsOn: true, + ReverseProxyId: resp.ReverseProxyId, + } + reverseProxyRefJSON, err = json.Marshal(reverseProxyRef) + if err != nil { + this.ErrorPage(err) + return + } } // Web地址 @@ -215,7 +223,7 @@ func (this *CreateAction) RunPost(params struct { IncludeNodesJSON: includeNodesJSON, ExcludeNodesJSON: excludeNodesJSON, WebId: webId, - ReverseProxyId: reverseProxyId, + ReverseProxyJSON: reverseProxyRefJSON, } if httpConfig != nil { data, err := json.Marshal(httpConfig) diff --git a/internal/web/actions/default/servers/server/index.go b/internal/web/actions/default/servers/server/index.go index 3e40c93e..c5e474d9 100644 --- a/internal/web/actions/default/servers/server/index.go +++ b/internal/web/actions/default/servers/server/index.go @@ -17,5 +17,6 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - this.RedirectURL("/servers/server/board?serverId=" + strconv.FormatInt(params.ServerId, 10)) + // TODO 等看板实现后,需要跳转到看板 + this.RedirectURL("/servers/server/settings?serverId=" + strconv.FormatInt(params.ServerId, 10)) } diff --git a/internal/web/actions/default/servers/server/settings/reverseProxy/index.go b/internal/web/actions/default/servers/server/settings/reverseProxy/index.go index 8675b04f..3dd75931 100644 --- a/internal/web/actions/default/servers/server/settings/reverseProxy/index.go +++ b/internal/web/actions/default/servers/server/settings/reverseProxy/index.go @@ -2,11 +2,10 @@ 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/actions" "github.com/iwind/TeaGo/maps" ) @@ -22,67 +21,76 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) - if !isOk { + serverTypeResp, err := this.RPC().ServerRPC().FindEnabledServerType(this.AdminContext(), &pb.FindEnabledServerTypeRequest{ServerId: params.ServerId}) + if err != nil { + this.ErrorPage(err) return } - this.Data["serverType"] = server.Type - this.Data["reverseProxyId"] = server.ReverseProxyId + serverType := serverTypeResp.Type - isOn := false - if server.ReverseProxyId > 0 { - 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 - } - isOn = true - - 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 + reverseProxyResp, err := this.RPC().ServerRPC().FindAndInitServerReverseProxyConfig(this.AdminContext(), &pb.FindAndInitServerReverseProxyConfigRequest{ServerId: params.ServerId}) + if err != nil { + this.ErrorPage(err) + return } - this.Data["isOn"] = isOn + reverseProxyRef := &serverconfigs.ReverseProxyRef{} + err = json.Unmarshal(reverseProxyResp.ReverseProxyRef, reverseProxyRef) + if err != nil { + this.ErrorPage(err) + return + } + + reverseProxy := &serverconfigs.ReverseProxyConfig{} + err = json.Unmarshal(reverseProxyResp.ReverseProxy, reverseProxy) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["serverType"] = serverType + this.Data["reverseProxyRef"] = reverseProxyRef + this.Data["reverseProxyConfig"] = reverseProxy + + primaryOriginMaps := []maps.Map{} + backupOriginMaps := []maps.Map{} + for _, originConfig := range reverseProxy.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 reverseProxy.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() } + +func (this *IndexAction) RunPost(params struct { + ServerId int64 + ReverseProxyRefJSON []byte + + Must *actions.Must +}) { + // TODO 校验配置 + + _, err := this.RPC().ServerRPC().UpdateServerReverseProxy(this.AdminContext(), &pb.UpdateServerReverseProxyRequest{ + ServerId: params.ServerId, + ReverseProxyJSON: params.ReverseProxyRefJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/reverseProxy/init.go b/internal/web/actions/default/servers/server/settings/reverseProxy/init.go index 1afbbdeb..70e46b4c 100644 --- a/internal/web/actions/default/servers/server/settings/reverseProxy/init.go +++ b/internal/web/actions/default/servers/server/settings/reverseProxy/init.go @@ -14,7 +14,7 @@ func init() { Data("mainTab", "setting"). Data("secondMenuItem", "reverseProxy"). Prefix("/servers/server/settings/reverseProxy"). - Get("", new(IndexAction)). + GetPost("", new(IndexAction)). GetPost("/scheduling", new(SchedulingAction)). GetPost("/updateSchedulingPopup", new(UpdateSchedulingPopupAction)). Post("/updateOn", new(UpdateOnAction)). diff --git a/internal/web/actions/default/servers/server/settings/reverseProxy/scheduling.go b/internal/web/actions/default/servers/server/settings/reverseProxy/scheduling.go index cb2c81a8..2f4371cc 100644 --- a/internal/web/actions/default/servers/server/settings/reverseProxy/scheduling.go +++ b/internal/web/actions/default/servers/server/settings/reverseProxy/scheduling.go @@ -4,7 +4,6 @@ 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" @@ -21,31 +20,18 @@ func (this *SchedulingAction) Init() { 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, - }) + reverseProxyResp, err := this.RPC().ServerRPC().FindAndInitServerReverseProxyConfig(this.AdminContext(), &pb.FindAndInitServerReverseProxyConfigRequest{ServerId: params.ServerId}) if err != nil { this.ErrorPage(err) return } reverseProxy := &serverconfigs.ReverseProxyConfig{} - err = json.Unmarshal(reverseProxyResp.Config, reverseProxy) + err = json.Unmarshal(reverseProxyResp.ReverseProxy, reverseProxy) if err != nil { this.ErrorPage(err) return } + this.Data["reverseProxyId"] = reverseProxy.Id schedulingCode := reverseProxy.FindSchedulingConfig().Code schedulingMap := schedulingconfigs.FindSchedulingType(schedulingCode) diff --git a/internal/web/actions/default/servers/server/settings/reverseProxy/updateOn.go b/internal/web/actions/default/servers/server/settings/reverseProxy/updateOn.go index 62adfd6e..008572ea 100644 --- a/internal/web/actions/default/servers/server/settings/reverseProxy/updateOn.go +++ b/internal/web/actions/default/servers/server/settings/reverseProxy/updateOn.go @@ -1,8 +1,10 @@ package reverseProxy import ( + "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" ) type UpdateOnAction struct { @@ -29,10 +31,21 @@ func (this *UpdateOnAction) RunPost(params struct { this.ErrorPage(err) return } + reverseProxyId := resp.ReverseProxyId - _, err = this.RPC().ServerRPC().UpdateServerReverseProxy(this.AdminContext(), &pb.UpdateServerReverseProxyRequest{ - ServerId: params.ServerId, + ref := &serverconfigs.ReverseProxyRef{ + IsOn: true, ReverseProxyId: reverseProxyId, + } + refJSON, err := json.Marshal(ref) + if err != nil { + this.ErrorPage(err) + return + } + + _, err = this.RPC().ServerRPC().UpdateServerReverseProxy(this.AdminContext(), &pb.UpdateServerReverseProxyRequest{ + ServerId: params.ServerId, + ReverseProxyJSON: refJSON, }) if err != nil { this.ErrorPage(err) diff --git a/internal/web/actions/default/servers/serverutils/server_helper.go b/internal/web/actions/default/servers/serverutils/server_helper.go index 975221be..c14ec4ee 100644 --- a/internal/web/actions/default/servers/serverutils/server_helper.go +++ b/internal/web/actions/default/servers/serverutils/server_helper.go @@ -76,9 +76,9 @@ func (this *ServerHelper) createLeftMenu(action *actions.ActionObject) { selectedTabbar, _ := action.Data["mainTab"] tabbar := actionutils.NewTabbar() tabbar.Add("当前服务:"+serverConfig.Name, "", "/servers", "left long alternate arrow", false) - tabbar.Add("看板", "", "/servers/server/board?serverId="+serverIdString, "dashboard", selectedTabbar == "board") + //tabbar.Add("看板", "", "/servers/server/board?serverId="+serverIdString, "dashboard", selectedTabbar == "board") tabbar.Add("日志", "", "/servers/server/log?serverId="+serverIdString, "history", selectedTabbar == "log") - tabbar.Add("统计", "", "/servers/server/stat?serverId="+serverIdString, "chart area", selectedTabbar == "stat") + //tabbar.Add("统计", "", "/servers/server/stat?serverId="+serverIdString, "chart area", selectedTabbar == "stat") tabbar.Add("设置", "", "/servers/server/settings?serverId="+serverIdString, "setting", selectedTabbar == "setting") tabbar.Add("删除", "", "/servers/server/delete?serverId="+serverIdString, "trash", selectedTabbar == "delete") diff --git a/web/views/@default/servers/server/settings/reverseProxy/index.html b/web/views/@default/servers/server/settings/reverseProxy/index.html index 5a5a10c7..348f2f0b 100644 --- a/web/views/@default/servers/server/settings/reverseProxy/index.html +++ b/web/views/@default/servers/server/settings/reverseProxy/index.html @@ -2,12 +2,29 @@ {$template "/left_menu"}