mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 21:50:28 +08:00 
			
		
		
		
	
		
			
	
	
		
			213 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			213 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package serverutils
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"encoding/json"
							 | 
						||
| 
								 | 
							
									"errors"
							 | 
						||
| 
								 | 
							
									"github.com/TeaOSLab/EdgeAdmin/internal/configs/serverconfigs"
							 | 
						||
| 
								 | 
							
									"github.com/TeaOSLab/EdgeAdmin/internal/rpc"
							 | 
						||
| 
								 | 
							
									"github.com/TeaOSLab/EdgeAdmin/internal/rpc/pb"
							 | 
						||
| 
								 | 
							
									"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
							 | 
						||
| 
								 | 
							
									"github.com/iwind/TeaGo/actions"
							 | 
						||
| 
								 | 
							
									"github.com/iwind/TeaGo/logs"
							 | 
						||
| 
								 | 
							
									"github.com/iwind/TeaGo/maps"
							 | 
						||
| 
								 | 
							
									"github.com/iwind/TeaGo/types"
							 | 
						||
| 
								 | 
							
									"net/http"
							 | 
						||
| 
								 | 
							
									"strconv"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type ServerHelper struct {
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func NewServerHelper() *ServerHelper {
							 | 
						||
| 
								 | 
							
									return &ServerHelper{}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (this *ServerHelper) BeforeAction(action *actions.ActionObject) {
							 | 
						||
| 
								 | 
							
									if action.Request.Method != http.MethodGet {
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									action.Data["teaMenu"] = "servers"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// 左侧菜单
							 | 
						||
| 
								 | 
							
									this.createLeftMenu(action)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (this *ServerHelper) createLeftMenu(action *actions.ActionObject) {
							 | 
						||
| 
								 | 
							
									// 初始化
							 | 
						||
| 
								 | 
							
									action.Data["leftMenuItems"] = []maps.Map{}
							 | 
						||
| 
								 | 
							
									mainTab, _ := action.Data["mainTab"]
							 | 
						||
| 
								 | 
							
									secondMenuItem, _ := action.Data["secondMenuItem"]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									serverId := action.ParamInt64("serverId")
							 | 
						||
| 
								 | 
							
									serverIdString := strconv.FormatInt(serverId, 10)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// 读取server信息
							 | 
						||
| 
								 | 
							
									rpcClient, err := rpc.SharedRPC()
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										logs.Error(err)
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									serverResp, err := rpcClient.ServerRPC().FindEnabledServer(rpcClient.Context(action.Context.GetInt64("adminId")), &pb.FindEnabledServerRequest{ServerId: serverId})
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										logs.Error(err)
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									server := serverResp.Server
							 | 
						||
| 
								 | 
							
									if server == nil {
							 | 
						||
| 
								 | 
							
										logs.Error(errors.New("can not find the server"))
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// 源站管理
							 | 
						||
| 
								 | 
							
									serverConfig := &serverconfigs.ServerConfig{}
							 | 
						||
| 
								 | 
							
									err = json.Unmarshal(server.Config, serverConfig)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										logs.Error(err)
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// TABBAR
							 | 
						||
| 
								 | 
							
									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/log?serverId="+serverIdString, "history", selectedTabbar == "log")
							 | 
						||
| 
								 | 
							
									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")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									actionutils.SetTabbar(action, tabbar)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// 左侧操作子菜单
							 | 
						||
| 
								 | 
							
									switch types.String(mainTab) {
							 | 
						||
| 
								 | 
							
									case "board":
							 | 
						||
| 
								 | 
							
										// TODO
							 | 
						||
| 
								 | 
							
									case "log":
							 | 
						||
| 
								 | 
							
										// TODO
							 | 
						||
| 
								 | 
							
									case "stat":
							 | 
						||
| 
								 | 
							
										// TODO
							 | 
						||
| 
								 | 
							
									case "setting":
							 | 
						||
| 
								 | 
							
										action.Data["leftMenuItems"] = this.createSettingsMenu(types.String(secondMenuItem), serverIdString, serverConfig)
							 | 
						||
| 
								 | 
							
									case "delete":
							 | 
						||
| 
								 | 
							
										// TODO
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdString string, serverConfig *serverconfigs.ServerConfig) (items []maps.Map) {
							 | 
						||
| 
								 | 
							
									menuItems := []maps.Map{
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											"name":     "基本信息",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/settings?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "basic",
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// HTTP
							 | 
						||
| 
								 | 
							
									if serverConfig.IsHTTP() {
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "HTTP",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/http?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "http",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "HTTPS",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/https?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "https",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "Web设置",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/web?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "web",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "字符集",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/charset?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "charset",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "访问日志",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/accessLog?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "accessLog",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "统计",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/stat?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "stat",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "Gzip压缩",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/gzip?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "gzip",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "特殊页面",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/pages?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "pages",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "HTTP Header",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/headers?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "header",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "反向代理",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/reverseProxy?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "reverseProxy",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "路径规则",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/locations?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "locations",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "访问控制",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/access?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "access",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "WAF",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/waf?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "waf",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "缓存",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/cache?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "cache",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									} else if serverConfig.IsTCP() {
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "TCP",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/tcp?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "tcp",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									} else if serverConfig.IsUnix() {
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "Unix",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/unix?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "unix",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									} else if serverConfig.IsUDP() {
							 | 
						||
| 
								 | 
							
										menuItems = append(menuItems, maps.Map{
							 | 
						||
| 
								 | 
							
											"name":     "UDP",
							 | 
						||
| 
								 | 
							
											"url":      "/servers/server/udp?serverId=" + serverIdString,
							 | 
						||
| 
								 | 
							
											"isActive": secondMenuItem == "udp",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return menuItems
							 | 
						||
| 
								 | 
							
								}
							 |