diff --git a/internal/web/actions/default/index/index.go b/internal/web/actions/default/index/index.go
index 1beaf192..4152181f 100644
--- a/internal/web/actions/default/index/index.go
+++ b/internal/web/actions/default/index/index.go
@@ -9,12 +9,15 @@ import (
"github.com/TeaOSLab/EdgeAdmin/internal/setup"
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
+ adminserverutils "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/server/admin-server-utils"
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
+ "github.com/TeaOSLab/EdgeCommon/pkg/configutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/iwind/TeaGo/actions"
"github.com/iwind/TeaGo/types"
stringutil "github.com/iwind/TeaGo/utils/string"
+ "net"
"time"
)
@@ -32,6 +35,25 @@ func (this *IndexAction) RunGet(params struct {
Auth *helpers.UserShouldAuth
}) {
+ // 是否自动从HTTP跳转到HTTPS
+ if this.Request.TLS == nil {
+ httpsPort, _ := adminserverutils.ReadServerHTTPS()
+ if httpsPort > 0 {
+ currentHost, _, err := net.SplitHostPort(this.Request.Host)
+ if err != nil {
+ currentHost = this.Request.Host
+ }
+
+ var newHost = configutils.QuoteIP(currentHost)
+ if httpsPort != 443 /** default https port **/ {
+ newHost += ":" + types.String(httpsPort)
+ }
+
+ this.RedirectURL("https://" + newHost + this.Request.RequestURI)
+ return
+ }
+ }
+
// DEMO模式
this.Data["isDemo"] = teaconst.IsDemoMode
diff --git a/internal/web/actions/default/settings/server/admin-server-utils/utils.go b/internal/web/actions/default/settings/server/admin-server-utils/utils.go
new file mode 100644
index 00000000..fe92f987
--- /dev/null
+++ b/internal/web/actions/default/settings/server/admin-server-utils/utils.go
@@ -0,0 +1,86 @@
+package adminserverutils
+
+import (
+ "errors"
+ "github.com/iwind/TeaGo"
+ "github.com/iwind/TeaGo/Tea"
+ "github.com/iwind/TeaGo/types"
+ "gopkg.in/yaml.v3"
+ "net"
+ "os"
+ "time"
+)
+
+var ServerConfigIsChanged = false
+
+const configFilename = "server.yaml"
+
+// LoadServerConfig 读取当前服务配置
+func LoadServerConfig() (*TeaGo.ServerConfig, error) {
+ configFile := Tea.ConfigFile(configFilename)
+ data, err := os.ReadFile(configFile)
+ if err != nil {
+ return nil, err
+ }
+ var serverConfig = &TeaGo.ServerConfig{}
+ err = yaml.Unmarshal(data, serverConfig)
+ if err != nil {
+ return nil, err
+ }
+ return serverConfig, nil
+}
+
+// WriteServerConfig 保存当前服务配置
+func WriteServerConfig(serverConfig *TeaGo.ServerConfig) error {
+ data, err := yaml.Marshal(serverConfig)
+ if err != nil {
+ return err
+ }
+ err = os.WriteFile(Tea.ConfigFile(configFilename), data, 0666)
+ if err != nil {
+ return err
+ }
+
+ ServerConfigIsChanged = true
+
+ return nil
+}
+
+// ReadServerHTTPS 检查HTTPS地址
+func ReadServerHTTPS() (port int, err error) {
+ config, err := LoadServerConfig()
+ if err != nil {
+ return 0, err
+ }
+ if config == nil {
+ return 0, errors.New("could not load server config")
+ }
+
+ if config.Https.On && len(config.Https.Listen) > 0 {
+ for _, listen := range config.Https.Listen {
+ _, portString, splitErr := net.SplitHostPort(listen)
+ if splitErr == nil {
+ var portInt = types.Int(portString)
+ if portInt > 0 {
+ // 是否已经启动
+ checkErr := func() error {
+ conn, connErr := net.DialTimeout("tcp", ":"+portString, 1*time.Second)
+ if connErr != nil {
+ return connErr
+ }
+ _ = conn.Close()
+ return nil
+ }()
+ if checkErr != nil {
+ continue
+ }
+
+ port = portInt
+ err = nil
+ break
+ }
+ }
+ }
+ }
+ return
+}
diff --git a/internal/web/actions/default/settings/server/index.go b/internal/web/actions/default/settings/server/index.go
index af16415a..1fe6d83a 100644
--- a/internal/web/actions/default/settings/server/index.go
+++ b/internal/web/actions/default/settings/server/index.go
@@ -2,6 +2,7 @@ package server
import (
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
+ adminserverutils "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/server/admin-server-utils"
)
type IndexAction struct {
@@ -13,9 +14,9 @@ func (this *IndexAction) Init() {
}
func (this *IndexAction) RunGet(params struct{}) {
- this.Data["serverIsChanged"] = serverConfigIsChanged
+ this.Data["serverIsChanged"] = adminserverutils.ServerConfigIsChanged
- serverConfig, err := loadServerConfig()
+ serverConfig, err := adminserverutils.LoadServerConfig()
if err != nil {
this.ErrorPage(err)
return
diff --git a/internal/web/actions/default/settings/server/updateHTTPPopup.go b/internal/web/actions/default/settings/server/updateHTTPPopup.go
index 4daa57d0..8cbf7c23 100644
--- a/internal/web/actions/default/settings/server/updateHTTPPopup.go
+++ b/internal/web/actions/default/settings/server/updateHTTPPopup.go
@@ -3,6 +3,7 @@ package server
import (
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
+ adminserverutils "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/server/admin-server-utils"
"github.com/iwind/TeaGo/actions"
"net"
)
@@ -16,7 +17,7 @@ func (this *UpdateHTTPPopupAction) Init() {
}
func (this *UpdateHTTPPopupAction) RunGet(params struct{}) {
- serverConfig, err := loadServerConfig()
+ serverConfig, err := adminserverutils.LoadServerConfig()
if err != nil {
this.ErrorPage(err)
return
@@ -38,7 +39,7 @@ func (this *UpdateHTTPPopupAction) RunPost(params struct {
this.Fail("请输入绑定地址")
}
- serverConfig, err := loadServerConfig()
+ serverConfig, err := adminserverutils.LoadServerConfig()
if err != nil {
this.Fail("保存失败:" + err.Error())
}
@@ -58,7 +59,7 @@ func (this *UpdateHTTPPopupAction) RunPost(params struct {
}
serverConfig.Http.Listen = listen
- err = writeServerConfig(serverConfig)
+ err = adminserverutils.WriteServerConfig(serverConfig)
if err != nil {
this.Fail("保存失败:" + err.Error())
}
diff --git a/internal/web/actions/default/settings/server/updateHTTPSPopup.go b/internal/web/actions/default/settings/server/updateHTTPSPopup.go
index 7b4d553d..27311530 100644
--- a/internal/web/actions/default/settings/server/updateHTTPSPopup.go
+++ b/internal/web/actions/default/settings/server/updateHTTPSPopup.go
@@ -4,6 +4,7 @@ import (
"encoding/json"
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
+ adminserverutils "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/server/admin-server-utils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
"github.com/iwind/TeaGo/Tea"
@@ -21,7 +22,7 @@ func (this *UpdateHTTPSPopupAction) Init() {
}
func (this *UpdateHTTPSPopupAction) RunGet(params struct{}) {
- serverConfig, err := loadServerConfig()
+ serverConfig, err := adminserverutils.LoadServerConfig()
if err != nil {
this.ErrorPage(err)
return
@@ -70,7 +71,7 @@ func (this *UpdateHTTPSPopupAction) RunPost(params struct {
this.Fail("请输入绑定地址")
}
- serverConfig, err := loadServerConfig()
+ serverConfig, err := adminserverutils.LoadServerConfig()
if err != nil {
this.Fail("保存失败:" + err.Error())
}
@@ -133,7 +134,7 @@ func (this *UpdateHTTPSPopupAction) RunPost(params struct {
serverConfig.Https.Cert = "configs/https.cert.pem"
}
- err = writeServerConfig(serverConfig)
+ err = adminserverutils.WriteServerConfig(serverConfig)
if err != nil {
this.Fail("保存配置失败:" + err.Error())
}
diff --git a/internal/web/actions/default/settings/server/utils.go b/internal/web/actions/default/settings/server/utils.go
deleted file mode 100644
index d0497b29..00000000
--- a/internal/web/actions/default/settings/server/utils.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package server
-
-import (
- "github.com/iwind/TeaGo"
- "github.com/iwind/TeaGo/Tea"
- "gopkg.in/yaml.v3"
- "os"
-)
-
-var serverConfigIsChanged = false
-
-// 读取当前服务配置
-func loadServerConfig() (*TeaGo.ServerConfig, error) {
- configFile := Tea.ConfigFile("server.yaml")
- data, err := os.ReadFile(configFile)
- if err != nil {
- return nil, err
- }
- serverConfig := &TeaGo.ServerConfig{}
- err = yaml.Unmarshal(data, serverConfig)
- if err != nil {
- return nil, err
- }
- return serverConfig, nil
-}
-
-// 保存当前服务配置
-func writeServerConfig(serverConfig *TeaGo.ServerConfig) error {
- data, err := yaml.Marshal(serverConfig)
- if err != nil {
- return err
- }
- err = os.WriteFile(Tea.ConfigFile("server.yaml"), data, 0666)
- if err != nil {
- return err
- }
-
- serverConfigIsChanged = true
-
- return nil
-}
diff --git a/web/views/@default/settings/server/index.html b/web/views/@default/settings/server/index.html
index 5a82ec9b..148a5307 100644
--- a/web/views/@default/settings/server/index.html
+++ b/web/views/@default/settings/server/index.html
@@ -2,9 +2,6 @@
这里可以修改当前管理系统的HTTP和HTTPS访问服务。
-| 绑定地址 |
{{listen}}
- 如果地址中的IP是0.0.0.0,表示服务器的所有IP都可以用来使用访问当前管理系统。 +访问当前管理系统的HTTP地址;如果地址中的IP是0.0.0.0,表示服务器的所有IP都可以访问。 |
如果地址中的IP是0.0.0.0,表示服务器的所有IP都可以用来使用访问当前管理系统。
+访问当前管理系统的HTTPS地址;如果地址中的IP是0.0.0.0,表示服务器的所有IP都可以访问。