diff --git a/internal/rpc/rpc_client.go b/internal/rpc/rpc_client.go index 1aaedeb6..5f62acce 100644 --- a/internal/rpc/rpc_client.go +++ b/internal/rpc/rpc_client.go @@ -35,6 +35,7 @@ type RPCClient struct { httpAccessLogPolicyClients []pb.HTTPAccessLogPolicyServiceClient httpCachePolicyClients []pb.HTTPCachePolicyServiceClient httpFirewallPolicyClients []pb.HTTPFirewallPolicyServiceClient + httpLocationClients []pb.HTTPLocationServiceClient } func NewRPCClient(apiConfig *configs.APIConfig) (*RPCClient, error) { @@ -59,6 +60,7 @@ func NewRPCClient(apiConfig *configs.APIConfig) (*RPCClient, error) { httpAccessLogPolicyClients := []pb.HTTPAccessLogPolicyServiceClient{} httpCachePolicyClients := []pb.HTTPCachePolicyServiceClient{} httpFirewallPolicyClients := []pb.HTTPFirewallPolicyServiceClient{} + httpLocationClients := []pb.HTTPLocationServiceClient{} conns := []*grpc.ClientConn{} for _, endpoint := range apiConfig.RPC.Endpoints { @@ -91,6 +93,7 @@ func NewRPCClient(apiConfig *configs.APIConfig) (*RPCClient, error) { httpAccessLogPolicyClients = append(httpAccessLogPolicyClients, pb.NewHTTPAccessLogPolicyServiceClient(conn)) httpCachePolicyClients = append(httpCachePolicyClients, pb.NewHTTPCachePolicyServiceClient(conn)) httpFirewallPolicyClients = append(httpFirewallPolicyClients, pb.NewHTTPFirewallPolicyServiceClient(conn)) + httpLocationClients = append(httpLocationClients, pb.NewHTTPLocationServiceClient(conn)) } return &RPCClient{ @@ -112,6 +115,7 @@ func NewRPCClient(apiConfig *configs.APIConfig) (*RPCClient, error) { httpAccessLogPolicyClients: httpAccessLogPolicyClients, httpCachePolicyClients: httpCachePolicyClients, httpFirewallPolicyClients: httpFirewallPolicyClients, + httpLocationClients: httpLocationClients, }, nil } @@ -234,6 +238,13 @@ func (this *RPCClient) HTTPFirewallPolicyRPC() pb.HTTPFirewallPolicyServiceClien return nil } +func (this *RPCClient) HTTPLocationRPC() pb.HTTPLocationServiceClient { + if len(this.httpLocationClients) > 0 { + return this.httpLocationClients[rands.Int(0, len(this.httpLocationClients)-1)] + } + return nil +} + func (this *RPCClient) Context(adminId int64) context.Context { ctx := context.Background() m := maps.Map{ diff --git a/internal/web/actions/actionutils/parent_action.go b/internal/web/actions/actionutils/parent_action.go index 509112b8..8d02c70e 100644 --- a/internal/web/actions/actionutils/parent_action.go +++ b/internal/web/actions/actionutils/parent_action.go @@ -20,6 +20,11 @@ type ParentAction struct { rpcClient *rpc.RPCClient } +// 可以调用自身的一个简便方法 +func (this *ParentAction) Parent() *ParentAction { + return this +} + func (this *ParentAction) ErrorPage(err error) { if err == nil { return @@ -64,6 +69,10 @@ func (this *ParentAction) SecondMenu(menuItem string) { this.Data["secondMenuItem"] = menuItem } +func (this *ParentAction) TinyMenu(menuItem string) { + this.Data["tinyMenuItem"] = menuItem +} + func (this *ParentAction) AdminId() int64 { return this.Context.GetInt64("adminId") } diff --git a/internal/web/actions/default/servers/server/settings/accessLog/index.go b/internal/web/actions/default/servers/server/settings/accessLog/index.go index 67705c8e..d438cd6a 100644 --- a/internal/web/actions/default/servers/server/settings/accessLog/index.go +++ b/internal/web/actions/default/servers/server/settings/accessLog/index.go @@ -1,8 +1,8 @@ package accessLog import ( - "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" @@ -22,13 +22,7 @@ func (this *IndexAction) RunGet(params struct { ServerId int64 }) { // 获取配置 - webResp, err := this.RPC().ServerRPC().FindAndInitServerWebConfig(this.AdminContext(), &pb.FindAndInitServerWebRequest{ServerId: params.ServerId}) - if err != nil { - this.ErrorPage(err) - return - } - webConfig := &serverconfigs.HTTPWebConfig{} - err = json.Unmarshal(webResp.Config, webConfig) + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) if err != nil { this.ErrorPage(err) return @@ -67,7 +61,7 @@ func (this *IndexAction) RunPost(params struct { }) { // TODO 检查参数 - _, err := this.RPC().HTTPWebRPC().UpdateHTTPAccessLog(this.AdminContext(), &pb.UpdateHTTPAccessLogRequest{ + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebAccessLog(this.AdminContext(), &pb.UpdateHTTPWebAccessLogRequest{ WebId: params.WebId, AccessLogJSON: params.AccessLogJSON, }) diff --git a/internal/web/actions/default/servers/server/settings/cache/index.go b/internal/web/actions/default/servers/server/settings/cache/index.go index d4c3d529..ecd31ee0 100644 --- a/internal/web/actions/default/servers/server/settings/cache/index.go +++ b/internal/web/actions/default/servers/server/settings/cache/index.go @@ -1,10 +1,9 @@ package cache import ( - "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" - "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/maps" ) @@ -21,13 +20,7 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - webConfigResp, err := this.RPC().ServerRPC().FindAndInitServerWebConfig(this.AdminContext(), &pb.FindAndInitServerWebRequest{ServerId: params.ServerId}) - if err != nil { - this.ErrorPage(err) - return - } - webConfig := &serverconfigs.HTTPWebConfig{} - err = json.Unmarshal(webConfigResp.Config, webConfig) + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) if err != nil { this.ErrorPage(err) return @@ -63,7 +56,7 @@ func (this *IndexAction) RunPost(params struct { }) { // TODO 校验配置 - _, err := this.RPC().HTTPWebRPC().UpdateHTTPCache(this.AdminContext(), &pb.UpdateHTTPCacheRequest{ + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebCache(this.AdminContext(), &pb.UpdateHTTPWebCacheRequest{ WebId: params.WebId, CacheJSON: params.CacheJSON, }) diff --git a/internal/web/actions/default/servers/server/settings/charset/index.go b/internal/web/actions/default/servers/server/settings/charset/index.go index 6c27f5d0..f77d41a9 100644 --- a/internal/web/actions/default/servers/server/settings/charset/index.go +++ b/internal/web/actions/default/servers/server/settings/charset/index.go @@ -1,10 +1,9 @@ package charset import ( - "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" - "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/configutils" "github.com/iwind/TeaGo/actions" ) @@ -21,13 +20,7 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - webConfigResp, err := this.RPC().ServerRPC().FindAndInitServerWebConfig(this.AdminContext(), &pb.FindAndInitServerWebRequest{ServerId: params.ServerId}) - if err != nil { - this.ErrorPage(err) - return - } - webConfig := &serverconfigs.HTTPWebConfig{} - err = json.Unmarshal(webConfigResp.Config, webConfig) + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/gzip/index.go b/internal/web/actions/default/servers/server/settings/gzip/index.go index cbba4458..a8714a80 100644 --- a/internal/web/actions/default/servers/server/settings/gzip/index.go +++ b/internal/web/actions/default/servers/server/settings/gzip/index.go @@ -3,6 +3,7 @@ package gzip import ( "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" @@ -21,18 +22,12 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - webConfigResp, err := this.RPC().ServerRPC().FindAndInitServerWebConfig(this.AdminContext(), &pb.FindAndInitServerWebRequest{ServerId: params.ServerId}) + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) if err != nil { this.ErrorPage(err) return } - webConfig := &serverconfigs.HTTPWebConfig{} - err = json.Unmarshal(webConfigResp.Config, webConfig) - if err != nil { - this.ErrorPage(err) - return - } - + this.Data["webId"] = webConfig.Id gzipId := int64(0) @@ -49,7 +44,7 @@ func (this *IndexAction) RunGet(params struct { this.ErrorPage(err) return } - err = json.Unmarshal(resp.Config, gzipConfig) + err = json.Unmarshal(resp.GzipJSON, gzipConfig) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/headers/createDeletePopup.go b/internal/web/actions/default/servers/server/settings/headers/createDeletePopup.go index be76f151..950b1a77 100644 --- a/internal/web/actions/default/servers/server/settings/headers/createDeletePopup.go +++ b/internal/web/actions/default/servers/server/settings/headers/createDeletePopup.go @@ -36,7 +36,7 @@ func (this *CreateDeletePopupAction) RunPost(params struct { return } policyConfig := &shared.HTTPHeaderPolicy{} - err = json.Unmarshal(policyConfigResp.Config, policyConfig) + err = json.Unmarshal(policyConfigResp.HeaderPolicyJSON, policyConfig) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/headers/createSetPopup.go b/internal/web/actions/default/servers/server/settings/headers/createSetPopup.go index f5e611a3..d76570f5 100644 --- a/internal/web/actions/default/servers/server/settings/headers/createSetPopup.go +++ b/internal/web/actions/default/servers/server/settings/headers/createSetPopup.go @@ -42,7 +42,7 @@ func (this *CreateSetPopupAction) RunPost(params struct { return } policyConfig := &shared.HTTPHeaderPolicy{} - err = json.Unmarshal(configResp.Config, policyConfig) + err = json.Unmarshal(configResp.HeaderPolicyJSON, policyConfig) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/headers/delete.go b/internal/web/actions/default/servers/server/settings/headers/delete.go index 93e69aa5..8799870c 100644 --- a/internal/web/actions/default/servers/server/settings/headers/delete.go +++ b/internal/web/actions/default/servers/server/settings/headers/delete.go @@ -25,7 +25,7 @@ func (this *DeleteAction) RunPost(params struct { return } policyConfig := &shared.HTTPHeaderPolicy{} - err = json.Unmarshal(policyConfigResp.Config, policyConfig) + err = json.Unmarshal(policyConfigResp.HeaderPolicyJSON, policyConfig) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/headers/deleteDeletingHeader.go b/internal/web/actions/default/servers/server/settings/headers/deleteDeletingHeader.go index 4a0ceb25..dda8ed67 100644 --- a/internal/web/actions/default/servers/server/settings/headers/deleteDeletingHeader.go +++ b/internal/web/actions/default/servers/server/settings/headers/deleteDeletingHeader.go @@ -20,7 +20,7 @@ func (this *DeleteDeletingHeaderAction) RunPost(params struct { this.ErrorPage(err) return } - policyConfigJSON := policyConfigResp.Config + policyConfigJSON := policyConfigResp.HeaderPolicyJSON policyConfig := &shared.HTTPHeaderPolicy{} err = json.Unmarshal(policyConfigJSON, policyConfig) if err != nil { diff --git a/internal/web/actions/default/servers/server/settings/headers/index.go b/internal/web/actions/default/servers/server/settings/headers/index.go index 4feaaa26..a3ae8c80 100644 --- a/internal/web/actions/default/servers/server/settings/headers/index.go +++ b/internal/web/actions/default/servers/server/settings/headers/index.go @@ -1,11 +1,10 @@ package headers import ( - "encoding/json" "errors" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" - "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" ) type IndexAction struct { @@ -20,13 +19,7 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - webConfigResp, err := this.RPC().ServerRPC().FindAndInitServerWebConfig(this.AdminContext(), &pb.FindAndInitServerWebRequest{ServerId: params.ServerId}) - if err != nil { - this.ErrorPage(err) - return - } - webConfig := &serverconfigs.HTTPWebConfig{} - err = json.Unmarshal(webConfigResp.Config, webConfig) + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) if err != nil { this.ErrorPage(err) return @@ -73,12 +66,7 @@ func (this *IndexAction) RunGet(params struct { // 重新获取配置 if isChanged { - webConfigResp, err := this.RPC().ServerRPC().FindAndInitServerWebConfig(this.AdminContext(), &pb.FindAndInitServerWebRequest{ServerId: params.ServerId}) - if err != nil { - this.ErrorPage(err) - return - } - err = json.Unmarshal(webConfigResp.Config, webConfig) + webConfig, err = webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/headers/updateSetPopup.go b/internal/web/actions/default/servers/server/settings/headers/updateSetPopup.go index 74a0c1dc..6503cdef 100644 --- a/internal/web/actions/default/servers/server/settings/headers/updateSetPopup.go +++ b/internal/web/actions/default/servers/server/settings/headers/updateSetPopup.go @@ -29,7 +29,7 @@ func (this *UpdateSetPopupAction) RunGet(params struct { return } headerConfig := &shared.HTTPHeaderConfig{} - err = json.Unmarshal(headerResp.Config, headerConfig) + err = json.Unmarshal(headerResp.HeaderJSON, headerConfig) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/http/index.go b/internal/web/actions/default/servers/server/settings/http/index.go index 3ac397d9..7c252674 100644 --- a/internal/web/actions/default/servers/server/settings/http/index.go +++ b/internal/web/actions/default/servers/server/settings/http/index.go @@ -22,7 +22,7 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) if !isOk { return } @@ -58,7 +58,7 @@ func (this *IndexAction) RunPost(params struct { this.Fail("端口地址解析失败:" + err.Error()) } - server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) if !isOk { return } diff --git a/internal/web/actions/default/servers/server/settings/https/index.go b/internal/web/actions/default/servers/server/settings/https/index.go index 5c4fa043..398da0ac 100644 --- a/internal/web/actions/default/servers/server/settings/https/index.go +++ b/internal/web/actions/default/servers/server/settings/https/index.go @@ -22,7 +22,7 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) if !isOk { return } @@ -58,7 +58,7 @@ func (this *IndexAction) RunPost(params struct { this.Fail("端口地址解析失败:" + err.Error()) } - server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) if !isOk { return } diff --git a/internal/web/actions/default/servers/server/settings/locations/create.go b/internal/web/actions/default/servers/server/settings/locations/create.go new file mode 100644 index 00000000..09af3293 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/create.go @@ -0,0 +1,116 @@ +package locations + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" + "github.com/iwind/TeaGo/actions" + "regexp" + "strings" +) + +type CreateAction struct { + actionutils.ParentAction +} + +func (this *CreateAction) Init() { + this.Nav("", "setting", "create") + this.SecondMenu("locations") +} + +func (this *CreateAction) RunGet(params struct { + ServerId int64 +}) { + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + this.Data["patternTypes"] = serverconfigs.AllLocationPatternTypes() + + this.Show() +} + +func (this *CreateAction) RunPost(params struct { + WebId int64 + + Name string + Pattern string + PatternType int + Description string + + IsBreak bool + IsCaseInsensitive bool + IsReverse bool + + Must *actions.Must +}) { + params.Must. + Field("pattern", params.Pattern). + Require("请输入路径匹配规则") + + // 校验正则 + if params.PatternType == serverconfigs.HTTPLocationPatternTypeRegexp { + _, err := regexp.Compile(params.Pattern) + if err != nil { + this.Fail("正则表达式校验失败:" + err.Error()) + } + } + + // 自动加上前缀斜杠 + if params.PatternType == serverconfigs.HTTPLocationPatternTypePrefix || + params.PatternType == serverconfigs.HTTPLocationPatternTypeExact { + params.Pattern = "/" + strings.TrimLeft(params.Pattern, "/") + } + + location := &serverconfigs.HTTPLocationConfig{} + location.SetPattern(params.Pattern, params.PatternType, params.IsCaseInsensitive, params.IsReverse) + resultPattern := location.Pattern + + locationResp, err := this.RPC().HTTPLocationRPC().CreateHTTPLocation(this.AdminContext(), &pb.CreateHTTPLocationRequest{ + ParentId: 0, // TODO 需要实现 + Name: params.Name, + Description: params.Description, + Pattern: resultPattern, + IsBreak: params.IsBreak, + }) + if err != nil { + this.ErrorPage(err) + return + } + + locationId := locationResp.LocationId + + // Web中Location + webConfig, err := webutils.FindWebConfigWithId(this.Parent(), params.WebId) + if err != nil { + this.ErrorPage(err) + return + } + // TODO 支持Location嵌套 + webConfig.LocationRefs = append(webConfig.LocationRefs, &serverconfigs.HTTPLocationRef{ + IsOn: true, + LocationId: locationId, + Children: nil, + }) + + refJSON, err := json.Marshal(webConfig.LocationRefs) + if err != nil { + this.ErrorPage(err) + return + } + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebLocations(this.AdminContext(), &pb.UpdateHTTPWebLocationsRequest{ + WebId: params.WebId, + LocationsJSON: refJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/delete.go b/internal/web/actions/default/servers/server/settings/locations/delete.go new file mode 100644 index 00000000..75ed246d --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/delete.go @@ -0,0 +1,40 @@ +package locations + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" +) + +type DeleteAction struct { + actionutils.ParentAction +} + +func (this *DeleteAction) RunPost(params struct { + WebId int64 + LocationId int64 +}) { + webConfig, err := webutils.FindWebConfigWithId(this.Parent(), params.WebId) + if err != nil { + this.ErrorPage(err) + return + } + webConfig.RemoveLocationRef(params.LocationId) + + refJSON, err := json.Marshal(webConfig.LocationRefs) + if err != nil { + this.ErrorPage(err) + return + } + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebLocations(this.AdminContext(), &pb.UpdateHTTPWebLocationsRequest{ + WebId: params.WebId, + LocationsJSON: refJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/index.go b/internal/web/actions/default/servers/server/settings/locations/index.go index 57b20f35..cdebd130 100644 --- a/internal/web/actions/default/servers/server/settings/locations/index.go +++ b/internal/web/actions/default/servers/server/settings/locations/index.go @@ -2,6 +2,7 @@ package locations import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" ) type IndexAction struct { @@ -16,7 +17,18 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - // TODO + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["webId"] = webConfig.Id + + if webConfig.Locations != nil { + this.Data["locations"] = webConfig.Locations + } else { + this.Data["locations"] = []interface{}{} + } this.Show() } diff --git a/internal/web/actions/default/servers/server/settings/locations/init.go b/internal/web/actions/default/servers/server/settings/locations/init.go index ec324bfb..e267c97d 100644 --- a/internal/web/actions/default/servers/server/settings/locations/init.go +++ b/internal/web/actions/default/servers/server/settings/locations/init.go @@ -13,6 +13,8 @@ func init() { Helper(serverutils.NewServerHelper()). Prefix("/servers/server/settings/locations"). Get("", new(IndexAction)). + GetPost("/create", new(CreateAction)). + Post("/delete", new(DeleteAction)). EndAll() }) } diff --git a/internal/web/actions/default/servers/server/settings/locations/location/index.go b/internal/web/actions/default/servers/server/settings/locations/location/index.go new file mode 100644 index 00000000..070f5d4a --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/location/index.go @@ -0,0 +1,38 @@ +package location + +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 IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { + this.TinyMenu("basic") +} + +func (this *IndexAction) RunGet(params struct { + LocationId int64 +}) { + locationConfigResp, err := this.RPC().HTTPLocationRPC().FindEnabledHTTPLocationConfig(this.AdminContext(), &pb.FindEnabledHTTPLocationConfigRequest{LocationId: params.LocationId}) + if err != nil { + this.ErrorPage(err) + return + } + locationConfig := &serverconfigs.HTTPLocationConfig{} + err = json.Unmarshal(locationConfigResp.LocationJSON, locationConfig) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["locationId"] = locationConfig.Id + this.Data["locationConfig"] = locationConfig + + this.Show() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/location/init.go b/internal/web/actions/default/servers/server/settings/locations/location/init.go new file mode 100644 index 00000000..708306a5 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/location/init.go @@ -0,0 +1,20 @@ +package location + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/locationutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/serverutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/helpers" + "github.com/iwind/TeaGo" +) + +func init() { + TeaGo.BeforeStart(func(server *TeaGo.Server) { + server. + Helper(helpers.NewUserMustAuth()). + Helper(locationutils.NewLocationHelper()). + Helper(serverutils.NewServerHelper()). + Prefix("/servers/server/settings/locations/location"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go b/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go new file mode 100644 index 00000000..6b6e2ef4 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go @@ -0,0 +1,113 @@ +package locationutils + +import ( + "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/maps" + "net/http" +) + +type LocationHelper struct { +} + +func NewLocationHelper() *LocationHelper { + return &LocationHelper{} +} + +func (this *LocationHelper) BeforeAction(action *actions.ActionObject) { + if action.Request.Method != http.MethodGet { + return + } + + serverIdString := action.ParamString("serverId") + locationIdString := action.ParamString("locationId") + + action.Data["leftMenuItemIsDisabled"] = true + action.Data["mainMenu"] = "server" + action.Data["mainTab"] = "setting" + action.Data["secondMenuItem"] = "locations" + action.Data["tinyLeftMenuItems"] = this.createMenus(serverIdString, locationIdString, action.Data.GetString("tinyMenuItem")) +} + +func (this *LocationHelper) createMenus(serverIdString string, locationIdString string, secondMenuItem string) []maps.Map { + menuItems := []maps.Map{ + { + "name": "基本信息", + "url": "/servers/server/settings/locations/location?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "basic", + }, + } + + menuItems = append(menuItems, maps.Map{ + "name": "Web设置", + "url": "/servers/server/settings/locations/web?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "web", + }) + + menuItems = append(menuItems, maps.Map{ + "name": "反向代理", + "url": "/servers/server/settings/locations/reverseProxy?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "reverseProxy", + }) + + menuItems = append(menuItems, maps.Map{ + "name": "访问控制", + "url": "/servers/server/settings/locations/access?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "access", + }) + + menuItems = append(menuItems, maps.Map{ + "name": "WAF", + "url": "/servers/server/settings/locations/waf?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "waf", + }) + + menuItems = append(menuItems, maps.Map{ + "name": "缓存", + "url": "/servers/server/settings/locations/cache?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "cache", + }) + + menuItems = append(menuItems, maps.Map{ + "name": "-", + "url": "", + "isActive": false, + }) + + menuItems = append(menuItems, maps.Map{ + "name": "字符编码", + "url": "/servers/server/settings/locations/charset?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "charset", + }) + + menuItems = append(menuItems, maps.Map{ + "name": "访问日志", + "url": "/servers/server/settings/locations/accessLog?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "accessLog", + }) + + menuItems = append(menuItems, maps.Map{ + "name": "统计", + "url": "/servers/server/settings/locations/stat?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "stat", + }) + + menuItems = append(menuItems, maps.Map{ + "name": "Gzip压缩", + "url": "/servers/server/settings/locations/gzip?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "gzip", + }) + + menuItems = append(menuItems, maps.Map{ + "name": "特殊页面", + "url": "/servers/server/settings/locations/pages?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "pages", + }) + + menuItems = append(menuItems, maps.Map{ + "name": "HTTP Header", + "url": "/servers/server/settings/locations/headers?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "header", + }) + + return menuItems +} diff --git a/internal/web/actions/default/servers/server/settings/origins/addPopup.go b/internal/web/actions/default/servers/server/settings/origins/addPopup.go index b37f8d01..f35712c4 100644 --- a/internal/web/actions/default/servers/server/settings/origins/addPopup.go +++ b/internal/web/actions/default/servers/server/settings/origins/addPopup.go @@ -75,7 +75,7 @@ func (this *AddPopupAction) RunPost(params struct { this.ErrorPage(err) return } - originConfigData := originConfigResp.Config + originConfigData := originConfigResp.OriginJSON var originConfig = &serverconfigs.OriginServerConfig{} err = json.Unmarshal(originConfigData, originConfig) if err != nil { diff --git a/internal/web/actions/default/servers/server/settings/origins/updatePopup.go b/internal/web/actions/default/servers/server/settings/origins/updatePopup.go index 08c75986..b6a69202 100644 --- a/internal/web/actions/default/servers/server/settings/origins/updatePopup.go +++ b/internal/web/actions/default/servers/server/settings/origins/updatePopup.go @@ -46,7 +46,7 @@ func (this *UpdatePopupAction) RunGet(params struct { this.ErrorPage(err) return } - configData := originResp.Config + configData := originResp.OriginJSON config := &serverconfigs.OriginServerConfig{} err = json.Unmarshal(configData, config) if err != nil { @@ -105,7 +105,7 @@ func (this *UpdatePopupAction) RunPost(params struct { this.ErrorPage(err) return } - originConfigData := originConfigResp.Config + originConfigData := originConfigResp.OriginJSON var originConfig = &serverconfigs.OriginServerConfig{} err = json.Unmarshal(originConfigData, originConfig) if err != nil { diff --git a/internal/web/actions/default/servers/server/settings/pages/createPopup.go b/internal/web/actions/default/servers/server/settings/pages/createPopup.go index 4cea35d0..3846f24e 100644 --- a/internal/web/actions/default/servers/server/settings/pages/createPopup.go +++ b/internal/web/actions/default/servers/server/settings/pages/createPopup.go @@ -53,7 +53,7 @@ func (this *CreatePopupAction) RunPost(params struct { } pageConfig := &serverconfigs.HTTPPageConfig{} - err = json.Unmarshal(configResp.Config, pageConfig) + err = json.Unmarshal(configResp.PageJSON, pageConfig) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/pages/index.go b/internal/web/actions/default/servers/server/settings/pages/index.go index 5d8e44bc..f19f954c 100644 --- a/internal/web/actions/default/servers/server/settings/pages/index.go +++ b/internal/web/actions/default/servers/server/settings/pages/index.go @@ -1,10 +1,9 @@ package pages import ( - "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" - "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" ) @@ -20,13 +19,7 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - webResp, err := this.RPC().ServerRPC().FindAndInitServerWebConfig(this.AdminContext(), &pb.FindAndInitServerWebRequest{ServerId: params.ServerId}) - if err != nil { - this.ErrorPage(err) - return - } - webConfig := &serverconfigs.HTTPWebConfig{} - err = json.Unmarshal(webResp.Config, webConfig) + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/pages/updatePopup.go b/internal/web/actions/default/servers/server/settings/pages/updatePopup.go index d53581f2..911ac5e0 100644 --- a/internal/web/actions/default/servers/server/settings/pages/updatePopup.go +++ b/internal/web/actions/default/servers/server/settings/pages/updatePopup.go @@ -27,7 +27,7 @@ func (this *UpdatePopupAction) RunGet(params struct { } pageConfig := &serverconfigs.HTTPPageConfig{} - err = json.Unmarshal(configResp.Config, pageConfig) + err = json.Unmarshal(configResp.PageJSON, pageConfig) if err != nil { this.ErrorPage(err) return @@ -71,7 +71,7 @@ func (this *UpdatePopupAction) RunPost(params struct { } pageConfig := &serverconfigs.HTTPPageConfig{} - err = json.Unmarshal(configResp.Config, pageConfig) + err = json.Unmarshal(configResp.PageJSON, pageConfig) if err != nil { this.ErrorPage(err) return 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 3dd75931..6f10d6ec 100644 --- a/internal/web/actions/default/servers/server/settings/reverseProxy/index.go +++ b/internal/web/actions/default/servers/server/settings/reverseProxy/index.go @@ -34,14 +34,14 @@ func (this *IndexAction) RunGet(params struct { return } reverseProxyRef := &serverconfigs.ReverseProxyRef{} - err = json.Unmarshal(reverseProxyResp.ReverseProxyRef, reverseProxyRef) + err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef) if err != nil { this.ErrorPage(err) return } reverseProxy := &serverconfigs.ReverseProxyConfig{} - err = json.Unmarshal(reverseProxyResp.ReverseProxy, reverseProxy) + err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy) if err != nil { this.ErrorPage(err) return 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 2f4371cc..8f051a59 100644 --- a/internal/web/actions/default/servers/server/settings/reverseProxy/scheduling.go +++ b/internal/web/actions/default/servers/server/settings/reverseProxy/scheduling.go @@ -26,7 +26,7 @@ func (this *SchedulingAction) RunGet(params struct { return } reverseProxy := &serverconfigs.ReverseProxyConfig{} - err = json.Unmarshal(reverseProxyResp.ReverseProxy, reverseProxy) + err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/reverseProxy/updateSchedulingPopup.go b/internal/web/actions/default/servers/server/settings/reverseProxy/updateSchedulingPopup.go index 5dc26437..38f77f8c 100644 --- a/internal/web/actions/default/servers/server/settings/reverseProxy/updateSchedulingPopup.go +++ b/internal/web/actions/default/servers/server/settings/reverseProxy/updateSchedulingPopup.go @@ -30,7 +30,7 @@ func (this *UpdateSchedulingPopupAction) RunGet(params struct { this.Data["serverId"] = params.ServerId this.Data["reverseProxyId"] = params.ReverseProxyId - _, serverConfig, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) + _, serverConfig, isOk := serverutils.FindServer(this.Parent(), params.ServerId) if !isOk { return } @@ -42,7 +42,7 @@ func (this *UpdateSchedulingPopupAction) RunGet(params struct { this.ErrorPage(err) return } - configData := reverseProxyResp.Config + configData := reverseProxyResp.ReverseProxyJSON reverseProxyConfig := &serverconfigs.ReverseProxyConfig{} err = json.Unmarshal(configData, reverseProxyConfig) @@ -98,7 +98,7 @@ func (this *UpdateSchedulingPopupAction) RunPost(params struct { this.ErrorPage(err) return } - configData := reverseProxyResp.Config + configData := reverseProxyResp.ReverseProxyJSON reverseProxy := &serverconfigs.ReverseProxyConfig{} err = json.Unmarshal(configData, reverseProxy) if err != nil { diff --git a/internal/web/actions/default/servers/server/settings/serverNames/index.go b/internal/web/actions/default/servers/server/settings/serverNames/index.go index eae9269e..791deabe 100644 --- a/internal/web/actions/default/servers/server/settings/serverNames/index.go +++ b/internal/web/actions/default/servers/server/settings/serverNames/index.go @@ -21,7 +21,7 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) if !isOk { return } diff --git a/internal/web/actions/default/servers/server/settings/stat/index.go b/internal/web/actions/default/servers/server/settings/stat/index.go index 90de0f63..fd526821 100644 --- a/internal/web/actions/default/servers/server/settings/stat/index.go +++ b/internal/web/actions/default/servers/server/settings/stat/index.go @@ -1,10 +1,9 @@ package stat import ( - "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" - "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" ) @@ -20,13 +19,7 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - webResp, err := this.RPC().ServerRPC().FindAndInitServerWebConfig(this.AdminContext(), &pb.FindAndInitServerWebRequest{ServerId: params.ServerId}) - if err != nil { - this.ErrorPage(err) - return - } - webConfig := &serverconfigs.HTTPWebConfig{} - err = json.Unmarshal(webResp.Config, webConfig) + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) if err != nil { this.ErrorPage(err) return @@ -46,7 +39,7 @@ func (this *IndexAction) RunPost(params struct { }) { // TODO 校验配置 - _, err := this.RPC().HTTPWebRPC().UpdateHTTPStat(this.AdminContext(), &pb.UpdateHTTPStatRequest{ + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebStat(this.AdminContext(), &pb.UpdateHTTPWebStatRequest{ WebId: params.WebId, StatJSON: params.StatJSON, }) diff --git a/internal/web/actions/default/servers/server/settings/tcp/index.go b/internal/web/actions/default/servers/server/settings/tcp/index.go index b43f583b..b63fc885 100644 --- a/internal/web/actions/default/servers/server/settings/tcp/index.go +++ b/internal/web/actions/default/servers/server/settings/tcp/index.go @@ -22,7 +22,7 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) if !isOk { return } @@ -49,7 +49,7 @@ func (this *IndexAction) RunPost(params struct { Must *actions.Must }) { - server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) if !isOk { return } diff --git a/internal/web/actions/default/servers/server/settings/tls/index.go b/internal/web/actions/default/servers/server/settings/tls/index.go index 52b1bcdb..66b8e5ce 100644 --- a/internal/web/actions/default/servers/server/settings/tls/index.go +++ b/internal/web/actions/default/servers/server/settings/tls/index.go @@ -22,7 +22,7 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) if !isOk { return } @@ -49,7 +49,7 @@ func (this *IndexAction) RunPost(params struct { Must *actions.Must }) { - server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) if !isOk { return } diff --git a/internal/web/actions/default/servers/server/settings/waf/index.go b/internal/web/actions/default/servers/server/settings/waf/index.go index f4e925a9..c2f51c70 100644 --- a/internal/web/actions/default/servers/server/settings/waf/index.go +++ b/internal/web/actions/default/servers/server/settings/waf/index.go @@ -1,10 +1,9 @@ package waf import ( - "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" - "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/maps" ) @@ -21,17 +20,12 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - webConfigResp, err := this.RPC().ServerRPC().FindAndInitServerWebConfig(this.AdminContext(), &pb.FindAndInitServerWebRequest{ServerId: params.ServerId}) - if err != nil { - this.ErrorPage(err) - return - } - webConfig := &serverconfigs.HTTPWebConfig{} - err = json.Unmarshal(webConfigResp.Config, webConfig) + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) if err != nil { this.ErrorPage(err) return } + this.Data["webId"] = webConfig.Id this.Data["firewallConfig"] = webConfig.FirewallRef @@ -62,7 +56,7 @@ func (this *IndexAction) RunPost(params struct { }) { // TODO 检查配置 - _, err := this.RPC().HTTPWebRPC().UpdateHTTPFirewall(this.AdminContext(), &pb.UpdateHTTPFirewallRequest{ + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebFirewall(this.AdminContext(), &pb.UpdateHTTPWebFirewallRequest{ WebId: params.WebId, FirewallJSON: params.FirewallJSON, }) diff --git a/internal/web/actions/default/servers/server/settings/web/index.go b/internal/web/actions/default/servers/server/settings/web/index.go index 5709e4a2..8cdbf57a 100644 --- a/internal/web/actions/default/servers/server/settings/web/index.go +++ b/internal/web/actions/default/servers/server/settings/web/index.go @@ -20,7 +20,7 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - server, _, isOk := serverutils.FindServer(&this.ParentAction, params.ServerId) + server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) if !isOk { return } diff --git a/internal/web/actions/default/servers/server/settings/webutils/utils.go b/internal/web/actions/default/servers/server/settings/webutils/utils.go new file mode 100644 index 00000000..9e096616 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/webutils/utils.go @@ -0,0 +1,50 @@ +package webutils + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" +) + +// 根据ServerId查找Web配置 +func FindWebConfigWithServerId(parentAction *actionutils.ParentAction, serverId int64) (*serverconfigs.HTTPWebConfig, error) { + resp, err := parentAction.RPC().ServerRPC().FindAndInitServerWebConfig(parentAction.AdminContext(), &pb.FindAndInitServerWebConfigRequest{ServerId: serverId}) + if err != nil { + return nil, err + } + config := &serverconfigs.HTTPWebConfig{} + err = json.Unmarshal(resp.WebJSON, config) + if err != nil { + return nil, err + } + return config, nil +} + +// 根据LocationId查找Web配置 +func FindWebConfigWithLocationId(parentAction *actionutils.ParentAction, locationId int64) (*serverconfigs.HTTPWebConfig, error) { + resp, err := parentAction.RPC().HTTPLocationRPC().FindAndInitHTTPLocationWebConfig(parentAction.AdminContext(), &pb.FindAndInitHTTPLocationWebConfigRequest{LocationId: locationId}) + if err != nil { + return nil, err + } + config := &serverconfigs.HTTPWebConfig{} + err = json.Unmarshal(resp.WebJSON, config) + if err != nil { + return nil, err + } + return config, nil +} + +// 根据WebId查找Web配置 +func FindWebConfigWithId(parentAction *actionutils.ParentAction, webId int64) (*serverconfigs.HTTPWebConfig, error) { + resp, err := parentAction.RPC().HTTPWebRPC().FindEnabledHTTPWebConfig(parentAction.AdminContext(), &pb.FindEnabledHTTPWebConfigRequest{WebId: webId}) + if err != nil { + return nil, err + } + config := &serverconfigs.HTTPWebConfig{} + err = json.Unmarshal(resp.WebJSON, config) + if err != nil { + return nil, err + } + return config, nil +} diff --git a/internal/web/actions/default/servers/serverutils/server_helper.go b/internal/web/actions/default/servers/serverutils/server_helper.go index c14ec4ee..42eebde6 100644 --- a/internal/web/actions/default/servers/serverutils/server_helper.go +++ b/internal/web/actions/default/servers/serverutils/server_helper.go @@ -35,6 +35,9 @@ func (this *ServerHelper) BeforeAction(action *actions.ActionObject) { func (this *ServerHelper) createLeftMenu(action *actions.ActionObject) { // 初始化 + if !action.Data.Has("leftMenuItemIsDisabled") { + action.Data["leftMenuItemIsDisabled"] = false + } action.Data["leftMenuItems"] = []maps.Map{} mainTab, _ := action.Data["mainTab"] secondMenuItem, _ := action.Data["secondMenuItem"] diff --git a/internal/web/import.go b/internal/web/import.go index 0c459c6f..db631db3 100644 --- a/internal/web/import.go +++ b/internal/web/import.go @@ -35,6 +35,7 @@ import ( _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/http" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/https" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/location" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/origins" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/pages" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/reverseProxy" diff --git a/web/views/@default/@layout.css b/web/views/@default/@layout.css index 5992614f..698020b7 100644 --- a/web/views/@default/@layout.css +++ b/web/views/@default/@layout.css @@ -36,6 +36,12 @@ .left-box::-webkit-scrollbar { width: 4px; } +.left-box.disabled { + opacity: 0.3; +} +.left-box.tiny { + top: 10em; +} .right-box { position: fixed; top: 7.5em; diff --git a/web/views/@default/@layout.css.map b/web/views/@default/@layout.css.map index bc37c6a0..de5c0e1f 100644 --- a/web/views/@default/@layout.css.map +++ b/web/views/@default/@layout.css.map @@ -1 +1 @@ -{"version":3,"sources":["@left_menu.less","@layout.less"],"names":[],"mappings":"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","file":"@layout.css"} \ No newline at end of file +{"version":3,"sources":["@left_menu.less","@layout.less"],"names":[],"mappings":"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","file":"@layout.css"} \ No newline at end of file diff --git a/web/views/@default/@left_menu.html b/web/views/@default/@left_menu.html index 8de4a073..f7479427 100644 --- a/web/views/@default/@left_menu.html +++ b/web/views/@default/@left_menu.html @@ -1,6 +1,6 @@
-
+