diff --git a/internal/rpc/rpc_client.go b/internal/rpc/rpc_client.go index 5f62acce..06fcc594 100644 --- a/internal/rpc/rpc_client.go +++ b/internal/rpc/rpc_client.go @@ -25,7 +25,7 @@ type RPCClient struct { nodeIPAddressClients []pb.NodeIPAddressServiceClient serverClients []pb.ServerServiceClient apiNodeClients []pb.APINodeServiceClient - originNodeClients []pb.OriginServerServiceClient + originClients []pb.OriginServiceClient httpWebClients []pb.HTTPWebServiceClient reverseProxyClients []pb.ReverseProxyServiceClient httpGzipClients []pb.HTTPGzipServiceClient @@ -50,7 +50,7 @@ func NewRPCClient(apiConfig *configs.APIConfig) (*RPCClient, error) { nodeIPAddressClients := []pb.NodeIPAddressServiceClient{} serverClients := []pb.ServerServiceClient{} apiNodeClients := []pb.APINodeServiceClient{} - originNodeClients := []pb.OriginServerServiceClient{} + originClients := []pb.OriginServiceClient{} httpWebClients := []pb.HTTPWebServiceClient{} reverseProxyClients := []pb.ReverseProxyServiceClient{} httpGzipClients := []pb.HTTPGzipServiceClient{} @@ -83,7 +83,7 @@ func NewRPCClient(apiConfig *configs.APIConfig) (*RPCClient, error) { nodeIPAddressClients = append(nodeIPAddressClients, pb.NewNodeIPAddressServiceClient(conn)) serverClients = append(serverClients, pb.NewServerServiceClient(conn)) apiNodeClients = append(apiNodeClients, pb.NewAPINodeServiceClient(conn)) - originNodeClients = append(originNodeClients, pb.NewOriginServerServiceClient(conn)) + originClients = append(originClients, pb.NewOriginServiceClient(conn)) httpWebClients = append(httpWebClients, pb.NewHTTPWebServiceClient(conn)) reverseProxyClients = append(reverseProxyClients, pb.NewReverseProxyServiceClient(conn)) httpGzipClients = append(httpGzipClients, pb.NewHTTPGzipServiceClient(conn)) @@ -105,7 +105,7 @@ func NewRPCClient(apiConfig *configs.APIConfig) (*RPCClient, error) { nodeIPAddressClients: nodeIPAddressClients, serverClients: serverClients, apiNodeClients: apiNodeClients, - originNodeClients: originNodeClients, + originClients: originClients, httpWebClients: httpWebClients, reverseProxyClients: reverseProxyClients, httpGzipClients: httpGzipClients, @@ -168,9 +168,9 @@ func (this *RPCClient) APINodeRPC() pb.APINodeServiceClient { return nil } -func (this *RPCClient) OriginServerRPC() pb.OriginServerServiceClient { - if len(this.originNodeClients) > 0 { - return this.originNodeClients[rands.Int(0, len(this.originNodeClients)-1)] +func (this *RPCClient) OriginRPC() pb.OriginServiceClient { + if len(this.originClients) > 0 { + return this.originClients[rands.Int(0, len(this.originClients)-1)] } return nil } diff --git a/internal/web/actions/default/servers/addOriginPopup.go b/internal/web/actions/default/servers/addOriginPopup.go index 60dad1df..843730a4 100644 --- a/internal/web/actions/default/servers/addOriginPopup.go +++ b/internal/web/actions/default/servers/addOriginPopup.go @@ -43,7 +43,7 @@ func (this *AddOriginPopupAction) RunPost(params struct { host := addr[:portIndex] port := addr[portIndex+1:] - resp, err := this.RPC().OriginServerRPC().CreateOriginServer(this.AdminContext(), &pb.CreateOriginServerRequest{ + resp, err := this.RPC().OriginRPC().CreateOrigin(this.AdminContext(), &pb.CreateOriginRequest{ Name: "", Addr: &pb.NetworkAddress{ Protocol: params.Protocol, @@ -57,7 +57,7 @@ func (this *AddOriginPopupAction) RunPost(params struct { return } - origin := &serverconfigs.OriginServerConfig{ + origin := &serverconfigs.OriginConfig{ Id: resp.OriginId, IsOn: true, Addr: &serverconfigs.NetworkAddressConfig{ diff --git a/internal/web/actions/default/servers/create.go b/internal/web/actions/default/servers/create.go index 2ef2f87f..a9f8c588 100644 --- a/internal/web/actions/default/servers/create.go +++ b/internal/web/actions/default/servers/create.go @@ -159,7 +159,7 @@ func (this *CreateAction) RunPost(params struct { reverseProxyRefJSON := []byte{} switch params.ServerType { case serverconfigs.ServerTypeHTTPProxy, serverconfigs.ServerTypeTCPProxy: - origins := []*serverconfigs.OriginServerConfig{} + origins := []*serverconfigs.OriginConfig{} err := json.Unmarshal([]byte(params.Origins), &origins) if err != nil { this.Fail("源站地址解析失败:" + err.Error()) diff --git a/internal/web/actions/default/servers/server/settings/locations/access/index.go b/internal/web/actions/default/servers/server/settings/locations/access/index.go new file mode 100644 index 00000000..36a5c0e6 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/access/index.go @@ -0,0 +1,20 @@ +package access + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { +} + +func (this *IndexAction) RunGet(params struct { + ServerId int64 +}) { + // TODO + + this.Show() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/access/init.go b/internal/web/actions/default/servers/server/settings/locations/access/init.go new file mode 100644 index 00000000..ef3edce7 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/access/init.go @@ -0,0 +1,21 @@ +package access + +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()). + Data("tinyMenuItem", "access"). + Prefix("/servers/server/settings/locations/access"). + Get("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/locations/accessLog/index.go b/internal/web/actions/default/servers/server/settings/locations/accessLog/index.go new file mode 100644 index 00000000..b74bb201 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/accessLog/index.go @@ -0,0 +1,72 @@ +package accessLog + +import ( + "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" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { +} + +func (this *IndexAction) RunGet(params struct { + LocationId int64 +}) { + // 获取配置 + webConfig, err := webutils.FindWebConfigWithLocationId(this.Parent(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["webId"] = webConfig.Id + this.Data["accessLogConfig"] = webConfig.AccessLogRef + + // 可选的缓存策略 + policiesResp, err := this.RPC().HTTPAccessLogPolicyRPC().FindAllEnabledHTTPAccessLogPolicies(this.AdminContext(), &pb.FindAllEnabledHTTPAccessLogPoliciesRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + policyMaps := []maps.Map{} + for _, policy := range policiesResp.AccessLogPolicies { + policyMaps = append(policyMaps, maps.Map{ + "id": policy.Id, + "name": policy.Name, + "isOn": policy.IsOn, // TODO 这里界面上显示是否开启状态 + }) + } + this.Data["accessLogPolicies"] = policyMaps + + // 通用变量 + this.Data["fields"] = serverconfigs.HTTPAccessLogFields + this.Data["defaultFieldCodes"] = serverconfigs.HTTPAccessLogDefaultFieldsCodes + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + AccessLogJSON []byte + + Must *actions.Must +}) { + // TODO 检查参数 + + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebAccessLog(this.AdminContext(), &pb.UpdateHTTPWebAccessLogRequest{ + WebId: params.WebId, + AccessLogJSON: params.AccessLogJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/accessLog/init.go b/internal/web/actions/default/servers/server/settings/locations/accessLog/init.go new file mode 100644 index 00000000..774c0e1d --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/accessLog/init.go @@ -0,0 +1,21 @@ +package accessLog + +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()). + Data("tinyMenuItem", "accessLog"). + Prefix("/servers/server/settings/locations/accessLog"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/locations/cache/index.go b/internal/web/actions/default/servers/server/settings/locations/cache/index.go new file mode 100644 index 00000000..b834f580 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/cache/index.go @@ -0,0 +1,67 @@ +package cache + +import ( + "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/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/maps" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { +} + +func (this *IndexAction) RunGet(params struct { + LocationId int64 +}) { + webConfig, err := webutils.FindWebConfigWithLocationId(this.Parent(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + this.Data["cacheConfig"] = webConfig.CacheRef + + // 所有缓存策略 + cachePoliciesResp, err := this.RPC().HTTPCachePolicyRPC().FindAllEnabledHTTPCachePolicies(this.AdminContext(), &pb.FindAllEnabledHTTPCachePoliciesRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + policyMaps := []maps.Map{} + for _, policy := range cachePoliciesResp.CachePolicies { + policyMaps = append(policyMaps, maps.Map{ + "id": policy.Id, + "name": policy.Name, + "isOn": policy.IsOn, + }) + } + this.Data["policies"] = policyMaps + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + CacheJSON []byte + + Must *actions.Must +}) { + // TODO 校验配置 + + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebCache(this.AdminContext(), &pb.UpdateHTTPWebCacheRequest{ + WebId: params.WebId, + CacheJSON: params.CacheJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/cache/init.go b/internal/web/actions/default/servers/server/settings/locations/cache/init.go new file mode 100644 index 00000000..d40fdd28 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/cache/init.go @@ -0,0 +1,21 @@ +package cache + +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()). + Data("tinyMenuItem", "cache"). + Prefix("/servers/server/settings/locations/cache"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/locations/charset/index.go b/internal/web/actions/default/servers/server/settings/locations/charset/index.go new file mode 100644 index 00000000..fc73a4d6 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/charset/index.go @@ -0,0 +1,52 @@ +package charset + +import ( + "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/configutils" + "github.com/iwind/TeaGo/actions" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { +} + +func (this *IndexAction) RunGet(params struct { + LocationId int64 +}) { + webConfig, err := webutils.FindWebConfigWithLocationId(this.Parent(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + this.Data["charset"] = webConfig.Charset + + this.Data["usualCharsets"] = configutils.UsualCharsets + this.Data["allCharsets"] = configutils.AllCharsets + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + Charset string + + Must *actions.Must +}) { + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebCharset(this.AdminContext(), &pb.UpdateHTTPWebCharsetRequest{ + WebId: params.WebId, + Charset: params.Charset, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/charset/init.go b/internal/web/actions/default/servers/server/settings/locations/charset/init.go new file mode 100644 index 00000000..ebd4a44c --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/charset/init.go @@ -0,0 +1,21 @@ +package charset + +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()). + Data("tinyMenuItem", "charset"). + Prefix("/servers/server/settings/locations/charset"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/locations/gzip/index.go b/internal/web/actions/default/servers/server/settings/locations/gzip/index.go new file mode 100644 index 00000000..53a52165 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/gzip/index.go @@ -0,0 +1,133 @@ +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" + "github.com/iwind/TeaGo/types" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { + this.Nav("", "setting", "index") + this.SecondMenu("gzip") +} + +func (this *IndexAction) RunGet(params struct { + LocationId int64 +}) { + webConfig, err := webutils.FindWebConfigWithLocationId(this.Parent(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + + gzipId := int64(0) + if webConfig.GzipRef != nil { + gzipId = webConfig.GzipRef.GzipId + } + gzipConfig := &serverconfigs.HTTPGzipConfig{ + Id: 0, + IsOn: true, + } + if gzipId > 0 { + resp, err := this.RPC().HTTPGzipRPC().FindEnabledHTTPGzipConfig(this.AdminContext(), &pb.FindEnabledGzipConfigRequest{GzipId: gzipId}) + if err != nil { + this.ErrorPage(err) + return + } + err = json.Unmarshal(resp.GzipJSON, gzipConfig) + if err != nil { + this.ErrorPage(err) + return + } + } + + this.Data["gzipConfig"] = gzipConfig + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + GzipId int64 + Level int + MinLength string + MaxLength string + + Must *actions.Must +}) { + if params.Level < 0 || params.Level > 9 { + this.Fail("请选择正确的压缩级别") + } + + minLength := &pb.SizeCapacity{Count: -1} + if len(params.MinLength) > 0 { + err := json.Unmarshal([]byte(params.MinLength), minLength) + if err != nil { + this.ErrorPage(err) + return + } + } + + maxLength := &pb.SizeCapacity{Count: -1} + if len(params.MaxLength) > 0 { + err := json.Unmarshal([]byte(params.MaxLength), maxLength) + if err != nil { + this.ErrorPage(err) + return + } + } + + if params.GzipId > 0 { + _, err := this.RPC().HTTPGzipRPC().UpdateHTTPGzip(this.AdminContext(), &pb.UpdateHTTPGzipRequest{ + GzipId: params.GzipId, + Level: types.Int32(params.Level), + MinLength: minLength, + MaxLength: maxLength, + }) + if err != nil { + this.ErrorPage(err) + return + } + } else { + resp, err := this.RPC().HTTPGzipRPC().CreateHTTPGzip(this.AdminContext(), &pb.CreateHTTPGzipRequest{ + Level: types.Int32(params.Level), + MinLength: minLength, + MaxLength: maxLength, + }) + if err != nil { + this.ErrorPage(err) + return + } + gzipId := resp.GzipId + + gzipRef := &serverconfigs.HTTPGzipRef{ + IsOn: true, + GzipId: gzipId, + } + gzipRefJSON, err := json.Marshal(gzipRef) + if err != nil { + this.ErrorPage(err) + return + } + + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebGzip(this.AdminContext(), &pb.UpdateHTTPWebGzipRequest{ + WebId: params.WebId, + GzipJSON: gzipRefJSON, + }) + if err != nil { + this.ErrorPage(err) + } + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/gzip/init.go b/internal/web/actions/default/servers/server/settings/locations/gzip/init.go new file mode 100644 index 00000000..1dcf483b --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/gzip/init.go @@ -0,0 +1,21 @@ +package gzip + +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()). + Data("tinyMenuItem", "gzip"). + Prefix("/servers/server/settings/locations/gzip"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/locations/headers/index.go b/internal/web/actions/default/servers/server/settings/locations/headers/index.go new file mode 100644 index 00000000..853cd098 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/headers/index.go @@ -0,0 +1,78 @@ +package headers + +import ( + "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" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { +} + +func (this *IndexAction) RunGet(params struct { + LocationId int64 +}) { + webConfig, err := webutils.FindWebConfigWithLocationId(this.Parent(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + + // 初始化Header + webResp, err := this.RPC().HTTPWebRPC().FindEnabledHTTPWeb(this.AdminContext(), &pb.FindEnabledHTTPWebRequest{WebId: webConfig.Id}) + if err != nil { + this.ErrorPage(err) + return + } + web := webResp.Web + if web == nil { + this.ErrorPage(errors.New("web should not be nil")) + return + } + isChanged := false + if web.RequestHeaderPolicyId <= 0 { + createHeaderPolicyResp, err := this.RPC().HTTPHeaderPolicyRPC().CreateHTTPHeaderPolicy(this.AdminContext(), &pb.CreateHTTPHeaderPolicyRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + headerPolicyId := createHeaderPolicyResp.HeaderPolicyId + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebRequestHeaderPolicy(this.AdminContext(), &pb.UpdateHTTPWebRequestHeaderPolicyRequest{ + WebId: web.Id, + HeaderPolicyId: headerPolicyId, + }) + isChanged = true + } + if web.ResponseHeaderPolicyId <= 0 { + createHeaderPolicyResp, err := this.RPC().HTTPHeaderPolicyRPC().CreateHTTPHeaderPolicy(this.AdminContext(), &pb.CreateHTTPHeaderPolicyRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + headerPolicyId := createHeaderPolicyResp.HeaderPolicyId + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebResponseHeaderPolicy(this.AdminContext(), &pb.UpdateHTTPWebResponseHeaderPolicyRequest{ + WebId: web.Id, + HeaderPolicyId: headerPolicyId, + }) + isChanged = true + } + + // 重新获取配置 + if isChanged { + webConfig, err = webutils.FindWebConfigWithLocationId(this.Parent(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + } + + this.Data["requestHeaderPolicy"] = webConfig.RequestHeaders + this.Data["responseHeaderPolicy"] = webConfig.ResponseHeaders + + this.Show() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/headers/init.go b/internal/web/actions/default/servers/server/settings/locations/headers/init.go new file mode 100644 index 00000000..4f69a9e0 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/headers/init.go @@ -0,0 +1,21 @@ +package headers + +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()). + Data("tinyMenuItem", "header"). + Prefix("/servers/server/settings/locations/headers"). + Get("", new(IndexAction)). + 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 index 070f5d4a..7bac3b57 100644 --- a/internal/web/actions/default/servers/server/settings/locations/location/index.go +++ b/internal/web/actions/default/servers/server/settings/locations/location/index.go @@ -1,10 +1,12 @@ 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" + "github.com/iwind/TeaGo/actions" + "regexp" + "strings" ) // 路径规则详情 @@ -13,26 +15,70 @@ type IndexAction struct { } 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 - } + locationConfig := this.Data.Get("locationConfig").(*serverconfigs.HTTPLocationConfig) - this.Data["locationId"] = locationConfig.Id - this.Data["locationConfig"] = locationConfig + this.Data["patternTypes"] = serverconfigs.AllLocationPatternTypes() + + this.Data["pattern"] = locationConfig.PatternString() + this.Data["type"] = locationConfig.PatternType() + this.Data["isReverse"] = locationConfig.IsReverse() + this.Data["isCaseInsensitive"] = locationConfig.IsCaseInsensitive() this.Show() } + +func (this *IndexAction) RunPost(params struct { + LocationId 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 + + _, err := this.RPC().HTTPLocationRPC().UpdateHTTPLocation(this.AdminContext(), &pb.UpdateHTTPLocationRequest{ + LocationId: params.LocationId, + Name: params.Name, + Description: params.Description, + Pattern: resultPattern, + IsBreak: params.IsBreak, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} 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 index 708306a5..09731895 100644 --- a/internal/web/actions/default/servers/server/settings/locations/location/init.go +++ b/internal/web/actions/default/servers/server/settings/locations/location/init.go @@ -13,6 +13,7 @@ func init() { Helper(helpers.NewUserMustAuth()). Helper(locationutils.NewLocationHelper()). Helper(serverutils.NewServerHelper()). + Data("tinyMenuItem", "basic"). 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 index 6b6e2ef4..ca811a65 100644 --- 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 @@ -1,9 +1,11 @@ package locationutils import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/maps" "net/http" + "reflect" ) type LocationHelper struct { @@ -13,7 +15,8 @@ func NewLocationHelper() *LocationHelper { return &LocationHelper{} } -func (this *LocationHelper) BeforeAction(action *actions.ActionObject) { +func (this *LocationHelper) BeforeAction(actionPtr actions.ActionWrapper) { + action := actionPtr.Object() if action.Request.Method != http.MethodGet { return } @@ -26,6 +29,21 @@ func (this *LocationHelper) BeforeAction(action *actions.ActionObject) { action.Data["mainTab"] = "setting" action.Data["secondMenuItem"] = "locations" action.Data["tinyLeftMenuItems"] = this.createMenus(serverIdString, locationIdString, action.Data.GetString("tinyMenuItem")) + + // 路径信息 + parentActionValue := reflect.ValueOf(actionPtr).Elem().FieldByName("ParentAction") + if parentActionValue.IsValid() { + parentAction, isOk := parentActionValue.Interface().(actionutils.ParentAction) + if isOk { + locationId := action.ParamInt64("locationId") + locationConfig, isOk := FindLocationConfig(&parentAction, locationId) + if !isOk { + return + } + action.Data["locationId"] = locationId + action.Data["locationConfig"] = locationConfig + } + } } func (this *LocationHelper) createMenus(serverIdString string, locationIdString string, secondMenuItem string) []maps.Map { diff --git a/internal/web/actions/default/servers/server/settings/locations/locationutils/utils.go b/internal/web/actions/default/servers/server/settings/locations/locationutils/utils.go new file mode 100644 index 00000000..e2540c36 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/locationutils/utils.go @@ -0,0 +1,33 @@ +package locationutils + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" +) + +// 查找路径规则配置 +func FindLocationConfig(parentAction *actionutils.ParentAction, locationId int64) (locationConfig *serverconfigs.HTTPLocationConfig, isOk bool) { + locationConfigResp, err := parentAction.RPC().HTTPLocationRPC().FindEnabledHTTPLocationConfig(parentAction.AdminContext(), &pb.FindEnabledHTTPLocationConfigRequest{LocationId: locationId}) + if err != nil { + parentAction.ErrorPage(err) + return + } + + locationConfig = &serverconfigs.HTTPLocationConfig{} + err = json.Unmarshal(locationConfigResp.LocationJSON, locationConfig) + if err != nil { + parentAction.ErrorPage(err) + return + } + + err = locationConfig.Init() + if err != nil { + parentAction.ErrorPage(err) + return + } + + isOk = true + return +} diff --git a/internal/web/actions/default/servers/server/settings/locations/pages/index.go b/internal/web/actions/default/servers/server/settings/locations/pages/index.go new file mode 100644 index 00000000..fdaeefc2 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/pages/index.go @@ -0,0 +1,60 @@ +package pages + +import ( + "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/iwind/TeaGo/actions" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { +} + +func (this *IndexAction) RunGet(params struct { + LocationId int64 +}) { + webConfig, err := webutils.FindWebConfigWithLocationId(this.Parent(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + this.Data["pages"] = webConfig.Pages + this.Data["shutdownConfig"] = webConfig.Shutdown + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + PagesJSON string + ShutdownJSON string + Must *actions.Must +}) { + // TODO 检查配置 + + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebPages(this.AdminContext(), &pb.UpdateHTTPWebPagesRequest{ + WebId: params.WebId, + PagesJSON: []byte(params.PagesJSON), + }) + if err != nil { + this.ErrorPage(err) + return + } + + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebShutdown(this.AdminContext(), &pb.UpdateHTTPWebShutdownRequest{ + WebId: params.WebId, + ShutdownJSON: []byte(params.ShutdownJSON), + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/pages/init.go b/internal/web/actions/default/servers/server/settings/locations/pages/init.go new file mode 100644 index 00000000..7e036a1e --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/pages/init.go @@ -0,0 +1,21 @@ +package pages + +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()). + Data("tinyMenuItem", "pages"). + Prefix("/servers/server/settings/locations/pages"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/locations/reverseProxy/index.go b/internal/web/actions/default/servers/server/settings/locations/reverseProxy/index.go new file mode 100644 index 00000000..a07fa732 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/reverseProxy/index.go @@ -0,0 +1,97 @@ +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" + "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/maps" +) + +// 源站列表 +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { + this.FirstMenu("index") +} + +func (this *IndexAction) RunGet(params struct { + ServerId int64 + LocationId int64 +}) { + serverTypeResp, err := this.RPC().ServerRPC().FindEnabledServerType(this.AdminContext(), &pb.FindEnabledServerTypeRequest{ServerId: params.ServerId}) + if err != nil { + this.ErrorPage(err) + return + } + serverType := serverTypeResp.Type + + reverseProxyResp, err := this.RPC().HTTPLocationRPC().FindAndInitHTTPLocationReverseProxyConfig(this.AdminContext(), &pb.FindAndInitHTTPLocationReverseProxyConfigRequest{LocationId: params.LocationId}) + if err != nil { + this.ErrorPage(err) + return + } + reverseProxyRef := &serverconfigs.ReverseProxyRef{} + err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef) + if err != nil { + this.ErrorPage(err) + return + } + + reverseProxy := &serverconfigs.ReverseProxyConfig{} + err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, 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 { + LocationId int64 + ReverseProxyRefJSON []byte + + Must *actions.Must +}) { + // TODO 校验配置 + + _, err := this.RPC().HTTPLocationRPC().UpdateHTTPLocationReverseProxy(this.AdminContext(), &pb.UpdateHTTPLocationReverseProxyRequest{ + LocationId: params.LocationId, + ReverseProxyJSON: params.ReverseProxyRefJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/reverseProxy/init.go b/internal/web/actions/default/servers/server/settings/locations/reverseProxy/init.go new file mode 100644 index 00000000..f829718f --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/reverseProxy/init.go @@ -0,0 +1,23 @@ +package reverseProxy + +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()). + Data("mainTab", "setting"). + Data("tinyMenuItem", "reverseProxy"). + Prefix("/servers/server/settings/locations/reverseProxy"). + GetPost("", new(IndexAction)). + GetPost("/scheduling", new(SchedulingAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/locations/reverseProxy/scheduling.go b/internal/web/actions/default/servers/server/settings/locations/reverseProxy/scheduling.go new file mode 100644 index 00000000..b0655c6d --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/reverseProxy/scheduling.go @@ -0,0 +1,46 @@ +package reverseProxy + +import ( + "encoding/json" + "errors" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/schedulingconfigs" +) + +type SchedulingAction struct { + actionutils.ParentAction +} + +func (this *SchedulingAction) Init() { + this.FirstMenu("scheduling") +} + +func (this *SchedulingAction) RunGet(params struct { + ServerId int64 + LocationId int64 +}) { + reverseProxyResp, err := this.RPC().HTTPLocationRPC().FindAndInitHTTPLocationReverseProxyConfig(this.AdminContext(), &pb.FindAndInitHTTPLocationReverseProxyConfigRequest{LocationId: params.LocationId}) + if err != nil { + this.ErrorPage(err) + return + } + reverseProxy := &serverconfigs.ReverseProxyConfig{} + err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["reverseProxyId"] = reverseProxy.Id + + schedulingCode := reverseProxy.FindSchedulingConfig().Code + schedulingMap := schedulingconfigs.FindSchedulingType(schedulingCode) + if schedulingMap == nil { + this.ErrorPage(errors.New("invalid scheduling code '" + schedulingCode + "'")) + return + } + this.Data["scheduling"] = schedulingMap + + this.Show() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/stat/index.go b/internal/web/actions/default/servers/server/settings/locations/stat/index.go new file mode 100644 index 00000000..658db374 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/stat/index.go @@ -0,0 +1,49 @@ +package stat + +import ( + "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/iwind/TeaGo/actions" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { +} + +func (this *IndexAction) RunGet(params struct { + LocationId int64 +}) { + webConfig, err := webutils.FindWebConfigWithLocationId(this.Parent(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + this.Data["statConfig"] = webConfig.StatRef + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + StatJSON []byte + + Must *actions.Must +}) { + // TODO 校验配置 + + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebStat(this.AdminContext(), &pb.UpdateHTTPWebStatRequest{ + WebId: params.WebId, + StatJSON: params.StatJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/stat/init.go b/internal/web/actions/default/servers/server/settings/locations/stat/init.go new file mode 100644 index 00000000..54f32572 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/stat/init.go @@ -0,0 +1,21 @@ +package stat + +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()). + Data("tinyMenuItem", "stat"). + Prefix("/servers/server/settings/locations/stat"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/locations/waf/index.go b/internal/web/actions/default/servers/server/settings/locations/waf/index.go new file mode 100644 index 00000000..08c273a8 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/waf/index.go @@ -0,0 +1,67 @@ +package waf + +import ( + "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/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/maps" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { +} + +func (this *IndexAction) RunGet(params struct { + LocationId int64 +}) { + webConfig, err := webutils.FindWebConfigWithLocationId(this.Parent(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + this.Data["firewallConfig"] = webConfig.FirewallRef + + // 当前已有策略 + policiesResp, err := this.RPC().HTTPFirewallPolicyRPC().FindAllEnabledHTTPFirewallPolicies(this.AdminContext(), &pb.FindAllEnabledHTTPFirewallPoliciesRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + policyMaps := []maps.Map{} + for _, p := range policiesResp.FirewallPolicies { + policyMaps = append(policyMaps, maps.Map{ + "id": p.Id, + "name": p.Name, + "isOn": p.IsOn, + }) + } + this.Data["firewallPolicies"] = policyMaps + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + FirewallJSON []byte + + Must *actions.Must +}) { + // TODO 检查配置 + + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebFirewall(this.AdminContext(), &pb.UpdateHTTPWebFirewallRequest{ + WebId: params.WebId, + FirewallJSON: params.FirewallJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/waf/init.go b/internal/web/actions/default/servers/server/settings/locations/waf/init.go new file mode 100644 index 00000000..635cb54f --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/waf/init.go @@ -0,0 +1,21 @@ +package waf + +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()). + Data("tinyMenuItem", "waf"). + Prefix("/servers/server/settings/locations/waf"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/servers/server/settings/locations/web/index.go b/internal/web/actions/default/servers/server/settings/locations/web/index.go new file mode 100644 index 00000000..01c692e9 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/web/index.go @@ -0,0 +1,48 @@ +package web + +import ( + "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/iwind/TeaGo/actions" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { +} + +func (this *IndexAction) RunGet(params struct { + LocationId int64 +}) { + webConfig, err := webutils.FindWebConfigWithLocationId(this.Parent(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webConfig"] = webConfig + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + WebId int64 + Root string + + Must *actions.Must +}) { + + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWeb(this.AdminContext(), &pb.UpdateHTTPWebRequest{ + WebId: params.WebId, + Root: params.Root, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/locations/web/init.go b/internal/web/actions/default/servers/server/settings/locations/web/init.go new file mode 100644 index 00000000..d3570db3 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/web/init.go @@ -0,0 +1,21 @@ +package web + +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()). + Data("tinyMenuItem", "web"). + Prefix("/servers/server/settings/locations/web"). + GetPost("", new(IndexAction)). + EndAll() + }) +} 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 f35712c4..7b843c52 100644 --- a/internal/web/actions/default/servers/server/settings/origins/addPopup.go +++ b/internal/web/actions/default/servers/server/settings/origins/addPopup.go @@ -56,7 +56,7 @@ func (this *AddPopupAction) RunPost(params struct { host := addr[:portIndex] port := addr[portIndex+1:] - resp, err := this.RPC().OriginServerRPC().CreateOriginServer(this.AdminContext(), &pb.CreateOriginServerRequest{ + resp, err := this.RPC().OriginRPC().CreateOrigin(this.AdminContext(), &pb.CreateOriginRequest{ Name: "", Addr: &pb.NetworkAddress{ Protocol: params.Protocol, @@ -70,17 +70,9 @@ func (this *AddPopupAction) RunPost(params struct { return } originId := resp.OriginId - originConfigResp, err := this.RPC().OriginServerRPC().FindEnabledOriginServerConfig(this.AdminContext(), &pb.FindEnabledOriginServerConfigRequest{OriginId: originId}) - if err != nil { - this.ErrorPage(err) - return - } - originConfigData := originConfigResp.OriginJSON - var originConfig = &serverconfigs.OriginServerConfig{} - err = json.Unmarshal(originConfigData, originConfig) - if err != nil { - this.ErrorPage(err) - return + originRef := &serverconfigs.OriginRef{ + IsOn: true, + OriginId: originId, } reverseProxyResp, err := this.RPC().ReverseProxyRPC().FindEnabledReverseProxy(this.AdminContext(), &pb.FindEnabledReverseProxyRequest{ReverseProxyId: params.ReverseProxyId}) @@ -94,7 +86,7 @@ func (this *AddPopupAction) RunPost(params struct { return } - origins := []*serverconfigs.OriginServerConfig{} + origins := []*serverconfigs.OriginRef{} switch params.OriginType { case "primary": if len(reverseProxy.PrimaryOriginsJSON) > 0 { @@ -113,7 +105,7 @@ func (this *AddPopupAction) RunPost(params struct { } } } - origins = append(origins, originConfig) + origins = append(origins, originRef) originsData, err := json.Marshal(origins) if err != nil { this.ErrorPage(err) diff --git a/internal/web/actions/default/servers/server/settings/origins/delete.go b/internal/web/actions/default/servers/server/settings/origins/delete.go index 4913848a..4bf0ae3d 100644 --- a/internal/web/actions/default/servers/server/settings/origins/delete.go +++ b/internal/web/actions/default/servers/server/settings/origins/delete.go @@ -28,7 +28,7 @@ func (this *DeleteAction) RunPost(params struct { return } - origins := []*serverconfigs.OriginServerConfig{} + origins := []*serverconfigs.OriginRef{} switch params.OriginType { case "primary": err = json.Unmarshal(reverseProxy.PrimaryOriginsJSON, &origins) @@ -47,9 +47,9 @@ func (this *DeleteAction) RunPost(params struct { return } - result := []*serverconfigs.OriginServerConfig{} + result := []*serverconfigs.OriginRef{} for _, origin := range origins { - if origin.Id == params.OriginId { + if origin.OriginId == params.OriginId { continue } result = append(result, origin) 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 b6a69202..bdccdfdc 100644 --- a/internal/web/actions/default/servers/server/settings/origins/updatePopup.go +++ b/internal/web/actions/default/servers/server/settings/origins/updatePopup.go @@ -2,7 +2,6 @@ package origins import ( "encoding/json" - "errors" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" @@ -41,13 +40,13 @@ func (this *UpdatePopupAction) RunGet(params struct { this.Data["serverType"] = serverTypeResp.Type // 源站信息 - originResp, err := this.RPC().OriginServerRPC().FindEnabledOriginServerConfig(this.AdminContext(), &pb.FindEnabledOriginServerConfigRequest{OriginId: params.OriginId}) + originResp, err := this.RPC().OriginRPC().FindEnabledOriginConfig(this.AdminContext(), &pb.FindEnabledOriginConfigRequest{OriginId: params.OriginId}) if err != nil { this.ErrorPage(err) return } configData := originResp.OriginJSON - config := &serverconfigs.OriginServerConfig{} + config := &serverconfigs.OriginConfig{} err = json.Unmarshal(configData, config) if err != nil { this.ErrorPage(err) @@ -85,7 +84,7 @@ func (this *UpdatePopupAction) RunPost(params struct { host := addr[:portIndex] port := addr[portIndex+1:] - _, err := this.RPC().OriginServerRPC().UpdateOriginServer(this.AdminContext(), &pb.UpdateOriginServerRequest{ + _, err := this.RPC().OriginRPC().UpdateOrigin(this.AdminContext(), &pb.UpdateOriginRequest{ OriginId: params.OriginId, Name: "", Addr: &pb.NetworkAddress{ @@ -100,79 +99,5 @@ func (this *UpdatePopupAction) RunPost(params struct { return } - originConfigResp, err := this.RPC().OriginServerRPC().FindEnabledOriginServerConfig(this.AdminContext(), &pb.FindEnabledOriginServerConfigRequest{OriginId: params.OriginId}) - if err != nil { - this.ErrorPage(err) - return - } - originConfigData := originConfigResp.OriginJSON - var originConfig = &serverconfigs.OriginServerConfig{} - err = json.Unmarshal(originConfigData, originConfig) - if err != nil { - this.ErrorPage(err) - return - } - - // 查找反向代理信息 - reverseProxyResp, err := this.RPC().ReverseProxyRPC().FindEnabledReverseProxy(this.AdminContext(), &pb.FindEnabledReverseProxyRequest{ReverseProxyId: params.ReverseProxyId}) - if err != nil { - this.ErrorPage(err) - return - } - reverseProxy := reverseProxyResp.ReverseProxy - if reverseProxy == nil { - this.ErrorPage(errors.New("reverse proxy should not be nil")) - return - } - - origins := []*serverconfigs.OriginServerConfig{} - switch params.OriginType { - case "primary": - if len(reverseProxy.PrimaryOriginsJSON) > 0 { - err = json.Unmarshal(reverseProxy.PrimaryOriginsJSON, &origins) - if err != nil { - this.ErrorPage(err) - return - } - } - case "backup": - if len(reverseProxy.BackupOriginsJSON) > 0 { - err = json.Unmarshal(reverseProxy.BackupOriginsJSON, &origins) - if err != nil { - this.ErrorPage(err) - return - } - } - } - - for index, origin := range origins { - if origin.Id == params.OriginId { - origins[index] = originConfig - } - } - - // 保存 - originsData, err := json.Marshal(origins) - if err != nil { - this.ErrorPage(err) - return - } - switch params.OriginType { - case "primary": - _, err = this.RPC().ReverseProxyRPC().UpdateReverseProxyPrimaryOrigins(this.AdminContext(), &pb.UpdateReverseProxyPrimaryOriginsRequest{ - ReverseProxyId: params.ReverseProxyId, - OriginsJSON: originsData, - }) - case "backup": - _, err = this.RPC().ReverseProxyRPC().UpdateReverseProxyBackupOrigins(this.AdminContext(), &pb.UpdateReverseProxyBackupOriginsRequest{ - ReverseProxyId: params.ReverseProxyId, - OriginsJSON: originsData, - }) - } - if err != nil { - this.ErrorPage(err) - return - } - this.Success() } 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 8cdbf57a..a7d2e995 100644 --- a/internal/web/actions/default/servers/server/settings/web/index.go +++ b/internal/web/actions/default/servers/server/settings/web/index.go @@ -2,9 +2,8 @@ package web import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" - "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/serverutils" + "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,30 +19,11 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - server, _, isOk := serverutils.FindServer(this.Parent(), params.ServerId) - if !isOk { + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) + if err != nil { + this.ErrorPage(err) return } - webId := server.WebId - - webConfig := &serverconfigs.HTTPWebConfig{ - Id: webId, - IsOn: true, - } - if webId > 0 { - resp, err := this.RPC().HTTPWebRPC().FindEnabledHTTPWeb(this.AdminContext(), &pb.FindEnabledHTTPWebRequest{WebId: webId}) - if err != nil { - this.ErrorPage(err) - return - } - if resp.Web != nil { - web := resp.Web - - webConfig.Id = webId - webConfig.IsOn = web.IsOn - webConfig.Root = web.Root - } - } this.Data["webConfig"] = webConfig @@ -57,32 +37,14 @@ func (this *IndexAction) RunPost(params struct { Must *actions.Must }) { - if params.WebId <= 0 { - resp, err := this.RPC().HTTPWebRPC().CreateHTTPWeb(this.AdminContext(), &pb.CreateHTTPWebRequest{ - Root: params.Root, - }) - if err != nil { - this.ErrorPage(err) - return - } - webId := resp.WebId - _, err = this.RPC().ServerRPC().UpdateServerWeb(this.AdminContext(), &pb.UpdateServerWebRequest{ - ServerId: params.ServerId, - WebId: webId, - }) - if err != nil { - this.ErrorPage(err) - return - } - } else { - _, err := this.RPC().HTTPWebRPC().UpdateHTTPWeb(this.AdminContext(), &pb.UpdateHTTPWebRequest{ - WebId: params.WebId, - Root: params.Root, - }) - if err != nil { - this.ErrorPage(err) - return - } + + _, err := this.RPC().HTTPWebRPC().UpdateHTTPWeb(this.AdminContext(), &pb.UpdateHTTPWebRequest{ + WebId: params.WebId, + Root: params.Root, + }) + if err != nil { + this.ErrorPage(err) + return } this.Success() diff --git a/internal/web/import.go b/internal/web/import.go index db631db3..8fe1ee64 100644 --- a/internal/web/import.go +++ b/internal/web/import.go @@ -35,7 +35,18 @@ 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/access" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/accessLog" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/cache" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/charset" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/gzip" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/headers" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/location" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/pages" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/reverseProxy" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/stat" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/waf" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/locations/web" _ "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/public/js/components/server/http-charsets-box.js b/web/public/js/components/server/http-charsets-box.js index 6adb731c..9f06133a 100644 --- a/web/public/js/components/server/http-charsets-box.js +++ b/web/public/js/components/server/http-charsets-box.js @@ -13,7 +13,7 @@ Vue.component("http-charsets-box", {
| 选择字符编码 | -