diff --git a/localserver.go b/localserver.go
index de1eaba..779a6a1 100644
--- a/localserver.go
+++ b/localserver.go
@@ -396,19 +396,27 @@ func StartLocalServer() {
})
return
}
+
var rule_code = uuid.NewV4().String()
rule_info.RuleBase.RuleName = strings.Replace(rule_code, "-", "", -1)
+
+ var ruleContent = rule_tool.GenRuleInfo(rule_info, rulename)
+ if waf_rule_add_req.IsManualRule == 1 {
+ ruleContent = rule_info.RuleContent
+ }
+
var waf_rule = &model.Rules{
TenantId: global.GWAF_TENANT_ID,
HostCode: rule_info.RuleBase.RuleDomainCode, //网站CODE
RuleCode: rule_code,
RuleName: rulename,
- RuleContent: rule_tool.GenRuleInfo(rule_info, rulename),
+ RuleContent: ruleContent,
RuleContentJSON: waf_rule_add_req.RuleJson, //TODO 后续考虑是否应该再从结构转一次
RuleVersionName: "初版",
RuleVersion: 1,
UserCode: global.GWAF_USER_CODE,
IsPublicRule: 0,
+ IsManualRule: waf_rule_add_req.IsManualRule,
RuleStatus: 1,
}
//waf_host_add_req.USER_CODE =
@@ -436,8 +444,8 @@ func StartLocalServer() {
err := c.ShouldBind(&waf_rule_edit_req)
if err == nil {
- var rule_tool = model.RuleTool{}
- rule_info, err := rule_tool.LoadRule(waf_rule_edit_req.RuleJson)
+ var ruleTool = model.RuleTool{}
+ ruleInfo, err := ruleTool.LoadRule(waf_rule_edit_req.RuleJson)
if err != nil {
c.JSON(http.StatusOK, response.Response{
Code: -1,
@@ -445,11 +453,11 @@ func StartLocalServer() {
})
return
}
- var rule_name = rule_info.RuleBase.RuleName //中文名
+ var ruleName = ruleInfo.RuleBase.RuleName //中文名
var rule model.Rules
global.GWAF_LOCAL_DB.Debug().Where("rule_name = ? and host_code= ?",
- rule_name, rule_info.RuleBase.RuleDomainCode).Find(&rule)
+ ruleName, ruleInfo.RuleBase.RuleDomainCode).Find(&rule)
if rule.Id != 0 && rule.RuleCode != waf_rule_edit_req.CODE {
c.JSON(http.StatusOK, response.Response{
@@ -461,17 +469,21 @@ func StartLocalServer() {
global.GWAF_LOCAL_DB.Debug().Where("rule_code=?", waf_rule_edit_req.CODE).Find(&rule)
- rule_info.RuleBase.RuleName = strings.Replace(rule.RuleCode, "-", "", -1)
-
+ ruleInfo.RuleBase.RuleName = strings.Replace(rule.RuleCode, "-", "", -1)
+ var ruleContent = ruleTool.GenRuleInfo(ruleInfo, ruleName)
+ if waf_rule_edit_req.IsManualRule == 1 {
+ ruleContent = ruleInfo.RuleContent
+ }
ruleMap := map[string]interface{}{
- "HostCode": rule_info.RuleBase.RuleDomainCode, //TODO 注意字典名称
- "RuleName": rule_name,
- "RuleContent": rule_tool.GenRuleInfo(rule_info, rule_name),
+ "HostCode": ruleInfo.RuleBase.RuleDomainCode, //TODO 注意字典名称
+ "RuleName": ruleName,
+ "RuleContent": ruleContent,
"RuleContentJSON": waf_rule_edit_req.RuleJson, //TODO 后续考虑是否应该再从结构转一次
"RuleVersionName": "初版",
"RuleVersion": rule.RuleVersion + 1,
"User_code": global.GWAF_USER_CODE,
"IsPublicRule": 0,
+ "IsManualRule": waf_rule_edit_req.IsManualRule,
"RuleStatus": "1",
//"UPDATE_TIME": time.Now(),
}
diff --git a/localwaf/package.json b/localwaf/package.json
index c7bf9b0..b8162c6 100644
--- a/localwaf/package.json
+++ b/localwaf/package.json
@@ -24,11 +24,12 @@
"nprogress": "^0.2.0",
"qrcode.vue": "^1.7.0",
"tdesign-icons-vue": "^0.1.4",
- "tdesign-vue": "^0.46.0",
+ "tdesign-vue": "^0.49.0",
"tvision-color": "~1.4.0",
"typescript": "^4.2.4",
"vue": "~2.6.14",
"vue-clipboard2": "^0.3.1",
+ "vue-codemirror": "^4.0.6",
"vue-router": "^3.5.1",
"vuex": "^3.6.2",
"vuex-router-sync": "^5.0.0"
@@ -57,6 +58,7 @@
"stylelint-order": "~4.1.0",
"vite": "^2.7.10",
"vite-plugin-mock": "^2.3.0",
+ "vite-plugin-require-transform": "^1.0.4",
"vite-plugin-theme": "^0.8.1",
"vite-plugin-vue2": "^2.0.1",
"vite-plugin-vue2-svg": "~0.3.0",
@@ -86,4 +88,4 @@
]
},
"description": "localwaf"
-}
\ No newline at end of file
+}
diff --git a/localwaf/src/bus/bus.ts b/localwaf/src/bus/bus.ts
new file mode 100644
index 0000000..00026aa
--- /dev/null
+++ b/localwaf/src/bus/bus.ts
@@ -0,0 +1,4 @@
+// bus.js
+import Vue from 'vue';
+const bus = new Vue();
+export default bus
\ No newline at end of file
diff --git a/localwaf/src/components/write-rule/index.vue b/localwaf/src/components/write-rule/index.vue
new file mode 100644
index 0000000..95d32bc
--- /dev/null
+++ b/localwaf/src/components/write-rule/index.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/localwaf/src/main.jsx b/localwaf/src/main.jsx
index 321d8af..d4c1dc9 100644
--- a/localwaf/src/main.jsx
+++ b/localwaf/src/main.jsx
@@ -8,6 +8,7 @@ import App from './App.vue';
import router from './router';
import zhConfig from 'tdesign-vue/es/locale/zh_CN';
// import enConfig from 'tdesign-vue/es/locale/en_US'; // 英文多语言配置
+import bus from './bus/bus'
import 'tdesign-vue/es/style/index.css';
import '@/style/index.less';
@@ -18,6 +19,7 @@ import store from './store';
Vue.use(VueRouter);
Vue.use(TDesign);
Vue.use(VueClipboard);
+Vue.prototype.$bus = bus
Vue.component('t-page-header');
@@ -41,7 +43,7 @@ new Vue({
// eslint-disable-next-line @typescript-eslint/no-unused-vars
render: (h) => (
- {/* 可以通过config-provider提供全局(多语言、全局属性)配置,如
+ {/* 可以通过config-provider提供全局(多语言、全局属性)配置,如
*/}
diff --git a/localwaf/src/pages/waf-host/rule/edit/index.vue b/localwaf/src/pages/waf-host/rule/edit/index.vue
index eb22bf9..5c9c462 100644
--- a/localwaf/src/pages/waf-host/rule/edit/index.vue
+++ b/localwaf/src/pages/waf-host/rule/edit/index.vue
@@ -1,5 +1,6 @@
+
@@ -12,10 +13,21 @@
+
+
+
+ {{ item.label }}
+
+
+
-
+
+
+
新建
@@ -242,6 +254,19 @@
+
+
+
+
+
+
+
+
+ @edtinput="edtinput"
+
+ >
+
+
@@ -253,7 +278,7 @@
-
+
测试获取数据
@@ -265,14 +290,27 @@
RULE,RULE_RELATION_DETAIL,RULE_DO_ASSIGNMENT,RULE_DO_METHOD,RULE_DO_METHOD_PARM
} from '@/service/service-rule';
import { copyObj } from '@/utils/usuallytool';
+ import writeRule from "@/components/write-rule/index.vue";
+
+
export default {
name: 'WafRuleEdit',
+ components: {
+ writeRule
+ },
data() {
return {
op_type :"add",
op_rule_no :"",//规则识别号
prefix,
detail_data: {},
+ rule_manual_option: [{
+ label: '界面编排',
+ value: '0'
+ }, {
+ label: '手工代码编排',
+ value: '1'
+ }, ],
rules: {
rule_name: [{ required: true, message: '请输入规则名称', type: 'error' }],
},
@@ -362,9 +400,13 @@
console.log('beforeRouteUpdate')
},
mounted() {
+ let that = this
console.log('----mounted----')
console.log(RULE)
-
+ this.$bus.$on('codeedit', (e) => {
+ console.log('消息总线 来自子组件e', e)
+ this.formData.rule_content = e
+ })
//console.log(this.$route.params.req_uuid);
if(this.$route.query.code != undefined){
@@ -404,6 +446,7 @@
},
},
methods: {
+
getDetail(id) {
let that = this
this.$request
@@ -515,7 +558,14 @@
break;
}
},
+ edtinput(e){
+ console.log('来子组件',e)
+ },
+ getinfoClick(e){
+ console.log(e)
+ console.log(this.$refs.changeSql)
+ },
},
};
diff --git a/localwaf/src/service/service-rule.ts b/localwaf/src/service/service-rule.ts
index 64ca8a1..94b3832 100644
--- a/localwaf/src/service/service-rule.ts
+++ b/localwaf/src/service/service-rule.ts
@@ -1,4 +1,6 @@
export const RULE = {
+ is_manual_rule:"1",
+ rule_content:"zxcv",
rule_base: {
salience: 10,
rule_name: "试试",
@@ -7,14 +9,14 @@ export const RULE = {
rule_condition: {
relation_detail: [{
fact_name: "MF",
- attr: "主机",
+ attr: "HOST",
attr_type: "string",
attr_judge: "==",
attr_val: "值"
},
{
fact_name: "MF",
- attr: "端口",
+ attr: "URL",
attr_type: "int",
attr_judge: "==",
attr_val: "0"
@@ -24,13 +26,13 @@ export const RULE = {
},
rule_do_assignment: [{
fact_name: "MF",
- attr: "主机",
+ attr: "HOST",
attr_type: "string",
attr_val: "值"
},
{
fact_name: "MF",
- attr: "源端口",
+ attr: "PORT",
attr_type: "int",
attr_val: "0"
},
diff --git a/localwaf/vite.config.js b/localwaf/vite.config.js
index 00ea615..790eea0 100644
--- a/localwaf/vite.config.js
+++ b/localwaf/vite.config.js
@@ -2,6 +2,7 @@ import { loadEnv } from 'vite';
import { viteMockServe } from 'vite-plugin-mock';
import { createVuePlugin } from 'vite-plugin-vue2';
import { createSvgPlugin } from 'vite-plugin-vue2-svg';
+import requireTransform from 'vite-plugin-require-transform';
import path from 'path';
@@ -36,6 +37,11 @@ export default ({ mode }) => {
localEnabled: true,
}),
createSvgPlugin(),
+ requireTransform(
+ {
+ fileRegex: /.js$|.vue$/
+ }
+ ),
],
build: {
diff --git a/model/request/waf_rule_add_req.go b/model/request/waf_rule_add_req.go
index 5d15d4e..940f9a6 100644
--- a/model/request/waf_rule_add_req.go
+++ b/model/request/waf_rule_add_req.go
@@ -1,5 +1,7 @@
package request
type WafRuleAddReq struct {
- RuleJson string
+ RuleJson string
+ IsManualRule int `json:"is_manual_rule"`
+ RuleContent string `json:"rule_content"` //规则内容
}
diff --git a/model/request/waf_rule_edit_req.go b/model/request/waf_rule_edit_req.go
index 2f3b415..8ab1e30 100644
--- a/model/request/waf_rule_edit_req.go
+++ b/model/request/waf_rule_edit_req.go
@@ -1,6 +1,8 @@
package request
type WafRuleEditReq struct {
- CODE string `json:"code"`
- RuleJson string `json:"rulejson"`
+ CODE string `json:"code"`
+ RuleJson string `json:"rulejson"`
+ IsManualRule int `json:"is_manual_rule"`
+ RuleContent string `json:"rule_content"` //规则内容
}
diff --git a/model/rule_info_json.go b/model/rule_info_json.go
index b3ab45e..07393f8 100644
--- a/model/rule_info_json.go
+++ b/model/rule_info_json.go
@@ -19,6 +19,8 @@ func IfCompare(condition bool, trueVal, falseVal interface{}) interface{} {
}
type RuleInfo struct {
+ IsManualRule int `json:"is_manual_rule"`
+ RuleContent string `json:"rule_content"` //规则内容
RuleBase RuleBase `json:"rule_base"`
RuleCondition RuleCondition `json:"rule_condition"`
RuleDoAssignment []RuleDoAssignment `json:"rule_do_assignment"`
diff --git a/model/rules.go b/model/rules.go
index a4c7f38..b49f002 100644
--- a/model/rules.go
+++ b/model/rules.go
@@ -12,5 +12,6 @@ type Rules struct {
RuleVersion int `json:"rule_version"` //规则版本号
UserCode string `json:"user_code"` //用户编码
IsPublicRule int `json:"is_public_rule"` //是否为公共规则
+ IsManualRule int `json:"is_manual_rule"` //是否为手工写规则 1:手工编写 0 :UI界面形式
RuleStatus int `json:"rule_status"` //规则是否开启 1,开启 0,关闭不生效 999 删除
}