mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 13:10:26 +08:00 
			
		
		
		
	增加CORS自适应跨域
This commit is contained in:
		@@ -89,6 +89,19 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// DNS信息
 | 
				
			||||||
 | 
						var fullDomainName = ""
 | 
				
			||||||
 | 
						if len(cluster.DnsName) > 0 && cluster.DnsDomainId > 0 {
 | 
				
			||||||
 | 
							domainResp, err := this.RPC().DNSDomainRPC().FindBasicDNSDomain(this.AdminContext(), &pb.FindBasicDNSDomainRequest{DnsDomainId: cluster.DnsDomainId})
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if domainResp.DnsDomain != nil {
 | 
				
			||||||
 | 
								fullDomainName = cluster.DnsName + "." + domainResp.DnsDomain.Name
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.Data["cluster"] = maps.Map{
 | 
						this.Data["cluster"] = maps.Map{
 | 
				
			||||||
		"id":                  cluster.Id,
 | 
							"id":                  cluster.Id,
 | 
				
			||||||
		"name":                cluster.Name,
 | 
							"name":                cluster.Name,
 | 
				
			||||||
@@ -100,6 +113,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
		"autoRemoteStart":     cluster.AutoRemoteStart,
 | 
							"autoRemoteStart":     cluster.AutoRemoteStart,
 | 
				
			||||||
		"autoInstallNftables": cluster.AutoInstallNftables,
 | 
							"autoInstallNftables": cluster.AutoInstallNftables,
 | 
				
			||||||
		"sshParams":           sshParams,
 | 
							"sshParams":           sshParams,
 | 
				
			||||||
 | 
							"domainName":          fullDomainName,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 默认值
 | 
						// 默认值
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,7 +43,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
			this.ErrorPage(err)
 | 
								this.ErrorPage(err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		headerPolicyId := createHeaderPolicyResp.HeaderPolicyId
 | 
							headerPolicyId := createHeaderPolicyResp.HttpHeaderPolicyId
 | 
				
			||||||
		ref := &shared.HTTPHeaderPolicyRef{
 | 
							ref := &shared.HTTPHeaderPolicyRef{
 | 
				
			||||||
			IsPrior:        false,
 | 
								IsPrior:        false,
 | 
				
			||||||
			IsOn:           true,
 | 
								IsOn:           true,
 | 
				
			||||||
@@ -70,7 +70,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
			this.ErrorPage(err)
 | 
								this.ErrorPage(err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		headerPolicyId := createHeaderPolicyResp.HeaderPolicyId
 | 
							headerPolicyId := createHeaderPolicyResp.HttpHeaderPolicyId
 | 
				
			||||||
		ref := &shared.HTTPHeaderPolicyRef{
 | 
							ref := &shared.HTTPHeaderPolicyRef{
 | 
				
			||||||
			IsPrior:        false,
 | 
								IsPrior:        false,
 | 
				
			||||||
			IsOn:           true,
 | 
								IsOn:           true,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,13 +40,13 @@ func (this *CreateDeletePopupAction) RunPost(params struct {
 | 
				
			|||||||
		Field("name", params.Name).
 | 
							Field("name", params.Name).
 | 
				
			||||||
		Require("名称不能为空")
 | 
							Require("名称不能为空")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	policyConfigResp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{HeaderPolicyId: params.HeaderPolicyId})
 | 
						policyConfigResp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{HttpHeaderPolicyId: params.HeaderPolicyId})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	policyConfig := &shared.HTTPHeaderPolicy{}
 | 
						policyConfig := &shared.HTTPHeaderPolicy{}
 | 
				
			||||||
	err = json.Unmarshal(policyConfigResp.HeaderPolicyJSON, policyConfig)
 | 
						err = json.Unmarshal(policyConfigResp.HttpHeaderPolicyJSON, policyConfig)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -55,8 +55,8 @@ func (this *CreateDeletePopupAction) RunPost(params struct {
 | 
				
			|||||||
	deleteHeaders := policyConfig.DeleteHeaders
 | 
						deleteHeaders := policyConfig.DeleteHeaders
 | 
				
			||||||
	deleteHeaders = append(deleteHeaders, params.Name)
 | 
						deleteHeaders = append(deleteHeaders, params.Name)
 | 
				
			||||||
	_, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicyDeletingHeaders(this.AdminContext(), &pb.UpdateHTTPHeaderPolicyDeletingHeadersRequest{
 | 
						_, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicyDeletingHeaders(this.AdminContext(), &pb.UpdateHTTPHeaderPolicyDeletingHeadersRequest{
 | 
				
			||||||
		HeaderPolicyId: params.HeaderPolicyId,
 | 
							HttpHeaderPolicyId: params.HeaderPolicyId,
 | 
				
			||||||
		HeaderNames:    deleteHeaders,
 | 
							HeaderNames:        deleteHeaders,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,13 +52,13 @@ func (this *CreateSetPopupAction) RunPost(params struct {
 | 
				
			|||||||
		Field("name", params.Name).
 | 
							Field("name", params.Name).
 | 
				
			||||||
		Require("请输入Header名称")
 | 
							Require("请输入Header名称")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	configResp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{HeaderPolicyId: params.HeaderPolicyId})
 | 
						configResp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{HttpHeaderPolicyId: params.HeaderPolicyId})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	policyConfig := &shared.HTTPHeaderPolicy{}
 | 
						policyConfig := &shared.HTTPHeaderPolicy{}
 | 
				
			||||||
	err = json.Unmarshal(configResp.HeaderPolicyJSON, policyConfig)
 | 
						err = json.Unmarshal(configResp.HttpHeaderPolicyJSON, policyConfig)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -135,8 +135,8 @@ func (this *CreateSetPopupAction) RunPost(params struct {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicySettingHeaders(this.AdminContext(), &pb.UpdateHTTPHeaderPolicySettingHeadersRequest{
 | 
						_, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicySettingHeaders(this.AdminContext(), &pb.UpdateHTTPHeaderPolicySettingHeadersRequest{
 | 
				
			||||||
		HeaderPolicyId: params.HeaderPolicyId,
 | 
							HttpHeaderPolicyId: params.HeaderPolicyId,
 | 
				
			||||||
		HeadersJSON:    refsJSON,
 | 
							HeadersJSON:        refsJSON,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,14 +21,14 @@ func (this *DeleteAction) RunPost(params struct {
 | 
				
			|||||||
	defer this.CreateLog(oplogs.LevelInfo, "删除请求Header,HeaderPolicyId:%d, HeaderId:%d", params.HeaderPolicyId, params.HeaderId)
 | 
						defer this.CreateLog(oplogs.LevelInfo, "删除请求Header,HeaderPolicyId:%d, HeaderId:%d", params.HeaderPolicyId, params.HeaderId)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	policyConfigResp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{
 | 
						policyConfigResp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{
 | 
				
			||||||
		HeaderPolicyId: params.HeaderPolicyId,
 | 
							HttpHeaderPolicyId: params.HeaderPolicyId,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	policyConfig := &shared.HTTPHeaderPolicy{}
 | 
						policyConfig := &shared.HTTPHeaderPolicy{}
 | 
				
			||||||
	err = json.Unmarshal(policyConfigResp.HeaderPolicyJSON, policyConfig)
 | 
						err = json.Unmarshal(policyConfigResp.HttpHeaderPolicyJSON, policyConfig)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -48,8 +48,8 @@ func (this *DeleteAction) RunPost(params struct {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		_, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicySettingHeaders(this.AdminContext(), &pb.UpdateHTTPHeaderPolicySettingHeadersRequest{
 | 
							_, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicySettingHeaders(this.AdminContext(), &pb.UpdateHTTPHeaderPolicySettingHeadersRequest{
 | 
				
			||||||
			HeaderPolicyId: params.HeaderPolicyId,
 | 
								HttpHeaderPolicyId: params.HeaderPolicyId,
 | 
				
			||||||
			HeadersJSON:    resultJSON,
 | 
								HeadersJSON:        resultJSON,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			this.ErrorPage(err)
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,12 +19,12 @@ func (this *DeleteDeletingHeaderAction) RunPost(params struct {
 | 
				
			|||||||
	// 日志
 | 
						// 日志
 | 
				
			||||||
	defer this.CreateLog(oplogs.LevelInfo, "删除需要删除的请求Header,HeaderPolicyId:%d, HeaderName:%s", params.HeaderPolicyId, params.HeaderName)
 | 
						defer this.CreateLog(oplogs.LevelInfo, "删除需要删除的请求Header,HeaderPolicyId:%d, HeaderName:%s", params.HeaderPolicyId, params.HeaderName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	policyConfigResp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{HeaderPolicyId: params.HeaderPolicyId})
 | 
						policyConfigResp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{HttpHeaderPolicyId: params.HeaderPolicyId})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	policyConfigJSON := policyConfigResp.HeaderPolicyJSON
 | 
						policyConfigJSON := policyConfigResp.HttpHeaderPolicyJSON
 | 
				
			||||||
	policyConfig := &shared.HTTPHeaderPolicy{}
 | 
						policyConfig := &shared.HTTPHeaderPolicy{}
 | 
				
			||||||
	err = json.Unmarshal(policyConfigJSON, policyConfig)
 | 
						err = json.Unmarshal(policyConfigJSON, policyConfig)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -40,8 +40,8 @@ func (this *DeleteDeletingHeaderAction) RunPost(params struct {
 | 
				
			|||||||
		headerNames = append(headerNames, h)
 | 
							headerNames = append(headerNames, h)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicyDeletingHeaders(this.AdminContext(), &pb.UpdateHTTPHeaderPolicyDeletingHeadersRequest{
 | 
						_, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicyDeletingHeaders(this.AdminContext(), &pb.UpdateHTTPHeaderPolicyDeletingHeadersRequest{
 | 
				
			||||||
		HeaderPolicyId: params.HeaderPolicyId,
 | 
							HttpHeaderPolicyId: params.HeaderPolicyId,
 | 
				
			||||||
		HeaderNames:    headerNames,
 | 
							HeaderNames:        headerNames,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,7 +47,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
			this.ErrorPage(err)
 | 
								this.ErrorPage(err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		headerPolicyId := createHeaderPolicyResp.HeaderPolicyId
 | 
							var headerPolicyId = createHeaderPolicyResp.HttpHeaderPolicyId
 | 
				
			||||||
		ref := &shared.HTTPHeaderPolicyRef{
 | 
							ref := &shared.HTTPHeaderPolicyRef{
 | 
				
			||||||
			IsPrior:        false,
 | 
								IsPrior:        false,
 | 
				
			||||||
			IsOn:           true,
 | 
								IsOn:           true,
 | 
				
			||||||
@@ -74,7 +74,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
			this.ErrorPage(err)
 | 
								this.ErrorPage(err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		headerPolicyId := createHeaderPolicyResp.HeaderPolicyId
 | 
							headerPolicyId := createHeaderPolicyResp.HttpHeaderPolicyId
 | 
				
			||||||
		ref := &shared.HTTPHeaderPolicyRef{
 | 
							ref := &shared.HTTPHeaderPolicyRef{
 | 
				
			||||||
			IsPrior:        false,
 | 
								IsPrior:        false,
 | 
				
			||||||
			IsOn:           true,
 | 
								IsOn:           true,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ func init() {
 | 
				
			|||||||
			GetPost("/createDeletePopup", new(CreateDeletePopupAction)).
 | 
								GetPost("/createDeletePopup", new(CreateDeletePopupAction)).
 | 
				
			||||||
			Post("/deleteDeletingHeader", new(DeleteDeletingHeaderAction)).
 | 
								Post("/deleteDeletingHeader", new(DeleteDeletingHeaderAction)).
 | 
				
			||||||
			Post("/delete", new(DeleteAction)).
 | 
								Post("/delete", new(DeleteAction)).
 | 
				
			||||||
 | 
								GetPost("/updateCORSPopup", new(UpdateCORSPopupAction)).
 | 
				
			||||||
			EndAll()
 | 
								EndAll()
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,75 @@
 | 
				
			|||||||
 | 
					// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package headers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"encoding/json"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/actions"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type UpdateCORSPopupAction struct {
 | 
				
			||||||
 | 
						actionutils.ParentAction
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (this *UpdateCORSPopupAction) Init() {
 | 
				
			||||||
 | 
						this.Nav("", "", "")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (this *UpdateCORSPopupAction) RunGet(params struct {
 | 
				
			||||||
 | 
						HeaderPolicyId int64
 | 
				
			||||||
 | 
					}) {
 | 
				
			||||||
 | 
						this.Data["headerPolicyId"] = params.HeaderPolicyId
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						resp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{HttpHeaderPolicyId: params.HeaderPolicyId})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var headerPolicyJSON = resp.HttpHeaderPolicyJSON
 | 
				
			||||||
 | 
						var headerPolicy = &shared.HTTPHeaderPolicy{}
 | 
				
			||||||
 | 
						if len(headerPolicyJSON) > 0 {
 | 
				
			||||||
 | 
							err = json.Unmarshal(headerPolicyJSON, headerPolicy)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						this.Data["cors"] = headerPolicy.CORS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						this.Show()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (this *UpdateCORSPopupAction) RunPost(params struct {
 | 
				
			||||||
 | 
						HeaderPolicyId int64
 | 
				
			||||||
 | 
						CorsJSON       []byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Must *actions.Must
 | 
				
			||||||
 | 
						CSRF *actionutils.CSRF
 | 
				
			||||||
 | 
					}) {
 | 
				
			||||||
 | 
						var config = &shared.HTTPCORSHeaderConfig{}
 | 
				
			||||||
 | 
						err := json.Unmarshal(params.CorsJSON, config)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.Fail("配置校验失败:" + err.Error())
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = config.Init()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.Fail("配置校验失败:" + err.Error())
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicyCORS(this.AdminContext(), &pb.UpdateHTTPHeaderPolicyCORSRequest{
 | 
				
			||||||
 | 
							HttpHeaderPolicyId: params.HeaderPolicyId,
 | 
				
			||||||
 | 
							CorsJSON:           params.CorsJSON,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						this.Success()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -36,7 +36,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
			this.ErrorPage(err)
 | 
								this.ErrorPage(err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		headerPolicyId := createHeaderPolicyResp.HeaderPolicyId
 | 
							headerPolicyId := createHeaderPolicyResp.HttpHeaderPolicyId
 | 
				
			||||||
		ref := &shared.HTTPHeaderPolicyRef{
 | 
							ref := &shared.HTTPHeaderPolicyRef{
 | 
				
			||||||
			IsPrior:        false,
 | 
								IsPrior:        false,
 | 
				
			||||||
			IsOn:           true,
 | 
								IsOn:           true,
 | 
				
			||||||
@@ -59,7 +59,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
			this.ErrorPage(err)
 | 
								this.ErrorPage(err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		headerPolicyId := createHeaderPolicyResp.HeaderPolicyId
 | 
							headerPolicyId := createHeaderPolicyResp.HttpHeaderPolicyId
 | 
				
			||||||
		ref := &shared.HTTPHeaderPolicyRef{
 | 
							ref := &shared.HTTPHeaderPolicyRef{
 | 
				
			||||||
			IsPrior:        false,
 | 
								IsPrior:        false,
 | 
				
			||||||
			IsOn:           true,
 | 
								IsOn:           true,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					Vue.component("http-cors-header-config-box", {
 | 
				
			||||||
 | 
						props: ["value"],
 | 
				
			||||||
 | 
						data: function () {
 | 
				
			||||||
 | 
							let config = this.value
 | 
				
			||||||
 | 
							if (config == null) {
 | 
				
			||||||
 | 
								config = {
 | 
				
			||||||
 | 
									isOn: false,
 | 
				
			||||||
 | 
									allowMethods: [],
 | 
				
			||||||
 | 
									allowOrigin: "",
 | 
				
			||||||
 | 
									allowCredentials: false,
 | 
				
			||||||
 | 
									exposeHeaders: [],
 | 
				
			||||||
 | 
									maxAge: 0,
 | 
				
			||||||
 | 
									requestHeaders: [],
 | 
				
			||||||
 | 
									requestMethod: ""
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								config: config
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						template: `<div>
 | 
				
			||||||
 | 
						<input type="hidden" name="corsJSON" :value="JSON.stringify(config)"/>
 | 
				
			||||||
 | 
						<table class="ui table definition selectable">
 | 
				
			||||||
 | 
							<tr>
 | 
				
			||||||
 | 
								<td class="title">启用CORS自适应跨域</td>
 | 
				
			||||||
 | 
								<td>
 | 
				
			||||||
 | 
									<checkbox v-model="config.isOn"></checkbox>
 | 
				
			||||||
 | 
								</td>
 | 
				
			||||||
 | 
							</tr>
 | 
				
			||||||
 | 
						</table>
 | 
				
			||||||
 | 
						<div class="margin"></div>
 | 
				
			||||||
 | 
					</div>`
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
@@ -28,7 +28,7 @@ Vue.component("http-header-assistant", {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			this.matchedHeaders = this.allHeaders.filter(function (header) {
 | 
								this.matchedHeaders = this.allHeaders.filter(function (header) {
 | 
				
			||||||
				return teaweb.match(header, v)
 | 
									return teaweb.match(header, v)
 | 
				
			||||||
			}).slice(0, 5)
 | 
								}).slice(0, 10)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
@@ -38,7 +38,7 @@ Vue.component("http-header-assistant", {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	template: `<span v-if="selectedHeaderName.length == 0">
 | 
						template: `<span v-if="selectedHeaderName.length == 0">
 | 
				
			||||||
	<a href="" v-for="header in matchedHeaders" class="ui label basic tiny blue" style="font-weight: normal" @click.prevent="select(header)">{{header}}</a>
 | 
						<a href="" v-for="header in matchedHeaders" class="ui label basic tiny blue" style="font-weight: normal; margin-bottom: 0.3em" @click.prevent="select(header)">{{header}}</a>
 | 
				
			||||||
	<span v-if="matchedHeaders.length > 0">   </span>
 | 
						<span v-if="matchedHeaders.length > 0">   </span>
 | 
				
			||||||
</span>`
 | 
					</span>`
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
@@ -54,6 +54,13 @@ Vue.component("http-header-policy-box", {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							let responseCORS = {
 | 
				
			||||||
 | 
								isOn: false
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (responsePolicy.cors != null) {
 | 
				
			||||||
 | 
								responseCORS = responsePolicy.cors
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			type: type,
 | 
								type: type,
 | 
				
			||||||
			typeName: (type == "request") ? "请求" : "响应",
 | 
								typeName: (type == "request") ? "请求" : "响应",
 | 
				
			||||||
@@ -62,7 +69,8 @@ Vue.component("http-header-policy-box", {
 | 
				
			|||||||
			requestSettingHeaders: requestSettingHeaders,
 | 
								requestSettingHeaders: requestSettingHeaders,
 | 
				
			||||||
			requestDeletingHeaders: requestDeletingHeaders,
 | 
								requestDeletingHeaders: requestDeletingHeaders,
 | 
				
			||||||
			responseSettingHeaders: responseSettingHeaders,
 | 
								responseSettingHeaders: responseSettingHeaders,
 | 
				
			||||||
			responseDeletingHeaders: responseDeletingHeaders
 | 
								responseDeletingHeaders: responseDeletingHeaders,
 | 
				
			||||||
 | 
								responseCORS: responseCORS
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
@@ -114,6 +122,13 @@ Vue.component("http-header-policy-box", {
 | 
				
			|||||||
						.refresh()
 | 
											.refresh()
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							updateCORS: function (policyId) {
 | 
				
			||||||
 | 
								teaweb.popup("/servers/server/settings/headers/updateCORSPopup?" + this.vParams + "&headerPolicyId=" + policyId + "&type=" + this.type, {
 | 
				
			||||||
 | 
									callback: function () {
 | 
				
			||||||
 | 
										teaweb.successRefresh("保存成功")
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	template: `<div>
 | 
						template: `<div>
 | 
				
			||||||
@@ -141,7 +156,7 @@ Vue.component("http-header-policy-box", {
 | 
				
			|||||||
        	<warning-message>由于已经在当前<a :href="vGroupSettingUrl + '#request'">服务分组</a>中进行了对应的配置,在这里的配置将不会生效。</warning-message>
 | 
					        	<warning-message>由于已经在当前<a :href="vGroupSettingUrl + '#request'">服务分组</a>中进行了对应的配置,在这里的配置将不会生效。</warning-message>
 | 
				
			||||||
    	</div>
 | 
					    	</div>
 | 
				
			||||||
    	<div :class="{'opacity-mask': vHasGroupRequestConfig}">
 | 
					    	<div :class="{'opacity-mask': vHasGroupRequestConfig}">
 | 
				
			||||||
		<h3>设置请求Header <a href="" @click.prevent="addSettingHeader(vRequestHeaderPolicy.id)">[添加新Header]</a></h3>
 | 
							<h4>设置请求Header <a href="" @click.prevent="addSettingHeader(vRequestHeaderPolicy.id)">[添加新Header]</a></h4>
 | 
				
			||||||
			<p class="comment" v-if="requestSettingHeaders.length == 0">暂时还没有Header。</p>
 | 
								<p class="comment" v-if="requestSettingHeaders.length == 0">暂时还没有Header。</p>
 | 
				
			||||||
			<table class="ui table selectable celled" v-if="requestSettingHeaders.length > 0">
 | 
								<table class="ui table selectable celled" v-if="requestSettingHeaders.length > 0">
 | 
				
			||||||
				<thead>
 | 
									<thead>
 | 
				
			||||||
@@ -151,35 +166,39 @@ Vue.component("http-header-policy-box", {
 | 
				
			|||||||
						<th class="two op">操作</th>
 | 
											<th class="two op">操作</th>
 | 
				
			||||||
					</tr>
 | 
										</tr>
 | 
				
			||||||
				</thead>
 | 
									</thead>
 | 
				
			||||||
				<tr v-for="header in requestSettingHeaders">
 | 
									<tbody v-for="header in requestSettingHeaders">
 | 
				
			||||||
					<td class="five wide">
 | 
										<tr>
 | 
				
			||||||
						{{header.name}}
 | 
											<td class="five wide">
 | 
				
			||||||
						<div>
 | 
												{{header.name}}
 | 
				
			||||||
							<span v-if="header.status != null && header.status.codes != null && !header.status.always"><grey-label v-for="code in header.status.codes" :key="code">{{code}}</grey-label></span>
 | 
												<div>
 | 
				
			||||||
							<span v-if="header.methods != null && header.methods.length > 0"><grey-label v-for="method in header.methods" :key="method">{{method}}</grey-label></span>
 | 
													<span v-if="header.status != null && header.status.codes != null && !header.status.always"><grey-label v-for="code in header.status.codes" :key="code">{{code}}</grey-label></span>
 | 
				
			||||||
							<span v-if="header.domains != null && header.domains.length > 0"><grey-label v-for="domain in header.domains" :key="domain">{{domain}}</grey-label></span>
 | 
													<span v-if="header.methods != null && header.methods.length > 0"><grey-label v-for="method in header.methods" :key="method">{{method}}</grey-label></span>
 | 
				
			||||||
							<grey-label v-if="header.shouldAppend">附加</grey-label>
 | 
													<span v-if="header.domains != null && header.domains.length > 0"><grey-label v-for="domain in header.domains" :key="domain">{{domain}}</grey-label></span>
 | 
				
			||||||
							<grey-label v-if="header.disableRedirect">跳转禁用</grey-label>
 | 
													<grey-label v-if="header.shouldAppend">附加</grey-label>
 | 
				
			||||||
							<grey-label v-if="header.shouldReplace && header.replaceValues != null && header.replaceValues.length > 0">替换</grey-label>
 | 
													<grey-label v-if="header.disableRedirect">跳转禁用</grey-label>
 | 
				
			||||||
						</div>
 | 
													<grey-label v-if="header.shouldReplace && header.replaceValues != null && header.replaceValues.length > 0">替换</grey-label>
 | 
				
			||||||
					</td>
 | 
												</div>
 | 
				
			||||||
					<td>{{header.value}}</td>
 | 
											</td>
 | 
				
			||||||
					<td><a href="" @click.prevent="updateSettingPopup(vRequestHeaderPolicy.id, header.id)">修改</a>   <a href="" @click.prevent="deleteHeader(vRequestHeaderPolicy.id, 'setHeader', header.id)">删除</a> </td>
 | 
											<td>{{header.value}}</td>
 | 
				
			||||||
				</tr>
 | 
											<td><a href="" @click.prevent="updateSettingPopup(vRequestHeaderPolicy.id, header.id)">修改</a>   <a href="" @click.prevent="deleteHeader(vRequestHeaderPolicy.id, 'setHeader', header.id)">删除</a> </td>
 | 
				
			||||||
 | 
										</tr>
 | 
				
			||||||
 | 
									</tbody>
 | 
				
			||||||
			</table>
 | 
								</table>
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			<h3>删除请求Header</h3>
 | 
								<h4>删除请求Header</h4>
 | 
				
			||||||
			<p class="comment">这里可以设置需要从请求中删除的Header。</p>
 | 
								<p class="comment">这里可以设置需要从请求中删除的Header。</p>
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			<table class="ui table definition selectable">
 | 
								<table class="ui table definition selectable">
 | 
				
			||||||
				<td class="title">需要删除的Header</td>
 | 
									<tr>
 | 
				
			||||||
				<td>
 | 
										<td class="title">需要删除的Header</td>
 | 
				
			||||||
					<div v-if="requestDeletingHeaders.length > 0">
 | 
										<td>
 | 
				
			||||||
						<div class="ui label small basic" v-for="headerName in requestDeletingHeaders">{{headerName}} <a href=""><i class="icon remove" title="删除" @click.prevent="deleteDeletingHeader(vRequestHeaderPolicy.id, headerName)"></i></a> </div>
 | 
											<div v-if="requestDeletingHeaders.length > 0">
 | 
				
			||||||
						<div class="ui divider" ></div>
 | 
												<div class="ui label small basic" v-for="headerName in requestDeletingHeaders">{{headerName}} <a href=""><i class="icon remove" title="删除" @click.prevent="deleteDeletingHeader(vRequestHeaderPolicy.id, headerName)"></i></a> </div>
 | 
				
			||||||
					</div>
 | 
												<div class="ui divider" ></div>
 | 
				
			||||||
					<button class="ui button small" type="button" @click.prevent="addDeletingHeader(vRequestHeaderPolicy.id, 'request')">+</button>
 | 
											</div>
 | 
				
			||||||
				</td>
 | 
											<button class="ui button small" type="button" @click.prevent="addDeletingHeader(vRequestHeaderPolicy.id, 'request')">+</button>
 | 
				
			||||||
 | 
										</td>
 | 
				
			||||||
 | 
									</tr>
 | 
				
			||||||
			</table>
 | 
								</table>
 | 
				
			||||||
		</div>			
 | 
							</div>			
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
@@ -199,7 +218,7 @@ Vue.component("http-header-policy-box", {
 | 
				
			|||||||
        	<warning-message>由于已经在当前<a :href="vGroupSettingUrl + '#response'">服务分组</a>中进行了对应的配置,在这里的配置将不会生效。</warning-message>
 | 
					        	<warning-message>由于已经在当前<a :href="vGroupSettingUrl + '#response'">服务分组</a>中进行了对应的配置,在这里的配置将不会生效。</warning-message>
 | 
				
			||||||
    	</div>
 | 
					    	</div>
 | 
				
			||||||
    	<div :class="{'opacity-mask': vHasGroupResponseConfig}">
 | 
					    	<div :class="{'opacity-mask': vHasGroupResponseConfig}">
 | 
				
			||||||
			<h3>设置响应Header <a href="" @click.prevent="addSettingHeader(vResponseHeaderPolicy.id)">[添加新Header]</a></h3>
 | 
								<h4>设置响应Header <a href="" @click.prevent="addSettingHeader(vResponseHeaderPolicy.id)">[添加新Header]</a></h4>
 | 
				
			||||||
			<p class="comment" style="margin-top: 0; padding-top: 0">将会覆盖已有的同名Header。</p>
 | 
								<p class="comment" style="margin-top: 0; padding-top: 0">将会覆盖已有的同名Header。</p>
 | 
				
			||||||
			<p class="comment" v-if="responseSettingHeaders.length == 0">暂时还没有Header。</p>
 | 
								<p class="comment" v-if="responseSettingHeaders.length == 0">暂时还没有Header。</p>
 | 
				
			||||||
			<table class="ui table selectable celled" v-if="responseSettingHeaders.length > 0">
 | 
								<table class="ui table selectable celled" v-if="responseSettingHeaders.length > 0">
 | 
				
			||||||
@@ -210,37 +229,52 @@ Vue.component("http-header-policy-box", {
 | 
				
			|||||||
						<th class="two op">操作</th>
 | 
											<th class="two op">操作</th>
 | 
				
			||||||
					</tr>
 | 
										</tr>
 | 
				
			||||||
				</thead>
 | 
									</thead>
 | 
				
			||||||
				<tr v-for="header in responseSettingHeaders">
 | 
									<tbody v-for="header in responseSettingHeaders">
 | 
				
			||||||
					<td class="five wide">
 | 
										<tr>
 | 
				
			||||||
						{{header.name}}
 | 
											<td class="five wide">
 | 
				
			||||||
						<div>
 | 
												{{header.name}}
 | 
				
			||||||
							<span v-if="header.status != null && header.status.codes != null && !header.status.always"><grey-label v-for="code in header.status.codes" :key="code">{{code}}</grey-label></span>
 | 
												<div>
 | 
				
			||||||
							<span v-if="header.methods != null && header.methods.length > 0"><grey-label v-for="method in header.methods" :key="method">{{method}}</grey-label></span>
 | 
													<span v-if="header.status != null && header.status.codes != null && !header.status.always"><grey-label v-for="code in header.status.codes" :key="code">{{code}}</grey-label></span>
 | 
				
			||||||
							<span v-if="header.domains != null && header.domains.length > 0"><grey-label v-for="domain in header.domains" :key="domain">{{domain}}</grey-label></span>
 | 
													<span v-if="header.methods != null && header.methods.length > 0"><grey-label v-for="method in header.methods" :key="method">{{method}}</grey-label></span>
 | 
				
			||||||
							<grey-label v-if="header.shouldAppend">附加</grey-label>
 | 
													<span v-if="header.domains != null && header.domains.length > 0"><grey-label v-for="domain in header.domains" :key="domain">{{domain}}</grey-label></span>
 | 
				
			||||||
							<grey-label v-if="header.disableRedirect">跳转禁用</grey-label>
 | 
													<grey-label v-if="header.shouldAppend">附加</grey-label>
 | 
				
			||||||
							<grey-label v-if="header.shouldReplace && header.replaceValues != null && header.replaceValues.length > 0">替换</grey-label>
 | 
													<grey-label v-if="header.disableRedirect">跳转禁用</grey-label>
 | 
				
			||||||
						</div>
 | 
													<grey-label v-if="header.shouldReplace && header.replaceValues != null && header.replaceValues.length > 0">替换</grey-label>
 | 
				
			||||||
					</td>
 | 
												</div>
 | 
				
			||||||
					<td>{{header.value}}</td>
 | 
											</td>
 | 
				
			||||||
					<td><a href="" @click.prevent="updateSettingPopup(vResponseHeaderPolicy.id, header.id)">修改</a>   <a href="" @click.prevent="deleteHeader(vResponseHeaderPolicy.id, 'setHeader', header.id)">删除</a> </td>
 | 
											<td>{{header.value}}</td>
 | 
				
			||||||
				</tr>
 | 
											<td><a href="" @click.prevent="updateSettingPopup(vResponseHeaderPolicy.id, header.id)">修改</a>   <a href="" @click.prevent="deleteHeader(vResponseHeaderPolicy.id, 'setHeader', header.id)">删除</a> </td>
 | 
				
			||||||
 | 
										</tr>
 | 
				
			||||||
 | 
									</tbody>
 | 
				
			||||||
			</table>
 | 
								</table>
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			<h3>删除响应Header</h3>
 | 
								<h4>删除响应Header</h4>
 | 
				
			||||||
			<p class="comment">这里可以设置需要从响应中删除的Header。</p>
 | 
								<p class="comment">这里可以设置需要从响应中删除的Header。</p>
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			<table class="ui table definition selectable">
 | 
								<table class="ui table definition selectable">
 | 
				
			||||||
				<td class="title">需要删除的Header</td>
 | 
									<tr>
 | 
				
			||||||
				<td>
 | 
										<td class="title">需要删除的Header</td>
 | 
				
			||||||
					<div v-if="responseDeletingHeaders.length > 0">
 | 
										<td>
 | 
				
			||||||
						<div class="ui label small basic" v-for="headerName in responseDeletingHeaders">{{headerName}} <a href=""><i class="icon remove" title="删除" @click.prevent="deleteDeletingHeader(vResponseHeaderPolicy.id, headerName)"></i></a> </div>
 | 
											<div v-if="responseDeletingHeaders.length > 0">
 | 
				
			||||||
						<div class="ui divider" ></div>
 | 
												<div class="ui label small basic" v-for="headerName in responseDeletingHeaders">{{headerName}} <a href=""><i class="icon remove" title="删除" @click.prevent="deleteDeletingHeader(vResponseHeaderPolicy.id, headerName)"></i></a> </div>
 | 
				
			||||||
					</div>
 | 
												<div class="ui divider" ></div>
 | 
				
			||||||
					<button class="ui button small" type="button" @click.prevent="addDeletingHeader(vResponseHeaderPolicy.id, 'response')">+</button>
 | 
											</div>
 | 
				
			||||||
				</td>
 | 
											<button class="ui button small" type="button" @click.prevent="addDeletingHeader(vResponseHeaderPolicy.id, 'response')">+</button>
 | 
				
			||||||
 | 
										</td>
 | 
				
			||||||
 | 
									</tr>
 | 
				
			||||||
			</table>
 | 
								</table>
 | 
				
			||||||
		</div>			
 | 
								
 | 
				
			||||||
 | 
								<h4>CORS跨域设置</h4>
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								<table class="ui table definition selectable">
 | 
				
			||||||
 | 
									<tr>
 | 
				
			||||||
 | 
										<td class="title">CORS自适应跨域</td>
 | 
				
			||||||
 | 
										<td>
 | 
				
			||||||
 | 
											<span v-if="responseCORS.isOn" class="green">已启用</span><span class="disabled" v-else="">未启用</span>   <a href="" @click.prevent="updateCORS(vResponseHeaderPolicy.id)">[修改]</a>
 | 
				
			||||||
 | 
										</td>
 | 
				
			||||||
 | 
									</tr>
 | 
				
			||||||
 | 
								</table>
 | 
				
			||||||
 | 
							</div>		
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<div class="margin"></div>
 | 
						<div class="margin"></div>
 | 
				
			||||||
</div>`
 | 
					</div>`
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,12 @@
 | 
				
			|||||||
				<td class="title">集群名称 *</td>
 | 
									<td class="title">集群名称 *</td>
 | 
				
			||||||
				<td><input type="text" name="name" maxlength="50" ref="focus" v-model="cluster.name"/></td>
 | 
									<td><input type="text" name="name" maxlength="50" ref="focus" v-model="cluster.name"/></td>
 | 
				
			||||||
			</tr>
 | 
								</tr>
 | 
				
			||||||
 | 
					            <tr v-if="cluster.domainName.length > 0">
 | 
				
			||||||
 | 
					                <td>域名</td>
 | 
				
			||||||
 | 
					                <td>
 | 
				
			||||||
 | 
					                    {{cluster.domainName}}<link-icon :href="'/clusters/cluster/settings/dns?clusterId=' + cluster.id"></link-icon>
 | 
				
			||||||
 | 
					                </td>
 | 
				
			||||||
 | 
					            </tr>
 | 
				
			||||||
			<tr>
 | 
								<tr>
 | 
				
			||||||
				<td>默认SSH认证</td>
 | 
									<td>默认SSH认证</td>
 | 
				
			||||||
				<td>
 | 
									<td>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					{$layout "layout_popup"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<h3>CORS跨域设置</h3>
 | 
				
			||||||
 | 
					<form class="ui form" data-tea-action="$" data-tea-success="success">
 | 
				
			||||||
 | 
					    <csrf-token></csrf-token>
 | 
				
			||||||
 | 
					    <input type="hidden" name="headerPolicyId" :value="headerPolicyId"/>
 | 
				
			||||||
 | 
					    <http-cors-header-config-box v-model="cors"></http-cors-header-config-box>
 | 
				
			||||||
 | 
					    <submit-btn></submit-btn>
 | 
				
			||||||
 | 
					</form>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user