mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2026-02-17 21:35:37 +08:00
增加IP级别和WAF动作
This commit is contained in:
@@ -7,5 +7,6 @@ Vue.component("ip-item-text", {
|
||||
<span v-if="vItem.ipTo.length > 0">- {{vItem.ipTo}}</span>
|
||||
</span>
|
||||
<span v-if="vItem.type == 'ipv6'">{{vItem.ipFrom}}</span>
|
||||
<span v-if="vItem.eventLevelName != null && vItem.eventLevelName.length > 0"> 级别:{{vItem.eventLevelName}}</span>
|
||||
</span>`
|
||||
})
|
||||
@@ -19,6 +19,7 @@ Vue.component("ip-list-table", {
|
||||
<tr>
|
||||
<th style="width:18em">IP</th>
|
||||
<th>类型</th>
|
||||
<th>级别</th>
|
||||
<th>过期时间</th>
|
||||
<th>备注</th>
|
||||
<th class="two op">操作</th>
|
||||
@@ -35,6 +36,10 @@ Vue.component("ip-list-table", {
|
||||
<span v-else-if="item.type == 'ipv6'">IPv6</span>
|
||||
<span v-else-if="item.type == 'all'"><strong>所有IP</strong></span>
|
||||
</td>
|
||||
<td>
|
||||
<span v-if="item.eventLevelName != null && item.eventLevelName.length > 0">{{item.eventLevelName}}</span>
|
||||
<span v-else class="disabled">-</span>
|
||||
</td>
|
||||
<td>
|
||||
<div v-if="item.expiredTime.length > 0">
|
||||
{{item.expiredTime}}
|
||||
|
||||
@@ -1,34 +1,40 @@
|
||||
Vue.component("message-row", {
|
||||
props: ["v-message"],
|
||||
data: function () {
|
||||
let paramsJSON = this.vMessage.params
|
||||
let params = null
|
||||
if (paramsJSON != null && paramsJSON.length > 0) {
|
||||
params = JSON.parse(paramsJSON)
|
||||
}
|
||||
props: ["v-message"],
|
||||
data: function () {
|
||||
let paramsJSON = this.vMessage.params
|
||||
let params = null
|
||||
if (paramsJSON != null && paramsJSON.length > 0) {
|
||||
params = JSON.parse(paramsJSON)
|
||||
}
|
||||
|
||||
return {
|
||||
message: this.vMessage,
|
||||
params: params
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
viewCert: function (certId) {
|
||||
teaweb.popup("/servers/certs/certPopup?certId=" + certId, {
|
||||
height: "28em",
|
||||
width: "48em"
|
||||
})
|
||||
},
|
||||
return {
|
||||
message: this.vMessage,
|
||||
params: params
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
viewCert: function (certId) {
|
||||
teaweb.popup("/servers/certs/certPopup?certId=" + certId, {
|
||||
height: "28em",
|
||||
width: "48em"
|
||||
})
|
||||
},
|
||||
readMessage: function (messageId) {
|
||||
Tea.action("/messages/readPage")
|
||||
.params({"messageIds": [messageId]})
|
||||
.post()
|
||||
.success(function () {
|
||||
// 刷新父级页面Badge
|
||||
if (window.parent.Tea != null && window.parent.Tea.Vue != null) {
|
||||
window.parent.Tea.Vue.checkMessagesOnce()
|
||||
}
|
||||
|
||||
// 刷新当前页面
|
||||
teaweb.reload()
|
||||
})
|
||||
}
|
||||
},
|
||||
template: `<div>
|
||||
},
|
||||
template: `<div>
|
||||
<table class="ui table selectable">
|
||||
<tr :class="{error: message.level == 'error', positive: message.level == 'success', warning: message.level == 'warning'}">
|
||||
<td style="position: relative">
|
||||
|
||||
45
web/public/js/components/server/firewall-event-levels.js
Normal file
45
web/public/js/components/server/firewall-event-levels.js
Normal file
@@ -0,0 +1,45 @@
|
||||
Vue.component("firewall-event-level-options", {
|
||||
props: ["v-value"],
|
||||
mounted: function () {
|
||||
let that = this
|
||||
Tea.action("/ui/eventLevelOptions")
|
||||
.post()
|
||||
.success(function (resp) {
|
||||
that.levels = resp.data.eventLevels
|
||||
that.change()
|
||||
})
|
||||
},
|
||||
data: function () {
|
||||
let value = this.vValue
|
||||
if (value == null || value.length == 0) {
|
||||
value = "" // 不要给默认值,因为黑白名单等默认值均有不同
|
||||
}
|
||||
|
||||
return {
|
||||
levels: [],
|
||||
description: "",
|
||||
level: value
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
change: function () {
|
||||
this.$emit("change")
|
||||
|
||||
let that = this
|
||||
let l = this.levels.$find(function (k, v) {
|
||||
return v.code == that.level
|
||||
})
|
||||
if (l != null) {
|
||||
this.description = l.description
|
||||
} else {
|
||||
this.description = ""
|
||||
}
|
||||
}
|
||||
},
|
||||
template: `<div>
|
||||
<select class="ui dropdown auto-width" name="eventLevel" v-model="level" @change="change">
|
||||
<option v-for="level in levels" :value="level.code">{{level.name}}</option>
|
||||
</select>
|
||||
<p class="comment">{{description}}</p>
|
||||
</div>`
|
||||
})
|
||||
@@ -59,6 +59,14 @@ Tea.context(function () {
|
||||
})
|
||||
}
|
||||
|
||||
this.checkMessagesOnce = function () {
|
||||
this.$post("/messages/badge")
|
||||
.params({})
|
||||
.success(function (resp) {
|
||||
this.globalMessageBadge = resp.data.count
|
||||
})
|
||||
}
|
||||
|
||||
this.showMessages = function () {
|
||||
teaweb.popup("/messages", {
|
||||
height: "24em",
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
{$layout "layout_popup"}
|
||||
|
||||
<h3>添加动作</h3>
|
||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
|
||||
<input type="hidden" name="clusterId" :value="clusterId"/>
|
||||
<csrf-token></csrf-token>
|
||||
|
||||
<table class="ui table selectable definition">
|
||||
<tr>
|
||||
<td class="title">名称 *</td>
|
||||
<td>
|
||||
<input type="text" name="name" maxlength="50" ref="focus"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>级别</td>
|
||||
<td>
|
||||
<firewall-event-level-options :v-value="'critical'"></firewall-event-level-options>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>类型</td>
|
||||
<td>
|
||||
<select class="ui dropdown auto-width" name="type" v-model="type">
|
||||
<option value="">[请选择]</option>
|
||||
<option v-for="type in actionTypes" :value="type.code">{{type.name}}</option>
|
||||
</select>
|
||||
<p class="comment">{{typeDescription}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- IPSet -->
|
||||
<tbody v-if="type == 'ipset'">
|
||||
<tr>
|
||||
<td>IPSet白名单名称 *</td>
|
||||
<td>
|
||||
<input type="text" name="ipsetWhiteName" value="edge_white_list" maxlength="64"/>
|
||||
<p class="comment">只能是英文、数字、下划线的组合。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IPSet黑名单名称 *</td>
|
||||
<td>
|
||||
<input type="text" name="ipsetBlackName" value="edge_black_list" maxlength="64"/>
|
||||
<p class="comment">只能是英文、数字、下划线的组合。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>创建IPTables规则</td>
|
||||
<td>
|
||||
<checkbox name="ipsetAutoAddToIPTables" :value="true"></checkbox>
|
||||
<p class="comment">是否尝试自动创建包含有此IPSet的IPTables规则。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>创建Firewalld规则</td>
|
||||
<td>
|
||||
<checkbox name="ipsetAutoAddToFirewalld" :value="true"></checkbox>
|
||||
<p class="comment">是否尝试自动创建包含有此IPSet的Firewalld规则。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<!-- Firewalld -->
|
||||
<tbody v-if="type == 'firewalld'">
|
||||
|
||||
</tbody>
|
||||
|
||||
<!-- IPTables -->
|
||||
<tbody v-if="type == 'iptables'">
|
||||
|
||||
</tbody>
|
||||
|
||||
<!-- 脚本 -->
|
||||
<tbody v-if="type == 'script'">
|
||||
<tr>
|
||||
<td>脚本路径 *</td>
|
||||
<td>
|
||||
<input type="text" name="scriptPath" maxlength="200"/>
|
||||
<p class="comment">可执行脚本文件的完整路径。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<!-- HTTP API -->
|
||||
<tbody v-if="type == 'httpAPI'">
|
||||
<tr>
|
||||
<td>API URL *</td>
|
||||
<td>
|
||||
<input type="text" name="httpAPIURL" maxlength="200" placeholder="http|https://..."/>
|
||||
<p class="comment">完整的API地址。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<submit-btn></submit-btn>
|
||||
</form>
|
||||
@@ -0,0 +1,30 @@
|
||||
Tea.context(function () {
|
||||
this.$delay(function () {
|
||||
let that = this
|
||||
|
||||
// 类型
|
||||
this.$watch("type", function () {
|
||||
that.changeType()
|
||||
})
|
||||
|
||||
this.changeType()
|
||||
})
|
||||
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
this.type = ""
|
||||
this.typeDescription = ""
|
||||
|
||||
this.changeType = function () {
|
||||
let that = this
|
||||
let t = this.actionTypes.$find(function (k, v) {
|
||||
return v.code == that.type
|
||||
})
|
||||
if (t != null) {
|
||||
this.typeDescription = t.description
|
||||
} else {
|
||||
this.typeDescription = ""
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,36 @@
|
||||
{$layout}
|
||||
{$template "/left_menu"}
|
||||
|
||||
<div class="right-box">
|
||||
<first-menu>
|
||||
<menu-item @click.prevent="createAction">添加动作</menu-item>
|
||||
<span class="item disabled">|</span>
|
||||
<span class="item"><tip-icon content="可以设置WAF中的规则集和IP名单中的IP级别,从而在匹配时触发对应的动作。"></tip-icon></span>
|
||||
</first-menu>
|
||||
|
||||
<div class="margin"></div>
|
||||
<div v-if="!hasActions">
|
||||
<p class="comment">暂时还没有自定义动作。</p>
|
||||
</div>
|
||||
<div v-for="level in levels" v-if="level.actions.length > 0">
|
||||
<h4 style="margin-bottom: 0">{{level.name}}级别</h4>
|
||||
<p class="comment" v-if="level.actions.length == 0">暂时还没有定义动作。</p>
|
||||
<table class="ui table selectable" v-if="level.actions.length > 0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>名称</th>
|
||||
<th class="four wide">类型</th>
|
||||
<th class="two op">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr v-for="action in level.actions">
|
||||
<td>{{action.name}}</td>
|
||||
<td>{{action.typeName}}</td>
|
||||
<td>
|
||||
<a href="" @click.prevent="updateAction(action.id)">修改</a> <a href="" @click.prevent="deleteAction(action.id)">删除</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="ui divider"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,36 @@
|
||||
Tea.context(function () {
|
||||
this.createAction = function () {
|
||||
teaweb.popup(Tea.url(".createPopup", {clusterId: this.clusterId}), {
|
||||
callback: function () {
|
||||
teaweb.success("保存成功", function () {
|
||||
teaweb.reload()
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
this.updateAction = function (actionId) {
|
||||
teaweb.popup(Tea.url(".updatePopup", {actionId: actionId}), {
|
||||
callback: function () {
|
||||
teaweb.success("保存成功", function () {
|
||||
teaweb.reload()
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
this.deleteAction = function (actionId) {
|
||||
let that = this
|
||||
teaweb.confirm("确定要删除此动作吗?", function () {
|
||||
that.$post(".delete")
|
||||
.params({
|
||||
actionId: actionId
|
||||
})
|
||||
.success(function () {
|
||||
teaweb.success("删除成功", function () {
|
||||
teaweb.reload()
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,97 @@
|
||||
{$layout "layout_popup"}
|
||||
|
||||
<h3>修改动作</h3>
|
||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
|
||||
<input type="hidden" name="actionId" :value="action.id"/>
|
||||
<csrf-token></csrf-token>
|
||||
|
||||
<table class="ui table selectable definition">
|
||||
<tr>
|
||||
<td class="title">名称 *</td>
|
||||
<td>
|
||||
<input type="text" name="name" maxlength="50" ref="focus" v-model="action.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>级别</td>
|
||||
<td>
|
||||
<firewall-event-level-options :v-value="eventLevel"></firewall-event-level-options>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>类型</td>
|
||||
<td>
|
||||
<select class="ui dropdown auto-width" name="type" v-model="type">
|
||||
<option value="">[请选择]</option>
|
||||
<option v-for="type in actionTypes" :value="type.code">{{type.name}}</option>
|
||||
</select>
|
||||
<p class="comment">{{typeDescription}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- IPSet -->
|
||||
<tbody v-if="type == 'ipset'">
|
||||
<tr>
|
||||
<td>IPSet白名单名称 *</td>
|
||||
<td>
|
||||
<input type="text" name="ipsetWhiteName" value="edge_white_list" maxlength="64" v-model="action.params.whiteName"/>
|
||||
<p class="comment">只能是英文、数字、下划线的组合。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IPSet黑名单名称 *</td>
|
||||
<td>
|
||||
<input type="text" name="ipsetBlackName" value="edge_black_list" maxlength="64" v-model="action.params.blackName"/>
|
||||
<p class="comment">只能是英文、数字、下划线的组合。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>创建IPTables规则</td>
|
||||
<td>
|
||||
<checkbox name="ipsetAutoAddToIPTables" v-model="action.params.autoAddToIPTables"></checkbox>
|
||||
<p class="comment">是否尝试自动创建包含有此IPSet的IPTables规则。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>创建Firewalld规则</td>
|
||||
<td>
|
||||
<checkbox name="ipsetAutoAddToFirewalld" v-model="action.params.autoAddToFirewalld"></checkbox>
|
||||
<p class="comment">是否尝试自动创建包含有此IPSet的Firewalld规则。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<!-- Firewalld -->
|
||||
<tbody v-if="type == 'firewalld'">
|
||||
|
||||
</tbody>
|
||||
|
||||
<!-- IPTables -->
|
||||
<tbody v-if="type == 'iptables'">
|
||||
|
||||
</tbody>
|
||||
|
||||
<!-- 脚本 -->
|
||||
<tbody v-if="type == 'script'">
|
||||
<tr>
|
||||
<td>脚本路径 *</td>
|
||||
<td>
|
||||
<input type="text" name="scriptPath" maxlength="200" v-model="action.params.path"/>
|
||||
<p class="comment">可执行脚本文件的完整路径。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<!-- HTTP API -->
|
||||
<tbody v-if="type == 'httpAPI'">
|
||||
<tr>
|
||||
<td>API URL *</td>
|
||||
<td>
|
||||
<input type="text" name="httpAPIURL" maxlength="200" placeholder="http|https://..." v-model="action.params.url"/>
|
||||
<p class="comment">完整的API地址。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<submit-btn></submit-btn>
|
||||
</form>
|
||||
@@ -0,0 +1,35 @@
|
||||
Tea.context(function () {
|
||||
this.$delay(function () {
|
||||
let that = this
|
||||
|
||||
// 类型
|
||||
this.$watch("type", function () {
|
||||
that.changeType()
|
||||
})
|
||||
|
||||
this.changeType()
|
||||
})
|
||||
|
||||
/**
|
||||
* 级别
|
||||
*/
|
||||
this.eventLevel = this.action.eventLevel
|
||||
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
this.type = this.action.type
|
||||
this.typeDescription = ""
|
||||
|
||||
this.changeType = function () {
|
||||
let that = this
|
||||
let t = this.actionTypes.$find(function (k, v) {
|
||||
return v.code == that.type
|
||||
})
|
||||
if (t != null) {
|
||||
this.typeDescription = t.description
|
||||
} else {
|
||||
this.typeDescription = ""
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -1,26 +1,38 @@
|
||||
Tea.context(function () {
|
||||
this.updateAllRead = function () {
|
||||
let that = this
|
||||
teaweb.confirm("确定要设置所有的未读消息为已读吗?", function () {
|
||||
that.$post("/messages/readAll")
|
||||
.success(function () {
|
||||
window.location = "/messages"
|
||||
})
|
||||
})
|
||||
}
|
||||
this.updateAllRead = function () {
|
||||
let that = this
|
||||
teaweb.confirm("确定要设置所有的未读消息为已读吗?", function () {
|
||||
that.$post("/messages/readAll")
|
||||
.success(function () {
|
||||
// 刷新父级页面Badge
|
||||
if (window.parent.Tea != null && window.parent.Tea.Vue != null) {
|
||||
window.parent.Tea.Vue.checkMessagesOnce()
|
||||
}
|
||||
|
||||
this.updatePageRead = function () {
|
||||
let that = this
|
||||
teaweb.confirm("确定要设置当前页的未读消息为已读吗?", function () {
|
||||
let messageIds = []
|
||||
that.messages.forEach(function (v) {
|
||||
messageIds.push(v.id)
|
||||
})
|
||||
that.$post("/messages/readPage")
|
||||
.params({
|
||||
messageIds: messageIds
|
||||
})
|
||||
.refresh()
|
||||
})
|
||||
}
|
||||
window.location = "/messages"
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
this.updatePageRead = function () {
|
||||
let that = this
|
||||
teaweb.confirm("确定要设置当前页的未读消息为已读吗?", function () {
|
||||
let messageIds = []
|
||||
that.messages.forEach(function (v) {
|
||||
messageIds.push(v.id)
|
||||
})
|
||||
that.$post("/messages/readPage")
|
||||
.params({
|
||||
messageIds: messageIds
|
||||
})
|
||||
.success(function () {
|
||||
// 刷新父级页面Badge
|
||||
if (window.parent.Tea != null && window.parent.Tea.Vue != null) {
|
||||
window.parent.Tea.Vue.checkMessagesOnce()
|
||||
}
|
||||
|
||||
teaweb.reload()
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -1,7 +1,7 @@
|
||||
{$layout "layout_popup"}
|
||||
|
||||
<h3 v-if="type == 'white'">添加IP到白名单</h3>
|
||||
<h3 v-if="type == 'black'">添加IP到黑名单</h3>
|
||||
<h3 v-if="listType == 'white'">添加IP到白名单</h3>
|
||||
<h3 v-if="listType == 'black'">添加IP到黑名单</h3>
|
||||
|
||||
<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
|
||||
<input type="hidden" name="firewallPolicyId" :value="firewallPolicyId"/>
|
||||
@@ -49,6 +49,14 @@
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<tr>
|
||||
<td>级别</td>
|
||||
<td>
|
||||
<firewall-event-level-options :v-value="eventLevel"></firewall-event-level-options>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
||||
</tr>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
Tea.context(function () {
|
||||
this.type = "ipv4"
|
||||
this.eventLevel = (this.listType == "white") ? "debug" : "critical"
|
||||
})
|
||||
@@ -1,7 +1,7 @@
|
||||
Tea.context(function () {
|
||||
this.updateItem = function (itemId) {
|
||||
teaweb.popup(Tea.url(".updateIPPopup?firewallPolicyId=" + this.firewallPolicyId, {itemId: itemId}), {
|
||||
height: "23em",
|
||||
height: "26em",
|
||||
callback: function () {
|
||||
teaweb.success("保存成功", function () {
|
||||
teaweb.reload()
|
||||
@@ -27,7 +27,7 @@ Tea.context(function () {
|
||||
*/
|
||||
this.createIP = function (type) {
|
||||
teaweb.popup("/servers/components/waf/ipadmin/createIPPopup?firewallPolicyId=" + this.firewallPolicyId + '&type=' + type, {
|
||||
height: "23em",
|
||||
height: "26em",
|
||||
callback: function () {
|
||||
window.location = "/servers/components/waf/ipadmin/lists?firewallPolicyId=" + this.firewallPolicyId + "&type=" + type
|
||||
}
|
||||
|
||||
@@ -24,10 +24,10 @@
|
||||
<div v-if="result.isFound">
|
||||
<div v-if="result.item != null">
|
||||
<div v-if="result.isAllowed">
|
||||
<span class="green">在白名单中 <ip-item-text :v-item="result.item"></ip-item-text><a href="" @click.prevent="updateItem(result.list.id, result.item.id)" title="查看和修改"><i class="icon pencil small"></i></a></span>
|
||||
<span class="green">在白名单中 <ip-item-text :v-item="result.item"></ip-item-text> <a href="" @click.prevent="updateItem(result.list.id, result.item.id)" title="查看和修改"><i class="icon pencil small"></i></a></span>
|
||||
</div>
|
||||
<div v-else>
|
||||
<span class="red">在黑名单中 <ip-item-text :v-item="result.item"></ip-item-text><a href="" @click.prevent="updateItem(result.list.id, result.item.id)" title="查看和修改"><i class="icon pencil small"></i></a></span>
|
||||
<span class="red">在黑名单中 <ip-item-text :v-item="result.item"></ip-item-text> <a href="" @click.prevent="updateItem(result.list.id, result.item.id)" title="查看和修改"><i class="icon pencil small"></i></a></span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="result.province != null">
|
||||
|
||||
@@ -24,7 +24,7 @@ Tea.context(function () {
|
||||
|
||||
this.updateItem = function (itemId) {
|
||||
teaweb.popup(Tea.url(".updateIPPopup?firewallPolicyId=" + this.firewallPolicyId, {itemId: itemId}), {
|
||||
height: "23em",
|
||||
height: "26em",
|
||||
callback: function () {
|
||||
teaweb.success("保存成功", function () {
|
||||
teaweb.reload()
|
||||
@@ -32,4 +32,16 @@ Tea.context(function () {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加IP名单菜单
|
||||
*/
|
||||
this.createIP = function (type) {
|
||||
teaweb.popup("/servers/components/waf/ipadmin/createIPPopup?firewallPolicyId=" + this.firewallPolicyId + '&type=' + type, {
|
||||
height: "26em",
|
||||
callback: function () {
|
||||
window.location = "/servers/components/waf/ipadmin/lists?firewallPolicyId=" + this.firewallPolicyId + "&type=" + type
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -39,6 +39,13 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<tr>
|
||||
<td>级别</td>
|
||||
<td>
|
||||
<firewall-event-level-options :v-value="item.eventLevel"></firewall-event-level-options>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- IPv6 -->
|
||||
<tbody v-if="type == 'ipv6'">
|
||||
<tr>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Tea.context(function () {
|
||||
this.updateItem = function (itemId) {
|
||||
teaweb.popup(Tea.url(".updateIPPopup?listId=" + this.listId, {itemId: itemId}), {
|
||||
height: "24em",
|
||||
height: "26em",
|
||||
callback: function () {
|
||||
teaweb.success("保存成功", function () {
|
||||
teaweb.reload()
|
||||
@@ -27,7 +27,7 @@ Tea.context(function () {
|
||||
*/
|
||||
this.createIP = function (type) {
|
||||
teaweb.popup("/servers/server/settings/waf/ipadmin/createIPPopup?listId=" + this.listId + '&type=' + type, {
|
||||
height: "24em",
|
||||
height: "26em",
|
||||
callback: function () {
|
||||
window.location.reload()
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ Tea.context(function () {
|
||||
*/
|
||||
this.createIP = function (type) {
|
||||
teaweb.popup("/servers/components/waf/ipadmin/createIPPopup?firewallPolicyId=" + this.firewallPolicyId + '&type=' + type, {
|
||||
height: "23em",
|
||||
height: "30em",
|
||||
callback: function () {
|
||||
window.location = "/servers/components/waf/ipadmin/lists?firewallPolicyId=" + this.firewallPolicyId + "&type=" + type
|
||||
}
|
||||
|
||||
@@ -49,6 +49,13 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<tr>
|
||||
<td>级别</td>
|
||||
<td>
|
||||
<firewall-event-level-options :v-value="eventLevel"></firewall-event-level-options>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
||||
</tr>
|
||||
@@ -66,6 +73,5 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="comment">添加后将会在5分钟内生效。</p>
|
||||
<submit-btn></submit-btn>
|
||||
</form>
|
||||
@@ -1,3 +1,4 @@
|
||||
Tea.context(function () {
|
||||
this.type = "ipv4"
|
||||
this.eventLevel = (this.listType == "white") ? "debug" : "critical"
|
||||
})
|
||||
@@ -1,7 +1,7 @@
|
||||
Tea.context(function () {
|
||||
this.updateItem = function (itemId) {
|
||||
teaweb.popup(Tea.url(".updateIPPopup?listId=" + this.listId, {itemId: itemId}), {
|
||||
height: "24em",
|
||||
height: "26em",
|
||||
callback: function () {
|
||||
teaweb.success("保存成功", function () {
|
||||
teaweb.reload()
|
||||
@@ -27,7 +27,7 @@ Tea.context(function () {
|
||||
*/
|
||||
this.createIP = function (type) {
|
||||
teaweb.popup("/servers/server/settings/waf/ipadmin/createIPPopup?listId=" + this.listId + '&type=' + type, {
|
||||
height: "24em",
|
||||
height: "26em",
|
||||
callback: function () {
|
||||
window.location.reload()
|
||||
}
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
Tea.context(function () {
|
||||
this.updateItem = function (itemId) {
|
||||
teaweb.popup(Tea.url(".updateIPPopup?firewallPolicyId=" + this.firewallPolicyId, {itemId: itemId}), {
|
||||
height: "23em",
|
||||
callback: function () {
|
||||
teaweb.success("保存成功", function () {
|
||||
teaweb.reload()
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
this.deleteItem = function (itemId) {
|
||||
let that = this
|
||||
teaweb.confirm("确定要删除这个IP吗?", function () {
|
||||
that.$post(".deleteIP")
|
||||
.params({
|
||||
"firewallPolicyId": this.firewallPolicyId,
|
||||
"itemId": itemId
|
||||
})
|
||||
.refresh()
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加IP名单菜单
|
||||
*/
|
||||
this.createIP = function (type) {
|
||||
teaweb.popup("/servers/components/waf/ipadmin/createIPPopup?firewallPolicyId=" + this.firewallPolicyId + '&type=' + type, {
|
||||
height: "23em",
|
||||
callback: function () {
|
||||
window.location = "/servers/components/waf/ipadmin/lists?firewallPolicyId=" + this.firewallPolicyId + "&type=" + type
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -43,7 +43,7 @@ Tea.context(function () {
|
||||
*/
|
||||
this.createIP = function (type) {
|
||||
teaweb.popup("/servers/components/waf/ipadmin/createIPPopup?firewallPolicyId=" + this.firewallPolicyId + '&type=' + type, {
|
||||
height: "23em",
|
||||
height: "30em",
|
||||
callback: function () {
|
||||
window.location = "/servers/components/waf/ipadmin/lists?firewallPolicyId=" + this.firewallPolicyId + "&type=" + type
|
||||
}
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
<div v-if="result.isFound">
|
||||
<div v-if="result.item != null">
|
||||
<div v-if="result.isAllowed">
|
||||
<span class="green">在白名单中 <ip-item-text :v-item="result.item"></ip-item-text><a href="" @click.prevent="updateItem(result.list.id, result.item.id)" title="查看和修改"><i class="icon pencil small"></i></a></span>
|
||||
<span class="green">在白名单中 <ip-item-text :v-item="result.item"></ip-item-text> <a href="" @click.prevent="updateItem(result.list.id, result.item.id)" title="查看和修改"><i class="icon pencil small"></i></a></span>
|
||||
</div>
|
||||
<div v-else>
|
||||
<span class="red">在黑名单中 <ip-item-text :v-item="result.item"></ip-item-text><a href="" @click.prevent="updateItem(result.list.id, result.item.id)" title="查看和修改"><i class="icon pencil small"></i></a></span>
|
||||
<span class="red">在黑名单中 <ip-item-text :v-item="result.item"></ip-item-text> <a href="" @click.prevent="updateItem(result.list.id, result.item.id)" title="查看和修改"><i class="icon pencil small"></i></a></span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="result.province != null">
|
||||
|
||||
@@ -24,7 +24,7 @@ Tea.context(function () {
|
||||
|
||||
this.updateItem = function (listId, itemId) {
|
||||
teaweb.popup(Tea.url(".updateIPPopup?listId=" + listId, {itemId: itemId}), {
|
||||
height: "24em",
|
||||
height: "26em",
|
||||
callback: function () {
|
||||
teaweb.success("保存成功", function () {
|
||||
|
||||
|
||||
@@ -49,7 +49,14 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<tr>
|
||||
<tr>
|
||||
<td>级别</td>
|
||||
<td>
|
||||
<firewall-event-level-options :v-value="item.eventLevel"></firewall-event-level-options>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
||||
</tr>
|
||||
<tbody v-show="moreOptionsVisible">
|
||||
|
||||
Reference in New Issue
Block a user