diff --git a/internal/web/actions/default/servers/addOriginPopup.go b/internal/web/actions/default/servers/addOriginPopup.go index d4a112a4..96effbb6 100644 --- a/internal/web/actions/default/servers/addOriginPopup.go +++ b/internal/web/actions/default/servers/addOriginPopup.go @@ -8,6 +8,7 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/maps" "github.com/iwind/TeaGo/types" "net/url" "regexp" @@ -27,6 +28,8 @@ func (this *AddOriginPopupAction) RunGet(params struct { }) { this.Data["serverType"] = params.ServerType + this.getOSSHook() + this.Show() } @@ -40,50 +43,93 @@ func (this *AddOriginPopupAction) RunPost(params struct { Must *actions.Must }) { - params.Must. - Field("addr", params.Addr). - Require("请输入源站地址") - - var addr = params.Addr - - // 是否是完整的地址 - if (params.Protocol == "http" || params.Protocol == "https") && regexp.MustCompile(`^(http|https)://`).MatchString(addr) { - u, err := url.Parse(addr) - if err == nil { - addr = u.Host - } + ossConfig, goNext, err := this.postOSSHook(params.Protocol) + if err != nil { + this.ErrorPage(err) + return + } + if !goNext { + return } - addr = regexp.MustCompile(`\s+`).ReplaceAllString(addr, "") - var portIndex = strings.LastIndex(addr, ":") - if portIndex < 0 { - if params.Protocol == "http" { - addr += ":80" - } else if params.Protocol == "https" { - addr += ":443" - } else { - this.Fail("地址中需要带有端口") - } - portIndex = strings.LastIndex(addr, ":") + // 初始化 + var pbAddr = &pb.NetworkAddress{ + Protocol: params.Protocol, } - var host = addr[:portIndex] - var port = addr[portIndex+1:] + var addrConfig = &serverconfigs.NetworkAddressConfig{ + Protocol: serverconfigs.Protocol(params.Protocol), + } + var ossJSON []byte - // 检查端口号 - if port == "0" { - this.Fail("端口号不能为0") - } - if !configutils.HasVariables(port) { - // 必须是整数 - if !regexp.MustCompile(`^\d+$`).MatchString(port) { - this.Fail("端口号只能为整数") + if ossConfig != nil { // OSS + ossJSON, err = json.Marshal(ossConfig) + if err != nil { + this.ErrorPage(err) + return } - var portInt = types.Int(port) - if portInt == 0 { + err = ossConfig.Init() + if err != nil { + this.Fail("校验OSS配置时出错:" + err.Error()) + return + } + } else { // 普通源站 + params.Must. + Field("addr", params.Addr). + Require("请输入源站地址") + + var addr = params.Addr + + // 是否是完整的地址 + if (params.Protocol == "http" || params.Protocol == "https") && regexp.MustCompile(`^(http|https)://`).MatchString(addr) { + u, err := url.Parse(addr) + if err == nil { + addr = u.Host + } + } + + addr = regexp.MustCompile(`\s+`).ReplaceAllString(addr, "") + var portIndex = strings.LastIndex(addr, ":") + if portIndex < 0 { + if params.Protocol == "http" { + addr += ":80" + } else if params.Protocol == "https" { + addr += ":443" + } else { + this.Fail("地址中需要带有端口") + } + portIndex = strings.LastIndex(addr, ":") + } + var host = addr[:portIndex] + var port = addr[portIndex+1:] + + // 检查端口号 + if port == "0" { this.Fail("端口号不能为0") } - if portInt > 65535 { - this.Fail("端口号不能大于65535") + if !configutils.HasVariables(port) { + // 必须是整数 + if !regexp.MustCompile(`^\d+$`).MatchString(port) { + this.Fail("端口号只能为整数") + } + var portInt = types.Int(port) + if portInt == 0 { + this.Fail("端口号不能为0") + } + if portInt > 65535 { + this.Fail("端口号不能大于65535") + } + } + + pbAddr = &pb.NetworkAddress{ + Protocol: params.Protocol, + Host: host, + PortRange: port, + } + + addrConfig = &serverconfigs.NetworkAddressConfig{ + Protocol: serverconfigs.Protocol(params.Protocol), + Host: host, + PortRange: port, } } @@ -103,12 +149,9 @@ func (this *AddOriginPopupAction) RunPost(params struct { } resp, err := this.RPC().OriginRPC().CreateOrigin(this.AdminContext(), &pb.CreateOriginRequest{ - Name: "", - Addr: &pb.NetworkAddress{ - Protocol: params.Protocol, - Host: host, - PortRange: port, - }, + Name: "", + Addr: pbAddr, + OssJSON: ossJSON, Description: "", Weight: 10, IsOn: true, @@ -124,14 +167,16 @@ func (this *AddOriginPopupAction) RunPost(params struct { var origin = &serverconfigs.OriginConfig{ Id: resp.OriginId, IsOn: true, - Addr: &serverconfigs.NetworkAddressConfig{ - Protocol: serverconfigs.Protocol(params.Protocol), - Host: host, - PortRange: port, - }, + Addr: addrConfig, + OSS: ossConfig, } - this.Data["origin"] = origin + this.Data["origin"] = maps.Map{ + "id": resp.OriginId, + "isOn": true, + "addr": addrConfig, + "addrSummary": origin.AddrSummary(), + } // 创建日志 defer this.CreateLog(oplogs.LevelInfo, "创建源站 %d", resp.OriginId) diff --git a/internal/web/actions/default/servers/addOriginPopup_ext.go b/internal/web/actions/default/servers/addOriginPopup_ext.go new file mode 100644 index 00000000..a871d09d --- /dev/null +++ b/internal/web/actions/default/servers/addOriginPopup_ext.go @@ -0,0 +1,18 @@ +// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . +//go:build !plus + +package servers + +import ( + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ossconfigs" + "github.com/iwind/TeaGo/maps" +) + +func (this *AddOriginPopupAction) getOSSHook() { + this.Data["ossTypes"] = []maps.Map{} +} + +func (this *AddOriginPopupAction) postOSSHook(protocol string) (config *ossconfigs.OSSConfig, goNext bool, err error) { + goNext = true + return +} diff --git a/internal/web/actions/default/servers/groups/group/settings/httpReverseProxy/index.go b/internal/web/actions/default/servers/groups/group/settings/httpReverseProxy/index.go index c2d9a247..546efa56 100644 --- a/internal/web/actions/default/servers/groups/group/settings/httpReverseProxy/index.go +++ b/internal/web/actions/default/servers/groups/group/settings/httpReverseProxy/index.go @@ -59,7 +59,8 @@ func (this *IndexAction) RunGet(params struct { var m = maps.Map{ "id": originConfig.Id, "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "addr": originConfig.AddrSummary(), + "isOSS": originConfig.IsOSS(), "name": originConfig.Name, "isOn": originConfig.IsOn, "domains": originConfig.Domains, @@ -76,7 +77,8 @@ func (this *IndexAction) RunGet(params struct { var m = maps.Map{ "id": originConfig.Id, "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "addr": originConfig.AddrSummary(), + "isOSS": originConfig.IsOSS(), "name": originConfig.Name, "isOn": originConfig.IsOn, "domains": originConfig.Domains, diff --git a/internal/web/actions/default/servers/groups/group/settings/tcpReverseProxy/index.go b/internal/web/actions/default/servers/groups/group/settings/tcpReverseProxy/index.go index 721b0722..58f2de55 100644 --- a/internal/web/actions/default/servers/groups/group/settings/tcpReverseProxy/index.go +++ b/internal/web/actions/default/servers/groups/group/settings/tcpReverseProxy/index.go @@ -59,7 +59,8 @@ func (this *IndexAction) RunGet(params struct { m := maps.Map{ "id": originConfig.Id, "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "addr": originConfig.AddrSummary(), + "isOSS": originConfig.IsOSS(), "name": originConfig.Name, "isOn": originConfig.IsOn, "domains": originConfig.Domains, @@ -76,7 +77,8 @@ func (this *IndexAction) RunGet(params struct { m := maps.Map{ "id": originConfig.Id, "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "addr": originConfig.AddrSummary(), + "isOSS": originConfig.IsOSS(), "name": originConfig.Name, "isOn": originConfig.IsOn, "domains": originConfig.Domains, diff --git a/internal/web/actions/default/servers/groups/group/settings/udpReverseProxy/index.go b/internal/web/actions/default/servers/groups/group/settings/udpReverseProxy/index.go index 71643cdc..08852416 100644 --- a/internal/web/actions/default/servers/groups/group/settings/udpReverseProxy/index.go +++ b/internal/web/actions/default/servers/groups/group/settings/udpReverseProxy/index.go @@ -59,7 +59,8 @@ func (this *IndexAction) RunGet(params struct { var m = maps.Map{ "id": originConfig.Id, "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "addr": originConfig.AddrSummary(), + "isOSS": originConfig.IsOSS(), "name": originConfig.Name, "isOn": originConfig.IsOn, "domains": originConfig.Domains, @@ -76,7 +77,8 @@ func (this *IndexAction) RunGet(params struct { var m = maps.Map{ "id": originConfig.Id, "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "addr": originConfig.AddrSummary(), + "isOSS": originConfig.IsOSS(), "name": originConfig.Name, "isOn": originConfig.IsOn, "domains": originConfig.Domains, 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 index 312e9446..9869b6cc 100644 --- a/internal/web/actions/default/servers/server/settings/locations/reverseProxy/index.go +++ b/internal/web/actions/default/servers/server/settings/locations/reverseProxy/index.go @@ -60,7 +60,8 @@ func (this *IndexAction) RunGet(params struct { var m = maps.Map{ "id": originConfig.Id, "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "addr": originConfig.AddrSummary(), + "isOSS": originConfig.IsOSS(), "name": originConfig.Name, "isOn": originConfig.IsOn, "domains": originConfig.Domains, @@ -77,7 +78,8 @@ func (this *IndexAction) RunGet(params struct { var m = maps.Map{ "id": originConfig.Id, "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "addr": originConfig.AddrSummary(), + "isOSS": originConfig.IsOSS(), "name": originConfig.Name, "isOn": originConfig.IsOn, "domains": originConfig.Domains, 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 7a23931c..39de7216 100644 --- a/internal/web/actions/default/servers/server/settings/origins/addPopup.go +++ b/internal/web/actions/default/servers/server/settings/origins/addPopup.go @@ -47,6 +47,9 @@ func (this *AddPopupAction) RunGet(params struct { // 是否为HTTP this.Data["isHTTP"] = serverType == "httpProxy" || serverType == "httpWeb" + // OSS + this.getOSSHook() + this.Show() } @@ -76,104 +79,142 @@ func (this *AddPopupAction) RunPost(params struct { Must *actions.Must }) { - params.Must. - Field("addr", params.Addr). - Require("请输入源站地址") - - var addr = params.Addr - - // 是否是完整的地址 - if (params.Protocol == "http" || params.Protocol == "https") && regexp.MustCompile(`^(http|https)://`).MatchString(addr) { - u, err := url.Parse(addr) - if err == nil { - addr = u.Host - } - } - - addr = strings.ReplaceAll(addr, ":", ":") - addr = regexp.MustCompile(`\s+`).ReplaceAllString(addr, "") - var portIndex = strings.LastIndex(addr, ":") - if portIndex < 0 { - if params.Protocol == "http" { - addr += ":80" - } else if params.Protocol == "https" { - addr += ":443" - } else { - this.FailField("addr", "源站地址中需要带有端口") - } - portIndex = strings.LastIndex(addr, ":") - } - var host = addr[:portIndex] - var port = addr[portIndex+1:] - - // 检查端口号 - if port == "0" { - this.FailField("addr", "源站端口号不能为0") - } - if !configutils.HasVariables(port) { - // 必须是整数 - if !regexp.MustCompile(`^\d+$`).MatchString(port) { - this.FailField("addr", "源站端口号只能为整数") - } - var portInt = types.Int(port) - if portInt == 0 { - this.FailField("addr", "源站端口号不能为0") - } - if portInt > 65535 { - this.FailField("addr", "源站端口号不能大于65535") - } - } - - connTimeoutJSON, err := (&shared.TimeDuration{ - Count: int64(params.ConnTimeout), - Unit: shared.TimeDurationUnitSecond, - }).AsJSON() + ossConfig, goNext, err := this.postOSSHook(params.Protocol) if err != nil { this.ErrorPage(err) return } - - readTimeoutJSON, err := (&shared.TimeDuration{ - Count: int64(params.ReadTimeout), - Unit: shared.TimeDurationUnitSecond, - }).AsJSON() - if err != nil { - this.ErrorPage(err) + if !goNext { return } - idleTimeoutJSON, err := (&shared.TimeDuration{ - Count: int64(params.IdleTimeout), - Unit: shared.TimeDurationUnitSecond, - }).AsJSON() - if err != nil { - this.ErrorPage(err) - return + // 初始化 + var pbAddr = &pb.NetworkAddress{ + Protocol: params.Protocol, } + var connTimeoutJSON []byte + var readTimeoutJSON []byte + var idleTimeoutJSON []byte + var certRefJSON []byte - // 证书 - var certIds = []int64{} - if len(params.CertIdsJSON) > 0 { - err = json.Unmarshal(params.CertIdsJSON, &certIds) + var ossJSON []byte = nil + if ossConfig != nil { // OSS + ossJSON, err = json.Marshal(ossConfig) if err != nil { this.ErrorPage(err) return } - } - var certRefJSON []byte - if len(certIds) > 0 { - var certId = certIds[0] - if certId > 0 { - var certRef = &sslconfigs.SSLCertRef{ - IsOn: true, - CertId: certId, + err = ossConfig.Init() + if err != nil { + this.Fail("校验OSS配置时出错:" + err.Error()) + return + } + } else { // 普通源站 + params.Must. + Field("addr", params.Addr). + Require("请输入源站地址") + + var addr = params.Addr + + // 是否是完整的地址 + if (params.Protocol == "http" || params.Protocol == "https") && regexp.MustCompile(`^(http|https)://`).MatchString(addr) { + u, err := url.Parse(addr) + if err == nil { + addr = u.Host } - certRefJSON, err = json.Marshal(certRef) + } + + addr = strings.ReplaceAll(addr, ":", ":") + addr = regexp.MustCompile(`\s+`).ReplaceAllString(addr, "") + var portIndex = strings.LastIndex(addr, ":") + if portIndex < 0 { + if params.Protocol == "http" { + addr += ":80" + } else if params.Protocol == "https" { + addr += ":443" + } else { + this.FailField("addr", "源站地址中需要带有端口") + } + portIndex = strings.LastIndex(addr, ":") + } + var host = addr[:portIndex] + var port = addr[portIndex+1:] + + // 检查端口号 + if port == "0" { + this.FailField("addr", "源站端口号不能为0") + } + if !configutils.HasVariables(port) { + // 必须是整数 + if !regexp.MustCompile(`^\d+$`).MatchString(port) { + this.FailField("addr", "源站端口号只能为整数") + } + var portInt = types.Int(port) + if portInt == 0 { + this.FailField("addr", "源站端口号不能为0") + } + if portInt > 65535 { + this.FailField("addr", "源站端口号不能大于65535") + } + } + + connTimeoutJSON, err = (&shared.TimeDuration{ + Count: int64(params.ConnTimeout), + Unit: shared.TimeDurationUnitSecond, + }).AsJSON() + if err != nil { + this.ErrorPage(err) + return + } + + readTimeoutJSON, err = (&shared.TimeDuration{ + Count: int64(params.ReadTimeout), + Unit: shared.TimeDurationUnitSecond, + }).AsJSON() + if err != nil { + this.ErrorPage(err) + return + } + + idleTimeoutJSON, err = (&shared.TimeDuration{ + Count: int64(params.IdleTimeout), + Unit: shared.TimeDurationUnitSecond, + }).AsJSON() + if err != nil { + this.ErrorPage(err) + return + } + + // 证书 + var certIds = []int64{} + if len(params.CertIdsJSON) > 0 { + err = json.Unmarshal(params.CertIdsJSON, &certIds) if err != nil { this.ErrorPage(err) return } } + + if len(certIds) > 0 { + var certId = certIds[0] + if certId > 0 { + var certRef = &sslconfigs.SSLCertRef{ + IsOn: true, + CertId: certId, + } + certRefJSON, err = json.Marshal(certRef) + if err != nil { + this.ErrorPage(err) + return + } + } + } + + pbAddr = &pb.NetworkAddress{ + Protocol: params.Protocol, + Host: host, + PortRange: port, + } } // 专属域名 @@ -192,12 +233,9 @@ func (this *AddPopupAction) RunPost(params struct { } createResp, err := this.RPC().OriginRPC().CreateOrigin(this.AdminContext(), &pb.CreateOriginRequest{ - Name: params.Name, - Addr: &pb.NetworkAddress{ - Protocol: params.Protocol, - Host: host, - PortRange: port, - }, + Name: params.Name, + Addr: pbAddr, + OssJSON: ossJSON, Description: params.Description, Weight: params.Weight, IsOn: params.IsOn, diff --git a/internal/web/actions/default/servers/server/settings/origins/addPopup_ext.go b/internal/web/actions/default/servers/server/settings/origins/addPopup_ext.go new file mode 100644 index 00000000..331587d5 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/origins/addPopup_ext.go @@ -0,0 +1,18 @@ +// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . +//go:build !plus + +package origins + +import ( + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ossconfigs" + "github.com/iwind/TeaGo/maps" +) + +func (this *AddPopupAction) getOSSHook() { + this.Data["ossTypes"] = []maps.Map{} +} + +func (this *AddPopupAction) postOSSHook(protocol string) (config *ossconfigs.OSSConfig, goNext bool, err error) { + goNext = true + return +} 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 db8c23c4..3844e149 100644 --- a/internal/web/actions/default/servers/server/settings/origins/updatePopup.go +++ b/internal/web/actions/default/servers/server/settings/origins/updatePopup.go @@ -94,10 +94,14 @@ func (this *UpdatePopupAction) RunGet(params struct { config.Cert.KeyData = nil } + var addr = "" + if len(config.Addr.Host) > 0 && len(config.Addr.PortRange) > 0 { + addr = config.Addr.Host + ":" + config.Addr.PortRange + } this.Data["origin"] = maps.Map{ "id": config.Id, "protocol": config.Addr.Protocol, - "addr": config.Addr.Host + ":" + config.Addr.PortRange, + "addr": addr, "weight": config.Weight, "name": config.Name, "description": config.Description, @@ -111,8 +115,12 @@ func (this *UpdatePopupAction) RunGet(params struct { "domains": config.Domains, "host": config.RequestHost, "followPort": config.FollowPort, + "oss": config.OSS, } + // OSS + this.getOSSHook() + this.Show() } @@ -143,103 +151,144 @@ func (this *UpdatePopupAction) RunPost(params struct { Must *actions.Must }) { - params.Must. - Field("addr", params.Addr). - Require("请输入源站地址") - - var addr = params.Addr - - // 是否是完整的地址 - if (params.Protocol == "http" || params.Protocol == "https") && regexp.MustCompile(`^(http|https)://`).MatchString(addr) { - u, err := url.Parse(addr) - if err == nil { - addr = u.Host - } - } - - addr = strings.ReplaceAll(addr, ":", ":") - addr = regexp.MustCompile(`\s+`).ReplaceAllString(addr, "") - portIndex := strings.LastIndex(addr, ":") - if portIndex < 0 { - if params.Protocol == "http" { - addr += ":80" - } else if params.Protocol == "https" { - addr += ":443" - } else { - this.FailField("addr", "源站地址中需要带有端口") - } - portIndex = strings.LastIndex(addr, ":") - } - var host = addr[:portIndex] - var port = addr[portIndex+1:] - // 检查端口号 - if port == "0" { - this.FailField("addr", "源站端口号不能为0") - } - if !configutils.HasVariables(port) { - // 必须是整数 - if !regexp.MustCompile(`^\d+$`).MatchString(port) { - this.FailField("addr", "源站端口号只能为整数") - } - var portInt = types.Int(port) - if portInt == 0 { - this.FailField("addr", "源站端口号不能为0") - } - if portInt > 65535 { - this.FailField("addr", "源站端口号不能大于65535") - } - } - - connTimeoutJSON, err := (&shared.TimeDuration{ - Count: int64(params.ConnTimeout), - Unit: shared.TimeDurationUnitSecond, - }).AsJSON() + ossConfig, goNext, err := this.postOSSHook(params.Protocol) if err != nil { this.ErrorPage(err) return } - - readTimeoutJSON, err := (&shared.TimeDuration{ - Count: int64(params.ReadTimeout), - Unit: shared.TimeDurationUnitSecond, - }).AsJSON() - if err != nil { - this.ErrorPage(err) + if !goNext { return } - idleTimeoutJSON, err := (&shared.TimeDuration{ - Count: int64(params.IdleTimeout), - Unit: shared.TimeDurationUnitSecond, - }).AsJSON() - if err != nil { - this.ErrorPage(err) - return + var ossJSON []byte = nil + var connTimeoutJSON []byte + var readTimeoutJSON []byte + var idleTimeoutJSON []byte + var certRefJSON []byte + var pbAddr = &pb.NetworkAddress{ + Protocol: params.Protocol, } - // 证书 - var certIds = []int64{} - if len(params.CertIdsJSON) > 0 { - err = json.Unmarshal(params.CertIdsJSON, &certIds) + if ossConfig != nil { // OSS + ossJSON, err = json.Marshal(ossConfig) if err != nil { this.ErrorPage(err) return } - } - var certRefJSON []byte - if len(certIds) > 0 { - var certId = certIds[0] - if certId > 0 { - var certRef = &sslconfigs.SSLCertRef{ - IsOn: true, - CertId: certId, + err = ossConfig.Init() + if err != nil { + this.Fail("校验OSS配置时出错:" + err.Error()) + return + } + } else { // 普通源站 + params.Must. + Field("addr", params.Addr). + Require("请输入源站地址") + + var addr = params.Addr + + // 是否是完整的地址 + if (params.Protocol == "http" || params.Protocol == "https") && regexp.MustCompile(`^(http|https)://`).MatchString(addr) { + u, err := url.Parse(addr) + if err == nil { + addr = u.Host } - certRefJSON, err = json.Marshal(certRef) + } + + addr = strings.ReplaceAll(addr, ":", ":") + addr = regexp.MustCompile(`\s+`).ReplaceAllString(addr, "") + portIndex := strings.LastIndex(addr, ":") + if portIndex < 0 { + if params.Protocol == "http" { + addr += ":80" + } else if params.Protocol == "https" { + addr += ":443" + } else { + this.FailField("addr", "源站地址中需要带有端口") + } + portIndex = strings.LastIndex(addr, ":") + } + var host = addr[:portIndex] + var port = addr[portIndex+1:] + // 检查端口号 + if port == "0" { + this.FailField("addr", "源站端口号不能为0") + return + } + if !configutils.HasVariables(port) { + // 必须是整数 + if !regexp.MustCompile(`^\d+$`).MatchString(port) { + this.FailField("addr", "源站端口号只能为整数") + return + } + var portInt = types.Int(port) + if portInt == 0 { + this.FailField("addr", "源站端口号不能为0") + return + } + if portInt > 65535 { + this.FailField("addr", "源站端口号不能大于65535") + return + } + } + + pbAddr = &pb.NetworkAddress{ + Protocol: params.Protocol, + Host: host, + PortRange: port, + } + + connTimeoutJSON, err = (&shared.TimeDuration{ + Count: int64(params.ConnTimeout), + Unit: shared.TimeDurationUnitSecond, + }).AsJSON() + if err != nil { + this.ErrorPage(err) + return + } + + readTimeoutJSON, err = (&shared.TimeDuration{ + Count: int64(params.ReadTimeout), + Unit: shared.TimeDurationUnitSecond, + }).AsJSON() + if err != nil { + this.ErrorPage(err) + return + } + + idleTimeoutJSON, err = (&shared.TimeDuration{ + Count: int64(params.IdleTimeout), + Unit: shared.TimeDurationUnitSecond, + }).AsJSON() + if err != nil { + this.ErrorPage(err) + return + } + + // 证书 + var certIds = []int64{} + if len(params.CertIdsJSON) > 0 { + err = json.Unmarshal(params.CertIdsJSON, &certIds) if err != nil { this.ErrorPage(err) return } } + + if len(certIds) > 0 { + var certId = certIds[0] + if certId > 0 { + var certRef = &sslconfigs.SSLCertRef{ + IsOn: true, + CertId: certId, + } + certRefJSON, err = json.Marshal(certRef) + if err != nil { + this.ErrorPage(err) + return + } + } + } } // 专属域名 @@ -258,13 +307,10 @@ func (this *UpdatePopupAction) RunPost(params struct { } _, err = this.RPC().OriginRPC().UpdateOrigin(this.AdminContext(), &pb.UpdateOriginRequest{ - OriginId: params.OriginId, - Name: params.Name, - Addr: &pb.NetworkAddress{ - Protocol: params.Protocol, - Host: host, - PortRange: port, - }, + OriginId: params.OriginId, + Name: params.Name, + Addr: pbAddr, + OssJSON: ossJSON, Description: params.Description, Weight: params.Weight, IsOn: params.IsOn, diff --git a/internal/web/actions/default/servers/server/settings/origins/updatePopup_ext.go b/internal/web/actions/default/servers/server/settings/origins/updatePopup_ext.go new file mode 100644 index 00000000..f5089619 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/origins/updatePopup_ext.go @@ -0,0 +1,18 @@ +// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . +//go:build !plus + +package origins + +import ( + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ossconfigs" + "github.com/iwind/TeaGo/maps" +) + +func (this *UpdatePopupAction) getOSSHook() { + this.Data["ossTypes"] = []maps.Map{} +} + +func (this *UpdatePopupAction) postOSSHook(protocol string) (config *ossconfigs.OSSConfig, goNext bool, err error) { + goNext = true + 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 d89b0ffc..25235690 100644 --- a/internal/web/actions/default/servers/server/settings/reverseProxy/index.go +++ b/internal/web/actions/default/servers/server/settings/reverseProxy/index.go @@ -87,7 +87,8 @@ func (this *IndexAction) RunGet(params struct { var m = maps.Map{ "id": originConfig.Id, "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "addr": originConfig.AddrSummary(), + "isOSS": originConfig.IsOSS(), "name": originConfig.Name, "isOn": originConfig.IsOn, "domains": originConfig.Domains, @@ -104,7 +105,8 @@ func (this *IndexAction) RunGet(params struct { var m = maps.Map{ "id": originConfig.Id, "weight": originConfig.Weight, - "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, + "addr": originConfig.AddrSummary(), + "isOSS": originConfig.IsOSS(), "name": originConfig.Name, "isOn": originConfig.IsOn, "domains": originConfig.Domains, diff --git a/web/public/js/components/server/origin-list-box.js b/web/public/js/components/server/origin-list-box.js index 89274404..63c6207f 100644 --- a/web/public/js/components/server/origin-list-box.js +++ b/web/public/js/components/server/origin-list-box.js @@ -103,6 +103,7 @@ Vue.component("origin-list-table", { {{origin.addr}}  
+ 对象存储 {{origin.name}} 证书 主机名: {{origin.host}} diff --git a/web/views/@default/servers/addOriginPopup.html b/web/views/@default/servers/addOriginPopup.html index 8f2c58d9..1301394f 100644 --- a/web/views/@default/servers/addOriginPopup.html +++ b/web/views/@default/servers/addOriginPopup.html @@ -5,12 +5,16 @@
- + - + + + - + + + + + + + + + + + + + + + + + + + + + + + @@ -56,7 +96,7 @@

默认不需要填写,表示支持所有域名。如果填写了专属域名,表示这些源站只会在所列的专属域名被访问时才生效。

- +
源站协议 *源站协议 * @@ -25,20 +29,56 @@
源站地址 *

{{addrError}}源站服务器地址,通常是一个IP(或域名)加端口,不需要加 http:// 或 https://

回源主机名

请求源站时的Host字段值,用于设置访问源站的站点域名,支持请求变量

密钥ID *
(Secret Id)
+ +

访问存储桶需要的密钥ID。

+
密钥Key *
(Secret Key)
+ +

访问存储桶需要的密钥Key。

+
存储桶名称 * + +

存储桶名称,类似于example-12345678

+
所属区域代号 * + +

COS服务所属区域代号,类似于ap-beijing

+
端口跟随 diff --git a/web/views/@default/servers/addOriginPopup.js b/web/views/@default/servers/addOriginPopup.js index 24f64c50..7758cc9c 100644 --- a/web/views/@default/servers/addOriginPopup.js +++ b/web/views/@default/servers/addOriginPopup.js @@ -1,6 +1,7 @@ Tea.context(function () { this.addr = "" this.protocol = "" + this.isOSS = false this.addrError = "" @@ -15,6 +16,8 @@ Tea.context(function () { } this.changeProtocol = function () { + this.isOSS = this.protocol.startsWith("oss:") + this.checkPort() } diff --git a/web/views/@default/servers/create.html b/web/views/@default/servers/create.html index 0f49699e..58bc822f 100644 --- a/web/views/@default/servers/create.html +++ b/web/views/@default/servers/create.html @@ -59,7 +59,8 @@
- {{origin.addr.protocol}}://{{origin.addr.host}}:{{origin.addr.portRange}} + {{origin.addrSummary}} + {{origin.addr.protocol}}://{{origin.addr.host}}:{{origin.addr.portRange}}
diff --git a/web/views/@default/servers/server/settings/origins/addPopup.html b/web/views/@default/servers/server/settings/origins/addPopup.html index 47556834..b37dc77b 100644 --- a/web/views/@default/servers/server/settings/origins/addPopup.html +++ b/web/views/@default/servers/server/settings/origins/addPopup.html @@ -7,12 +7,16 @@ - + - + + + - + + + + + + + + + + + + + + + + + + + + + + + @@ -59,7 +99,7 @@

默认不需要填写,表示支持所有域名。如果填写了专属域名,表示这些源站只会在所列的专属域名被访问时才生效。

- + - + - + - + - + - + - + diff --git a/web/views/@default/servers/server/settings/origins/addPopup.js b/web/views/@default/servers/server/settings/origins/addPopup.js index 1413057c..4c2211fc 100644 --- a/web/views/@default/servers/server/settings/origins/addPopup.js +++ b/web/views/@default/servers/server/settings/origins/addPopup.js @@ -1,6 +1,7 @@ Tea.context(function () { this.addr = "" this.protocol = "" + this.isOSS = false this.addrError = "" @@ -13,6 +14,8 @@ Tea.context(function () { } this.changeProtocol = function () { + this.isOSS = this.protocol.startsWith("oss:") + this.checkPort() } diff --git a/web/views/@default/servers/server/settings/origins/updatePopup.html b/web/views/@default/servers/server/settings/origins/updatePopup.html index 1de6c5d8..116618f7 100644 --- a/web/views/@default/servers/server/settings/origins/updatePopup.html +++ b/web/views/@default/servers/server/settings/origins/updatePopup.html @@ -9,12 +9,16 @@
源站协议源站协议 @@ -27,7 +31,9 @@
源站地址 * @@ -35,13 +41,47 @@ 源站服务器地址,通常是一个IP(或域名)加端口,不需要加 http:// 或 https://

回源主机名

请求源站时的Host字段值,用于设置访问源站的站点域名,支持请求变量

密钥ID *
(Secret Id)
+ +

访问存储桶需要的密钥ID。

+
密钥Key *
(Secret Key)
+ +

访问存储桶需要的密钥Key。

+
存储桶名称 * + +

存储桶名称,类似于example-12345678

+
所属区域代号 * + +

COS服务所属区域代号,类似于ap-beijing

+
端口跟随 @@ -80,7 +120,7 @@

给当前源站起一个容易识别的名称。

连接失败超时时间
@@ -94,7 +134,7 @@

连接源站失败的最大超时时间,0表示不限制。

读取超时时间
@@ -108,7 +148,7 @@

读取内容时的最大超时时间,0表示不限制。

最大并发连接数
@@ -119,7 +159,7 @@

源站可以接受到的最大并发连接数,0表示使用系统默认。

最大空闲连接数
@@ -130,7 +170,7 @@

当没有请求时,源站保持等待的最大空闲连接数量,0表示使用系统默认。

最大空闲超时时间
@@ -151,7 +191,7 @@
是否启用启用当前源站
- + - + + + - + + + + + + + + + + + + + + + + + + + + + + + @@ -60,7 +100,7 @@

默认不需要填写,表示支持所有域名。如果填写了专属域名,表示这些源站只会在所列的专属域名被访问时才生效。

- + - + - + - + - + - + - + diff --git a/web/views/@default/servers/server/settings/origins/updatePopup.js b/web/views/@default/servers/server/settings/origins/updatePopup.js index a4a03070..08b34212 100644 --- a/web/views/@default/servers/server/settings/origins/updatePopup.js +++ b/web/views/@default/servers/server/settings/origins/updatePopup.js @@ -1,11 +1,22 @@ Tea.context(function () { this.addrError = "" + this.isOSS = this.origin != null && this.origin.protocol != null && this.origin.protocol.startsWith("oss:") + + // 预先设置oss选项 + if (!this.isOSS) { + this.origin.oss = { + type: "", + options: {} + } + } this.$delay(function () { this.checkPort() }) this.changeProtocol = function () { + this.isOSS = this.origin.protocol.startsWith("oss:") + this.checkPort() }
源站协议源站协议 @@ -29,20 +33,56 @@
源站地址 *

{{addrError}}源站服务器地址,通常是一个IP(或域名)加端口,不需要加 http:// 或 https://

回源主机名

请求源站时的Host字段值,用于设置访问源站的站点域名,支持请求变量

密钥ID *
(Secret Id)
+ +

访问存储桶需要的密钥ID。

+
密钥Key *
(Secret Key)
+ +

访问存储桶需要的密钥Key。

+
存储桶名称 * + +

存储桶名称,类似于example-12345678

+
所属区域代号 * + +

COS服务所属区域代号,类似于ap-beijing

+
端口跟随 @@ -81,7 +121,7 @@

给当前源站起一个容易识别的名称。

连接失败超时时间
@@ -95,7 +135,7 @@

连接源站失败的最大超时时间,0表示不限制。

读取超时时间
@@ -109,7 +149,7 @@

读取内容时的最大超时时间,0表示不限制。

最大并发连接数
@@ -120,7 +160,7 @@

源站可以接受到的最大并发连接数,0表示使用系统默认。

最大空闲连接数
@@ -131,7 +171,7 @@

当没有请求时,源站保持等待的最大空闲连接数量,0表示使用系统默认。

最大空闲超时时间
@@ -152,7 +192,7 @@
是否启用启用当前源站