mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-04 05:00:25 +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