mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 13:10:26 +08:00 
			
		
		
		
	WAF规则集列表中参数显示中文
This commit is contained in:
		@@ -14,6 +14,7 @@ import (
 | 
				
			|||||||
	"github.com/iwind/TeaGo/Tea"
 | 
						"github.com/iwind/TeaGo/Tea"
 | 
				
			||||||
	"github.com/iwind/TeaGo/files"
 | 
						"github.com/iwind/TeaGo/files"
 | 
				
			||||||
	"github.com/iwind/TeaGo/logs"
 | 
						"github.com/iwind/TeaGo/logs"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/maps"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
@@ -116,6 +117,23 @@ func generateComponentsJSFile() error {
 | 
				
			|||||||
		buffer.Write([]byte{';', '\n', '\n'})
 | 
							buffer.Write([]byte{';', '\n', '\n'})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// WAF checkpoints
 | 
				
			||||||
 | 
						var wafCheckpointsMaps = []maps.Map{}
 | 
				
			||||||
 | 
						for _, checkpoint := range firewallconfigs.AllCheckpoints {
 | 
				
			||||||
 | 
							wafCheckpointsMaps = append(wafCheckpointsMaps, maps.Map{
 | 
				
			||||||
 | 
								"name":   checkpoint.Name,
 | 
				
			||||||
 | 
								"prefix": checkpoint.Prefix,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						wafCheckpointsJSON, err := json.Marshal(wafCheckpointsMaps)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							logs.Println("ComponentsAction marshal waf rule checkpoints failed: " + err.Error())
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							buffer.WriteString("window.WAF_RULE_CHECKPOINTS = ")
 | 
				
			||||||
 | 
							buffer.Write(wafCheckpointsJSON)
 | 
				
			||||||
 | 
							buffer.Write([]byte{';', '\n', '\n'})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// WAF操作符
 | 
						// WAF操作符
 | 
				
			||||||
	wafOperatorsJSON, err := json.Marshal(firewallconfigs.AllRuleOperators)
 | 
						wafOperatorsJSON, err := json.Marshal(firewallconfigs.AllRuleOperators)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,7 @@ import (
 | 
				
			|||||||
	"github.com/iwind/TeaGo/actions"
 | 
						"github.com/iwind/TeaGo/actions"
 | 
				
			||||||
	"github.com/iwind/TeaGo/files"
 | 
						"github.com/iwind/TeaGo/files"
 | 
				
			||||||
	"github.com/iwind/TeaGo/logs"
 | 
						"github.com/iwind/TeaGo/logs"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/maps"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -124,6 +125,23 @@ func (this *ComponentsAction) RunGet(params struct{}) {
 | 
				
			|||||||
		buffer.Write([]byte{';', '\n', '\n'})
 | 
							buffer.Write([]byte{';', '\n', '\n'})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// WAF checkpoints
 | 
				
			||||||
 | 
						var wafCheckpointsMaps = []maps.Map{}
 | 
				
			||||||
 | 
						for _, checkpoint := range firewallconfigs.AllCheckpoints {
 | 
				
			||||||
 | 
							wafCheckpointsMaps = append(wafCheckpointsMaps, maps.Map{
 | 
				
			||||||
 | 
								"name":   checkpoint.Name,
 | 
				
			||||||
 | 
								"prefix": checkpoint.Prefix,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						wafCheckpointsJSON, err := json.Marshal(wafCheckpointsMaps)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							logs.Println("ComponentsAction marshal waf rule checkpoints failed: " + err.Error())
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							buffer.WriteString("window.WAF_RULE_CHECKPOINTS = ")
 | 
				
			||||||
 | 
							buffer.Write(wafCheckpointsJSON)
 | 
				
			||||||
 | 
							buffer.Write([]byte{';', '\n', '\n'})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// WAF操作符
 | 
						// WAF操作符
 | 
				
			||||||
	wafOperatorsJSON, err := json.Marshal(firewallconfigs.AllRuleOperators)
 | 
						wafOperatorsJSON, err := json.Marshal(firewallconfigs.AllRuleOperators)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -10,6 +10,17 @@ Vue.component("http-firewall-rule-label", {
 | 
				
			|||||||
		showErr: function (err) {
 | 
							showErr: function (err) {
 | 
				
			||||||
			teaweb.popupTip("规则校验错误,请修正:<span class=\"red\">"  + teaweb.encodeHTML(err) + "</span>")
 | 
								teaweb.popupTip("规则校验错误,请修正:<span class=\"red\">"  + teaweb.encodeHTML(err) + "</span>")
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							calculateParamName: function (param) {
 | 
				
			||||||
 | 
								let paramName = ""
 | 
				
			||||||
 | 
								if (param != null) {
 | 
				
			||||||
 | 
									window.WAF_RULE_CHECKPOINTS.forEach(function (checkpoint) {
 | 
				
			||||||
 | 
										if (param == "${" + checkpoint.prefix + "}" || param.startsWith("${" + checkpoint.prefix + ".")) {
 | 
				
			||||||
 | 
											paramName = checkpoint.name
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return paramName
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		operatorName: function (operatorCode) {
 | 
							operatorName: function (operatorCode) {
 | 
				
			||||||
			let operatorName = operatorCode
 | 
								let operatorName = operatorCode
 | 
				
			||||||
			if (typeof (window.WAF_RULE_OPERATORS) != null) {
 | 
								if (typeof (window.WAF_RULE_OPERATORS) != null) {
 | 
				
			||||||
@@ -39,8 +50,8 @@ Vue.component("http-firewall-rule-label", {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	template: `<div>
 | 
						template: `<div>
 | 
				
			||||||
	<div class="ui label tiny basic" style="line-height: 1.5">
 | 
						<div class="ui label small basic" style="line-height: 1.5">
 | 
				
			||||||
		{{rule.name}}[{{rule.param}}] 
 | 
							{{rule.name}} <span>{{calculateParamName(rule.param)}}<span class="small grey"> {{rule.param}}</span></span> 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<!-- cc2 -->
 | 
							<!-- cc2 -->
 | 
				
			||||||
		<span v-if="rule.param == '\${cc2}'">
 | 
							<span v-if="rule.param == '\${cc2}'">
 | 
				
			||||||
@@ -55,7 +66,7 @@ Vue.component("http-firewall-rule-label", {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		<span v-else>
 | 
							<span v-else>
 | 
				
			||||||
			<span v-if="rule.paramFilters != null && rule.paramFilters.length > 0" v-for="paramFilter in rule.paramFilters"> | {{paramFilter.code}}</span> 
 | 
								<span v-if="rule.paramFilters != null && rule.paramFilters.length > 0" v-for="paramFilter in rule.paramFilters"> | {{paramFilter.code}}</span> 
 | 
				
			||||||
		<span :class="{dash:!rule.isComposed && rule.isCaseInsensitive}" :title="(!rule.isComposed && rule.isCaseInsensitive) ? '大小写不敏感':''">{{operatorName(rule.operator)}}</span> 
 | 
							<span :class="{dash:!rule.isComposed && rule.isCaseInsensitive}" :title="(!rule.isComposed && rule.isCaseInsensitive) ? '大小写不敏感':''"><{{operatorName(rule.operator)}}></span> 
 | 
				
			||||||
			<span v-if="!isEmptyString(rule.value)">{{rule.value}}</span>
 | 
								<span v-if="!isEmptyString(rule.value)">{{rule.value}}</span>
 | 
				
			||||||
			<span v-else-if="operatorDataType(rule.operator) != 'none'" class="disabled" style="font-weight: normal" title="空字符串">[空]</span>
 | 
								<span v-else-if="operatorDataType(rule.operator) != 'none'" class="disabled" style="font-weight: normal" title="空字符串">[空]</span>
 | 
				
			||||||
		</span>
 | 
							</span>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -60,6 +60,17 @@ Vue.component("http-firewall-rules-box", {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			return operatorDataType
 | 
								return operatorDataType
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							calculateParamName: function (param) {
 | 
				
			||||||
 | 
								let paramName = ""
 | 
				
			||||||
 | 
								if (param != null) {
 | 
				
			||||||
 | 
									window.WAF_RULE_CHECKPOINTS.forEach(function (checkpoint) {
 | 
				
			||||||
 | 
										if (param == "${" + checkpoint.prefix + "}" || param.startsWith("${" + checkpoint.prefix + ".")) {
 | 
				
			||||||
 | 
											paramName = checkpoint.name
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return paramName
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		isEmptyString: function (v) {
 | 
							isEmptyString: function (v) {
 | 
				
			||||||
			return typeof v == "string" && v.length == 0
 | 
								return typeof v == "string" && v.length == 0
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -68,7 +79,7 @@ Vue.component("http-firewall-rules-box", {
 | 
				
			|||||||
		<input type="hidden" name="rulesJSON" :value="JSON.stringify(rules)"/>
 | 
							<input type="hidden" name="rulesJSON" :value="JSON.stringify(rules)"/>
 | 
				
			||||||
		<div v-if="rules.length > 0">
 | 
							<div v-if="rules.length > 0">
 | 
				
			||||||
			<div v-for="(rule, index) in rules" class="ui label small basic" style="margin-bottom: 0.5em; line-height: 1.5">
 | 
								<div v-for="(rule, index) in rules" class="ui label small basic" style="margin-bottom: 0.5em; line-height: 1.5">
 | 
				
			||||||
				{{rule.name}}[{{rule.param}}] 
 | 
									{{rule.name}}<span>{{calculateParamName(rule.param)}}<span class="small grey"> {{rule.param}}</span></span> 
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
				<!-- cc2 -->
 | 
									<!-- cc2 -->
 | 
				
			||||||
				<span v-if="rule.param == '\${cc2}'">
 | 
									<span v-if="rule.param == '\${cc2}'">
 | 
				
			||||||
@@ -82,7 +93,7 @@ Vue.component("http-firewall-rules-box", {
 | 
				
			|||||||
				</span>
 | 
									</span>
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
				<span v-else>
 | 
									<span v-else>
 | 
				
			||||||
					<span v-if="rule.paramFilters != null && rule.paramFilters.length > 0" v-for="paramFilter in rule.paramFilters"> | {{paramFilter.code}}</span> <span :class="{dash:(!rule.isComposed && rule.isCaseInsensitive)}" :title="(!rule.isComposed && rule.isCaseInsensitive) ? '大小写不敏感':''">{{operatorName(rule.operator)}}</span> 
 | 
										<span v-if="rule.paramFilters != null && rule.paramFilters.length > 0" v-for="paramFilter in rule.paramFilters"> | {{paramFilter.code}}</span> <span :class="{dash:(!rule.isComposed && rule.isCaseInsensitive)}" :title="(!rule.isComposed && rule.isCaseInsensitive) ? '大小写不敏感':''"><{{operatorName(rule.operator)}}></span> 
 | 
				
			||||||
						<span v-if="!isEmptyString(rule.value)">{{rule.value}}</span>
 | 
											<span v-if="!isEmptyString(rule.value)">{{rule.value}}</span>
 | 
				
			||||||
						<span v-else-if="operatorDataType(rule.operator) != 'none'" class="disabled" style="font-weight: normal" title="空字符串">[空]</span>
 | 
											<span v-else-if="operatorDataType(rule.operator) != 'none'" class="disabled" style="font-weight: normal" title="空字符串">[空]</span>
 | 
				
			||||||
				</span>
 | 
									</span>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user