mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-02 20:00:26 +08:00
210 lines
6.6 KiB
Go
210 lines
6.6 KiB
Go
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
|
|
|
package globalServerConfig
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
|
"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"
|
|
"regexp"
|
|
)
|
|
|
|
type IndexAction struct {
|
|
actionutils.ParentAction
|
|
}
|
|
|
|
func (this *IndexAction) Init() {
|
|
this.Nav("", "setting", "")
|
|
this.SecondMenu("globalServerConfig")
|
|
}
|
|
|
|
func (this *IndexAction) RunGet(params struct {
|
|
ClusterId int64
|
|
}) {
|
|
configResp, err := this.RPC().NodeClusterRPC().FindNodeClusterGlobalServerConfig(this.AdminContext(), &pb.FindNodeClusterGlobalServerConfigRequest{NodeClusterId: params.ClusterId})
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
|
|
var configJSON = configResp.GlobalServerConfigJSON
|
|
var config = serverconfigs.NewGlobalServerConfig()
|
|
if len(configJSON) > 0 {
|
|
err = json.Unmarshal(configJSON, config)
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
}
|
|
this.Data["config"] = config
|
|
|
|
var httpAllDomainMismatchActionContentHTML string
|
|
var httpAllDomainMismatchActionStatusCode = "404"
|
|
if config.HTTPAll.DomainMismatchAction != nil && config.HTTPAll.DomainMismatchAction.Options != nil {
|
|
httpAllDomainMismatchActionContentHTML = config.HTTPAll.DomainMismatchAction.Options.GetString("contentHTML")
|
|
var statusCode = config.HTTPAll.DomainMismatchAction.Options.GetInt("statusCode")
|
|
if statusCode > 0 {
|
|
httpAllDomainMismatchActionStatusCode = types.String(statusCode)
|
|
}
|
|
} else {
|
|
httpAllDomainMismatchActionContentHTML = `<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8"/>
|
|
<title>404 not found</title>
|
|
<style>
|
|
* { font-family: Roboto, system-ui, sans-serif; }
|
|
h3, p { text-align: center; }
|
|
p { color: grey; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h3>Error: 404 Page Not Found</h3>
|
|
<h3>找不到您要访问的页面。</h3>
|
|
|
|
<p>原因:找不到当前访问域名对应的网站,请联系网站管理员。</p>
|
|
|
|
</body>
|
|
</html>`
|
|
}
|
|
|
|
this.Data["httpAllDomainMismatchActionContentHTML"] = httpAllDomainMismatchActionContentHTML
|
|
this.Data["httpAllDomainMismatchActionStatusCode"] = httpAllDomainMismatchActionStatusCode
|
|
|
|
this.Show()
|
|
}
|
|
|
|
func (this *IndexAction) RunPost(params struct {
|
|
ClusterId int64
|
|
|
|
HttpAllMatchDomainStrictly bool
|
|
HttpAllDomainMismatchActionContentHTML string
|
|
HttpAllDomainMismatchActionStatusCode string
|
|
HttpAllAllowMismatchDomainsJSON []byte
|
|
HttpAllAllowNodeIP bool
|
|
HttpAllDefaultDomain string
|
|
HttpAllNodeIPPageHTML string
|
|
HttpAllNodeIPShowPage bool
|
|
|
|
HttpAllServerName string
|
|
HttpAllSupportsLowVersionHTTP bool
|
|
HttpAllMatchCertFromAllServers bool
|
|
HttpAllForceLnRequest bool
|
|
|
|
HttpAccessLogIsOn bool
|
|
HttpAccessLogEnableRequestHeaders bool
|
|
HttpAccessLogEnableResponseHeaders bool
|
|
HttpAccessLogCommonRequestHeadersOnly bool
|
|
HttpAccessLogEnableCookies bool
|
|
HttpAccessLogEnableServerNotFound bool
|
|
|
|
LogRecordServerError bool
|
|
|
|
PerformanceAutoReadTimeout bool
|
|
PerformanceAutoWriteTimeout bool
|
|
PerformanceDebug bool
|
|
|
|
Must *actions.Must
|
|
CSRF *actionutils.CSRF
|
|
}) {
|
|
defer this.CreateLogInfo(codes.ServerGlobalSetting_LogUpdateClusterGlobalServerConfig, params.ClusterId)
|
|
|
|
configResp, err := this.RPC().NodeClusterRPC().FindNodeClusterGlobalServerConfig(this.AdminContext(), &pb.FindNodeClusterGlobalServerConfigRequest{NodeClusterId: params.ClusterId})
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
|
|
var configJSON = configResp.GlobalServerConfigJSON
|
|
var config = serverconfigs.NewGlobalServerConfig()
|
|
if len(configJSON) > 0 {
|
|
err = json.Unmarshal(configJSON, config)
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
var domainMisMatchStatusCodeString = params.HttpAllDomainMismatchActionStatusCode
|
|
if !regexp.MustCompile(`^\d{3}$`).MatchString(domainMisMatchStatusCodeString) {
|
|
this.FailField("httpAllDomainMismatchActionContentStatusCode", "请输入正确的状态码")
|
|
return
|
|
}
|
|
var domainMisMatchStatusCode = types.Int(domainMisMatchStatusCodeString)
|
|
|
|
config.HTTPAll.MatchDomainStrictly = params.HttpAllMatchDomainStrictly
|
|
config.HTTPAll.DomainMismatchAction = &serverconfigs.DomainMismatchAction{
|
|
Code: serverconfigs.DomainMismatchActionPage,
|
|
Options: maps.Map{
|
|
"statusCode": domainMisMatchStatusCode,
|
|
"contentHTML": params.HttpAllDomainMismatchActionContentHTML,
|
|
},
|
|
}
|
|
|
|
var allowMismatchDomains = []string{}
|
|
if len(params.HttpAllAllowMismatchDomainsJSON) > 0 {
|
|
err = json.Unmarshal(params.HttpAllAllowMismatchDomainsJSON, &allowMismatchDomains)
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
// 域名
|
|
config.HTTPAll.AllowMismatchDomains = allowMismatchDomains
|
|
config.HTTPAll.AllowNodeIP = params.HttpAllAllowNodeIP
|
|
config.HTTPAll.DefaultDomain = params.HttpAllDefaultDomain
|
|
config.HTTPAll.NodeIPShowPage = params.HttpAllNodeIPShowPage
|
|
config.HTTPAll.NodeIPPageHTML = params.HttpAllNodeIPPageHTML
|
|
|
|
// HTTP All
|
|
config.HTTPAll.ServerName = params.HttpAllServerName
|
|
config.HTTPAll.SupportsLowVersionHTTP = params.HttpAllSupportsLowVersionHTTP
|
|
config.HTTPAll.MatchCertFromAllServers = params.HttpAllMatchCertFromAllServers
|
|
config.HTTPAll.ForceLnRequest = params.HttpAllForceLnRequest
|
|
|
|
// 访问日志
|
|
config.HTTPAccessLog.IsOn = params.HttpAccessLogIsOn
|
|
config.HTTPAccessLog.EnableRequestHeaders = params.HttpAccessLogEnableRequestHeaders
|
|
config.HTTPAccessLog.EnableResponseHeaders = params.HttpAccessLogEnableResponseHeaders
|
|
config.HTTPAccessLog.CommonRequestHeadersOnly = params.HttpAccessLogCommonRequestHeadersOnly
|
|
config.HTTPAccessLog.EnableCookies = params.HttpAccessLogEnableCookies
|
|
config.HTTPAccessLog.EnableServerNotFound = params.HttpAccessLogEnableServerNotFound
|
|
|
|
// 日志
|
|
config.Log.RecordServerError = params.LogRecordServerError
|
|
|
|
// 性能
|
|
config.Performance.AutoReadTimeout = params.PerformanceAutoReadTimeout
|
|
config.Performance.AutoWriteTimeout = params.PerformanceAutoWriteTimeout
|
|
config.Performance.Debug = params.PerformanceDebug
|
|
|
|
err = config.Init()
|
|
if err != nil {
|
|
this.Fail("配置校验失败:" + err.Error())
|
|
return
|
|
}
|
|
|
|
configJSON, err = json.Marshal(config)
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
|
|
_, err = this.RPC().NodeClusterRPC().UpdateNodeClusterGlobalServerConfig(this.AdminContext(), &pb.UpdateNodeClusterGlobalServerConfigRequest{
|
|
NodeClusterId: params.ClusterId,
|
|
GlobalServerConfigJSON: configJSON,
|
|
})
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
|
|
this.Success()
|
|
}
|