diff --git a/internal/web/actions/default/servers/server/settings/origins/detectHTTPS.go b/internal/web/actions/default/servers/server/settings/origins/detectHTTPS.go new file mode 100644 index 00000000..41937ccb --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/origins/detectHTTPS.go @@ -0,0 +1,58 @@ +// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . + +package origins + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/configutils" + "net" + "net/url" + "strings" + "time" +) + +type DetectHTTPSAction struct { + actionutils.ParentAction +} + +func (this *DetectHTTPSAction) RunPost(params struct { + Addr string +}) { + this.Data["isOk"] = false + + // parse from url + if strings.HasPrefix(params.Addr, "http://") || strings.HasPrefix(params.Addr, "https://") { + u, err := url.Parse(params.Addr) + if err == nil { + params.Addr = u.Host + } + } + + this.Data["addr"] = params.Addr + + if len(params.Addr) == 0 { + this.Success() + return + } + + var realHost = params.Addr + host, port, err := net.SplitHostPort(params.Addr) + if err == nil { + if port != "80" { + this.Success() + return + } + realHost = host + } + + conn, err := net.DialTimeout("tcp", configutils.QuoteIP(realHost)+":443", 3*time.Second) + if err != nil { + this.Success() + return + } + _ = conn.Close() + + this.Data["isOk"] = true + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/origins/init.go b/internal/web/actions/default/servers/server/settings/origins/init.go index 0aaac376..5f2aa8ef 100644 --- a/internal/web/actions/default/servers/server/settings/origins/init.go +++ b/internal/web/actions/default/servers/server/settings/origins/init.go @@ -15,6 +15,7 @@ func init() { Post("/delete", new(DeleteAction)). GetPost("/updatePopup", new(UpdatePopupAction)). Post("/updateIsOn", new(UpdateIsOnAction)). + Post("/detectHTTPS", new(DetectHTTPSAction)). EndAll() }) } diff --git a/internal/web/helpers/user_must_auth.go b/internal/web/helpers/user_must_auth.go index ad1144ca..529d6ed0 100644 --- a/internal/web/helpers/user_must_auth.go +++ b/internal/web/helpers/user_must_auth.go @@ -224,12 +224,14 @@ func (this *userMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam } // 是否正在使用反向代理模式 - action.Data["teaXFFPrompt"] = false - if !securityXFFPromptDisabled && - (len(action.Header("X-Forwarded-For")) > 0 || len(action.Header("X-Real-Ip")) > 0 || len(action.Header("Cf-Connecting-Ip")) > 0) && - securityConfig != nil && - len(securityConfig.ClientIPHeaderNames) == 0 { - action.Data["teaXFFPrompt"] = true + if action.Request.Method == http.MethodGet { + action.Data["teaXFFPrompt"] = false + if !securityXFFPromptDisabled && + (len(action.Header("X-Forwarded-For")) > 0 || len(action.Header("X-Real-Ip")) > 0 || len(action.Header("Cf-Connecting-Ip")) > 0) && + securityConfig != nil && + len(securityConfig.ClientIPHeaderNames) == 0 { + action.Data["teaXFFPrompt"] = true + } } // 检查用户是否存在 diff --git a/web/views/@default/servers/addOriginPopup.html b/web/views/@default/servers/addOriginPopup.html index 993ccbf4..c29922ab 100644 --- a/web/views/@default/servers/addOriginPopup.html +++ b/web/views/@default/servers/addOriginPopup.html @@ -36,9 +36,10 @@
{{addrError}}源站服务器地址,通常是一个IP(或域名)加端口,不需要加 http:// 或 https://。
+系统检测到当前源站有HTTPS协议可用,是否切换到HTTPS协议? [点此切换]
+{{addrError}}源站服务器地址,通常是一个IP(或域名)加端口,80和443端口可以省略,不需要加 http:// 或 https://。
{{addrError}} - 源站服务器地址,通常是一个IP(或域名)加端口,不需要加 http:// 或 https://。
+系统检测到当前源站有HTTPS协议可用,是否切换到HTTPS协议? [点此切换]
+{{addrError}}源站服务器地址,通常是一个IP(或域名)加端口,80和443端口可以省略,不需要加 http:// 或 https://。
{{addrError}}源站服务器地址,通常是一个IP(或域名)加端口,不需要加 http:// 或 https://。
+{{addrError}}源站服务器地址,通常是一个IP(或域名)加端口,80和443端口可以省略,不需要加 http:// 或 https://。