diff --git a/internal/web/actions/default/api/node/createAddrPopup.go b/internal/web/actions/default/api/node/createAddrPopup.go index c546fd8a..5e527e9a 100644 --- a/internal/web/actions/default/api/node/createAddrPopup.go +++ b/internal/web/actions/default/api/node/createAddrPopup.go @@ -5,9 +5,12 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" "net" + "net/url" + "regexp" + "strings" ) -// 添加地址 +// CreateAddrPopupAction 添加地址 type CreateAddrPopupAction struct { actionutils.ParentAction } @@ -30,12 +33,31 @@ func (this *CreateAddrPopupAction) RunPost(params struct { Field("addr", params.Addr). Require("请输入访问地址") + // 兼容URL + if regexp.MustCompile(`^(?i)(http|https)://`).MatchString(params.Addr) { + u, err := url.Parse(params.Addr) + if err != nil { + this.FailField("addr", "错误的访问地址,不需要添加http://或https://") + } + params.Addr = u.Host + } + + // 自动添加端口 + if !strings.Contains(params.Addr, ":") { + switch params.Protocol { + case "http": + params.Addr += ":80" + case "https": + params.Addr += ":443" + } + } + host, port, err := net.SplitHostPort(params.Addr) if err != nil { this.FailField("addr", "错误的访问地址") } - addrConfig := &serverconfigs.NetworkAddressConfig{ + var addrConfig = &serverconfigs.NetworkAddressConfig{ Protocol: serverconfigs.Protocol(params.Protocol), Host: host, PortRange: port, diff --git a/internal/web/actions/default/api/node/updateAddrPopup.go b/internal/web/actions/default/api/node/updateAddrPopup.go index 539270f8..fd0719bb 100644 --- a/internal/web/actions/default/api/node/updateAddrPopup.go +++ b/internal/web/actions/default/api/node/updateAddrPopup.go @@ -5,6 +5,9 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" "net" + "net/url" + "regexp" + "strings" ) type UpdateAddrPopupAction struct { @@ -27,6 +30,26 @@ func (this *UpdateAddrPopupAction) RunPost(params struct { params.Must. Field("addr", params.Addr). Require("请输入访问地址") + + // 兼容URL + if regexp.MustCompile(`^(?i)(http|https)://`).MatchString(params.Addr) { + u, err := url.Parse(params.Addr) + if err != nil { + this.FailField("addr", "错误的访问地址,不需要添加http://或https://") + } + params.Addr = u.Host + } + + // 自动添加端口 + if !strings.Contains(params.Addr, ":") { + switch params.Protocol { + case "http": + params.Addr += ":80" + case "https": + params.Addr += ":443" + } + } + host, port, err := net.SplitHostPort(params.Addr) if err != nil { this.FailField("addr", "错误的访问地址") diff --git a/web/views/@default/api/node/install.html b/web/views/@default/api/node/install.html index 8a735783..43f13b15 100644 --- a/web/views/@default/api/node/install.html +++ b/web/views/@default/api/node/install.html @@ -4,10 +4,11 @@