Initial commit (code only without large binaries)
This commit is contained in:
@@ -0,0 +1,546 @@
|
||||
package serverutils
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/userconfigs"
|
||||
"github.com/TeaOSLab/EdgeUser/internal/rpc"
|
||||
"github.com/TeaOSLab/EdgeUser/internal/web/actions/actionutils"
|
||||
"github.com/TeaOSLab/EdgeUser/internal/web/helpers"
|
||||
"github.com/iwind/TeaGo/actions"
|
||||
"github.com/iwind/TeaGo/lists"
|
||||
"github.com/iwind/TeaGo/logs"
|
||||
"github.com/iwind/TeaGo/maps"
|
||||
"github.com/iwind/TeaGo/types"
|
||||
)
|
||||
|
||||
type ServerHelper struct {
|
||||
helpers.LangHelper
|
||||
}
|
||||
|
||||
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) {
|
||||
// 初始化
|
||||
if !action.Data.Has("leftMenuItemIsDisabled") {
|
||||
action.Data["leftMenuItemIsDisabled"] = false
|
||||
}
|
||||
action.Data["leftMenuItems"] = []maps.Map{}
|
||||
var mainTab = action.Data["mainTab"]
|
||||
var secondMenuItem = action.Data["secondMenuItem"]
|
||||
|
||||
var serverId = action.ParamInt64("serverId")
|
||||
if serverId == 0 {
|
||||
return
|
||||
}
|
||||
var serverIdString = strconv.FormatInt(serverId, 10)
|
||||
action.Data["serverId"] = serverId
|
||||
|
||||
// 读取server信息
|
||||
rpcClient, err := rpc.SharedRPC()
|
||||
if err != nil {
|
||||
logs.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
var userId = action.Context.GetInt64("userId")
|
||||
ctx := rpcClient.Context(userId)
|
||||
serverResp, err := rpcClient.ServerRPC().FindEnabledServer(ctx, &pb.FindEnabledServerRequest{
|
||||
ServerId: serverId,
|
||||
IgnoreSSLCerts: true,
|
||||
})
|
||||
if err != nil {
|
||||
logs.Error(err)
|
||||
return
|
||||
}
|
||||
var server = serverResp.Server
|
||||
if server == nil {
|
||||
logs.Error(errors.New("can not find the server"))
|
||||
return
|
||||
}
|
||||
|
||||
// 服务管理
|
||||
var serverConfig = &serverconfigs.ServerConfig{}
|
||||
err = json.Unmarshal(server.Config, serverConfig)
|
||||
if err != nil {
|
||||
logs.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
var serverName = serverConfig.Name
|
||||
if len(serverConfig.ServerNames) > 0 {
|
||||
if len(serverName) > 0 {
|
||||
serverName = serverConfig.ServerNames[0].FirstName() + " - " + serverName
|
||||
} else {
|
||||
serverName = serverConfig.ServerNames[0].FirstName()
|
||||
}
|
||||
}
|
||||
if len(serverName) == 0 {
|
||||
serverName = serverResp.Server.Name
|
||||
}
|
||||
if server.NodeCluster == nil {
|
||||
server.NodeCluster = &pb.NodeCluster{Id: 0}
|
||||
}
|
||||
action.Data["server"] = maps.Map{
|
||||
"id": serverConfig.Id,
|
||||
"name": serverName,
|
||||
"clusterId": server.NodeCluster.Id,
|
||||
}
|
||||
|
||||
// 协议簇
|
||||
var family = ""
|
||||
if serverConfig.IsHTTPFamily() {
|
||||
family = "http"
|
||||
} else if serverConfig.IsTCPFamily() {
|
||||
family = "tcp"
|
||||
} else if serverConfig.IsUDPFamily() {
|
||||
family = "udp"
|
||||
}
|
||||
action.Data["serverFamily"] = family
|
||||
|
||||
// TABBAR
|
||||
var selectedTabbar = action.Data["mainTab"]
|
||||
var tabbar = actionutils.NewTabbar()
|
||||
tabbar.Add(this.Lang(action, codes.Server_TabServerList), "", "/servers", "", false)
|
||||
//tabbar.Add("看板", "", "/servers/server/board?serverId="+serverIdString, "dashboard", selectedTabbar == "board")
|
||||
tabbar.Add(this.Lang(action, codes.Server_TabSettings), "", "/servers/server?serverId="+serverIdString, "setting", selectedTabbar == "setting")
|
||||
if serverConfig.IsHTTPFamily() {
|
||||
tabbar.Add(this.Lang(action, codes.Server_TabStat), "", "/servers/server/stat?serverId="+serverIdString, "chart area", selectedTabbar == "stat")
|
||||
}
|
||||
tabbar.Add(this.Lang(action, codes.Server_TabAccessLogs), "", "/servers/server/log?serverId="+serverIdString, "history", selectedTabbar == "log")
|
||||
//tabbar.Add("删除", "", "/servers/server/delete?serverId="+serverIdString, "trash", selectedTabbar == "delete")
|
||||
|
||||
actionutils.SetTabbar(action, tabbar)
|
||||
|
||||
// 左侧操作子菜单
|
||||
action.Data["leftMenuActiveItem"] = nil
|
||||
switch types.String(mainTab) {
|
||||
case "board":
|
||||
action.Data["leftMenuItems"] = this.createBoardMenu(action, types.String(secondMenuItem), serverIdString, serverConfig)
|
||||
case "log":
|
||||
action.Data["leftMenuItems"] = this.createLogMenu(action, types.String(secondMenuItem), serverIdString, serverConfig)
|
||||
case "stat":
|
||||
action.Data["leftMenuItems"] = this.createStatMenu(action, types.String(secondMenuItem), serverIdString, serverConfig)
|
||||
case "setting":
|
||||
var menuItems = this.createSettingsMenu(action, types.String(secondMenuItem), serverIdString, serverConfig)
|
||||
action.Data["leftMenuItems"] = menuItems
|
||||
|
||||
// 当前菜单
|
||||
for _, item := range menuItems {
|
||||
if item.GetBool("isActive") {
|
||||
action.Data["leftMenuActiveItem"] = item
|
||||
break
|
||||
}
|
||||
}
|
||||
case "delete":
|
||||
action.Data["leftMenuItems"] = this.createDeleteMenu(action, types.String(secondMenuItem), serverIdString, serverConfig)
|
||||
}
|
||||
}
|
||||
|
||||
// 看板菜单
|
||||
func (this *ServerHelper) createBoardMenu(action *actions.ActionObject, secondMenuItem string, serverIdString string, serverConfig *serverconfigs.ServerConfig) []maps.Map {
|
||||
menuItems := []maps.Map{}
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": "看板",
|
||||
"url": "/servers/server/board?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "index",
|
||||
})
|
||||
return menuItems
|
||||
}
|
||||
|
||||
// 日志菜单
|
||||
func (this *ServerHelper) createLogMenu(action *actions.ActionObject, secondMenuItem string, serverIdString string, serverConfig *serverconfigs.ServerConfig) []maps.Map {
|
||||
menuItems := []maps.Map{}
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": "实时",
|
||||
"url": "/servers/server/log?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "index",
|
||||
})
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": "今天",
|
||||
"url": "/servers/server/log/today?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "today",
|
||||
})
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": "历史",
|
||||
"url": "/servers/server/log/history?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "history",
|
||||
})
|
||||
return menuItems
|
||||
}
|
||||
|
||||
// 统计菜单
|
||||
func (this *ServerHelper) createStatMenu(action *actions.ActionObject, secondMenuItem string, serverIdString string, serverConfig *serverconfigs.ServerConfig) []maps.Map {
|
||||
menuItems := []maps.Map{}
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuStatRegions),
|
||||
"url": "/servers/server/stat?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "index",
|
||||
})
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuStatProviders),
|
||||
"url": "/servers/server/stat/providers?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "provider",
|
||||
})
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuStatClients),
|
||||
"url": "/servers/server/stat/clients?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "client",
|
||||
})
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuStatWAF),
|
||||
"url": "/servers/server/stat/waf?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "waf",
|
||||
})
|
||||
return menuItems
|
||||
}
|
||||
|
||||
// 设置菜单
|
||||
func (this *ServerHelper) createSettingsMenu(action *actions.ActionObject, secondMenuItem string, serverIdString string, serverConfig *serverconfigs.ServerConfig) (items []maps.Map) {
|
||||
menuItems := []maps.Map{
|
||||
/**{
|
||||
"name": "基本信息",
|
||||
"url": "/servers/server/settings?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "basic",
|
||||
"isOff": !serverConfig.IsOn,
|
||||
},**/
|
||||
}
|
||||
|
||||
// 是否有权限使用套餐
|
||||
rpcClient, err := rpc.SharedRPC()
|
||||
var supportPlan = false
|
||||
if err == nil {
|
||||
var userId = action.Context.GetInt64("userId")
|
||||
var ctx = rpcClient.Context(userId)
|
||||
|
||||
userFeatureResp, err := rpcClient.UserRPC().FindUserFeatures(ctx, &pb.FindUserFeaturesRequest{UserId: userId})
|
||||
if err == nil {
|
||||
userFeatureCodes := []string{}
|
||||
for _, feature := range userFeatureResp.Features {
|
||||
userFeatureCodes = append(userFeatureCodes, feature.Code)
|
||||
}
|
||||
|
||||
supportPlan = lists.ContainsString(userFeatureCodes, userconfigs.UserFeatureCodePlan)
|
||||
}
|
||||
}
|
||||
|
||||
// HTTP
|
||||
if serverConfig.IsHTTPFamily() {
|
||||
// 1. 域名
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingDomains),
|
||||
"url": "/servers/server/settings/serverNames?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "serverName",
|
||||
"isOn": len(serverConfig.ServerNames) > 0,
|
||||
})
|
||||
// 2. DNS
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingDNS),
|
||||
"url": "/servers/server/settings/dns?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "dns",
|
||||
})
|
||||
// 3. HTTP
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingHTTP),
|
||||
"url": "/servers/server/settings/http?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "http",
|
||||
"isOn": (serverConfig.HTTP != nil && serverConfig.HTTP.IsOn && len(serverConfig.HTTP.Listen) > 0) || (serverConfig.Web != nil && serverConfig.Web.RedirectToHttps != nil && serverConfig.Web.RedirectToHttps.IsOn),
|
||||
"isOff": serverConfig.HTTP != nil && !serverConfig.HTTP.IsOn,
|
||||
})
|
||||
// 4. HTTPS
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingHTTPS),
|
||||
"url": "/servers/server/settings/https?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "https",
|
||||
"isOn": serverConfig.HTTPS != nil && serverConfig.HTTPS.IsOn && len(serverConfig.HTTPS.Listen) > 0,
|
||||
"isOff": serverConfig.HTTPS != nil && !serverConfig.HTTPS.IsOn,
|
||||
})
|
||||
// 5. Websocket
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingWebsocket),
|
||||
"url": "/servers/server/settings/websocket?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "websocket",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.WebsocketRef != nil && serverConfig.Web.WebsocketRef.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeWebsocket,
|
||||
})
|
||||
// 6. 源站
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingOrigins),
|
||||
"url": "/servers/server/settings/reverseProxy?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "reverseProxy",
|
||||
"isOn": serverConfig.ReverseProxyRef != nil && serverConfig.ReverseProxyRef.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeReverseProxy,
|
||||
})
|
||||
// 7. 访问日志
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingAccessLog),
|
||||
"url": "/servers/server/settings/accessLog?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "accessLog",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.AccessLogRef != nil && serverConfig.Web.AccessLogRef.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeAccessLog,
|
||||
})
|
||||
// 8. 统计
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingStat),
|
||||
"url": "/servers/server/settings/stat?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "stat",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.StatRef != nil && serverConfig.Web.StatRef.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeStat,
|
||||
})
|
||||
|
||||
// 分隔线
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": "-",
|
||||
"url": "",
|
||||
"isActive": false,
|
||||
})
|
||||
|
||||
// 9. WAF
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingWAF),
|
||||
"url": "/servers/server/settings/waf?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "waf",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.FirewallRef != nil && serverConfig.Web.FirewallRef.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeWAF,
|
||||
})
|
||||
// 10. 5秒盾
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingUAM),
|
||||
"url": "/servers/server/settings/uam?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "uam",
|
||||
"isOn": serverConfig.UAM != nil && serverConfig.UAM.IsOn,
|
||||
"isImportant": serverConfig.UAM != nil && serverConfig.UAM.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeUAM,
|
||||
})
|
||||
// 11. CC防护
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingCC),
|
||||
"url": "/servers/server/settings/cc?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "cc",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.CC != nil && serverConfig.Web.CC.IsOn,
|
||||
"isImportant": serverConfig.Web != nil && serverConfig.Web.CC != nil && serverConfig.Web.CC.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeCC,
|
||||
})
|
||||
// 12. 访问鉴权
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingAuth),
|
||||
"url": "/servers/server/settings/access?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "access",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.Auth != nil && serverConfig.Web.Auth.IsOn && len(serverConfig.Web.Auth.PolicyRefs) > 0,
|
||||
"configCode": serverconfigs.ConfigCodeAuth,
|
||||
})
|
||||
// 13. 防盗链
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingReferers),
|
||||
"url": "/servers/server/settings/referers?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "referer",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.Referers != nil && serverConfig.Web.Referers.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeReferers,
|
||||
})
|
||||
// 14. UA名单
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingUserAgents),
|
||||
"url": "/servers/server/settings/userAgent?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "userAgent",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.UserAgent != nil && serverConfig.Web.UserAgent.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeUserAgent,
|
||||
})
|
||||
// 15. 请求限制
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingRequestLimit),
|
||||
"url": "/servers/server/settings/requestLimit?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "requestLimit",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.RequestLimit != nil && serverConfig.Web.RequestLimit.IsOn,
|
||||
})
|
||||
// 16. 网页动态加密(原网页优化)
|
||||
var encryptionEnabled = false
|
||||
if serverConfig.Web != nil && serverConfig.Web.Encryption != nil {
|
||||
// 确保 Encryption 已初始化(Init 是幂等的,可以安全地多次调用)
|
||||
_ = serverConfig.Web.Encryption.Init()
|
||||
encryptionEnabled = serverConfig.Web.Encryption.IsEnabled()
|
||||
}
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingOptimization),
|
||||
"url": "/servers/server/settings/optimization?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "optimization",
|
||||
"isOn": encryptionEnabled,
|
||||
"isOff": serverConfig.Web != nil && serverConfig.Web.Encryption != nil && !encryptionEnabled,
|
||||
"configCode": serverconfigs.ConfigCodeOptimization,
|
||||
})
|
||||
// 17. 音视频加密
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingMultimedia),
|
||||
"url": "/servers/server/settings/multimedia?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "multimedia",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.HLS != nil && !serverConfig.Web.HLS.IsEmpty(),
|
||||
"configCode": serverconfigs.ConfigCodeMultimedia,
|
||||
})
|
||||
|
||||
// 分隔线
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": "-",
|
||||
"url": "",
|
||||
"isActive": false,
|
||||
})
|
||||
|
||||
// 18. URL调整
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingRedirects),
|
||||
"url": "/servers/server/settings/redirects?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "redirects",
|
||||
"isOn": serverConfig.Web != nil && len(serverConfig.Web.HostRedirects) > 0,
|
||||
"configCode": serverconfigs.ConfigCodeHostRedirects,
|
||||
})
|
||||
// 19. 重写规则
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingRewriteRules),
|
||||
"url": "/servers/server/settings/rewrite?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "rewrite",
|
||||
"isOn": serverConfig.Web != nil && len(serverConfig.Web.RewriteRefs) > 0,
|
||||
})
|
||||
// 20. 缓存
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingCache),
|
||||
"url": "/servers/server/settings/cache?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "cache",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.Cache != nil && serverConfig.Web.Cache.IsOn && len(serverConfig.Web.Cache.CacheRefs) > 0,
|
||||
"configCode": serverconfigs.ConfigCodeCache,
|
||||
})
|
||||
// 21. 内容压缩
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingCompression),
|
||||
"url": "/servers/server/settings/compression?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "compression",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.Compression != nil && serverConfig.Web.Compression.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeCompression,
|
||||
})
|
||||
// 22. WebP
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingWebP),
|
||||
"url": "/servers/server/settings/webp?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "webp",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.WebP != nil && serverConfig.Web.WebP.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeWebp,
|
||||
})
|
||||
// 23. 自定义页面
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingPages),
|
||||
"url": "/servers/server/settings/pages?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "pages",
|
||||
"isOn": serverConfig.Web != nil && (len(serverConfig.Web.Pages) > 0 || (serverConfig.Web.Shutdown != nil && serverConfig.Web.Shutdown.IsOn)),
|
||||
"configCode": serverconfigs.ConfigCodePages,
|
||||
})
|
||||
// 24. HTTP报头
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingHTTPHeaders),
|
||||
"url": "/servers/server/settings/headers?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "header",
|
||||
"isOn": serverConfig.Web != nil && ((serverConfig.Web.RequestHeaderPolicyRef != nil && serverConfig.Web.RequestHeaderPolicyRef.IsOn) || (serverConfig.Web.ResponseHeaderPolicyRef != nil && serverConfig.Web.ResponseHeaderPolicyRef.IsOn)),
|
||||
})
|
||||
// 25. 字符编码
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingCharset),
|
||||
"url": "/servers/server/settings/charset?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "charset",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.Charset != nil && serverConfig.Web.Charset.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeCharset,
|
||||
})
|
||||
// 26. 访问IP地址
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingClientIP),
|
||||
"url": "/servers/server/settings/remoteAddr?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "remoteAddr",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.RemoteAddr != nil && serverConfig.Web.RemoteAddr.IsOn,
|
||||
"configCode": serverconfigs.ConfigCodeRemoteAddr,
|
||||
})
|
||||
// 27. 边缘脚本
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingScripts),
|
||||
"url": "/servers/server/settings/requestScripts?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "requestScripts",
|
||||
"isOn": serverConfig.Web != nil && serverConfig.Web.RequestScripts != nil && !serverConfig.Web.RequestScripts.IsEmpty(),
|
||||
})
|
||||
|
||||
// 分隔线
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": "-",
|
||||
"url": "",
|
||||
"isActive": false,
|
||||
})
|
||||
|
||||
// 28. 分组
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingGroup),
|
||||
"url": "/servers/server/settings/groups?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "group",
|
||||
"isOn": serverConfig.Group != nil,
|
||||
})
|
||||
// 29. 套餐(如果有权限)
|
||||
if supportPlan {
|
||||
var planName = ""
|
||||
if serverConfig.UserPlan != nil && serverConfig.UserPlan.PlanId > 0 {
|
||||
planName = this.findPlanName(serverConfig.UserPlan.PlanId)
|
||||
}
|
||||
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingPlan),
|
||||
"subName": planName,
|
||||
"url": "/servers/server/settings/plan?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "plan",
|
||||
"isOn": serverConfig.UserPlan != nil && serverConfig.UserPlan.IsAvailable(),
|
||||
})
|
||||
}
|
||||
}
|
||||
return menuItems
|
||||
}
|
||||
|
||||
// 删除菜单
|
||||
func (this *ServerHelper) createDeleteMenu(action *actions.ActionObject, secondMenuItem string, serverIdString string, serverConfig *serverconfigs.ServerConfig) []maps.Map {
|
||||
var menuItems = []maps.Map{}
|
||||
menuItems = append(menuItems, maps.Map{
|
||||
"name": this.Lang(action, codes.Server_MenuSettingDelete),
|
||||
"url": "/servers/server/delete?serverId=" + serverIdString,
|
||||
"isActive": secondMenuItem == "index",
|
||||
})
|
||||
return menuItems
|
||||
}
|
||||
|
||||
// 查找套餐名称
|
||||
func (this *ServerHelper) findPlanName(planId int64) string {
|
||||
if planId <= 0 {
|
||||
return ""
|
||||
}
|
||||
rpcClient, err := rpc.SharedRPC()
|
||||
if err != nil {
|
||||
logs.Error(err)
|
||||
return ""
|
||||
}
|
||||
planResp, err := rpcClient.PlanRPC().FindBasicPlan(rpcClient.Context(0), &pb.FindBasicPlanRequest{PlanId: planId})
|
||||
if err != nil {
|
||||
logs.Error(err)
|
||||
return ""
|
||||
}
|
||||
if planResp.Plan == nil {
|
||||
return ""
|
||||
}
|
||||
return planResp.Plan.Name
|
||||
}
|
||||
Reference in New Issue
Block a user