// 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 = "" 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 = `
原因:找不到当前访问域名对应的网站,请联系网站管理员。
` } 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() }