mirror of https://github.com/bjdgyc/anylink.git
commit
e0d5638c17
|
@ -14,3 +14,4 @@
|
||||||
| -------- | ---------------------------- |
|
| -------- | ---------------------------- |
|
||||||
| 代码 oo8 | |
|
| 代码 oo8 | |
|
||||||
| 甘磊 | https://github.com/ganlei333 |
|
| 甘磊 | https://github.com/ganlei333 |
|
||||||
|
| Oo@ | |
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
package admin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/bjdgyc/anylink/dbdata"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SetAuditList(w http.ResponseWriter, r *http.Request) {
|
||||||
|
_ = r.ParseForm()
|
||||||
|
pageS := r.FormValue("page")
|
||||||
|
page, _ := strconv.Atoi(pageS)
|
||||||
|
if page < 1 {
|
||||||
|
page = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
var datas []dbdata.AccessAudit
|
||||||
|
count := dbdata.CountAll(&dbdata.AccessAudit{})
|
||||||
|
err := dbdata.Find(&datas, dbdata.PageSize, page)
|
||||||
|
if err != nil && !dbdata.CheckErrNotFound(err) {
|
||||||
|
RespError(w, RespInternalErr, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
data := map[string]interface{}{
|
||||||
|
"count": count,
|
||||||
|
"page_size": dbdata.PageSize,
|
||||||
|
"datas": datas,
|
||||||
|
}
|
||||||
|
|
||||||
|
RespSucess(w, data)
|
||||||
|
}
|
|
@ -32,6 +32,7 @@ func StartAdmin() {
|
||||||
r.HandleFunc("/set/other/edit", SetOtherEdit)
|
r.HandleFunc("/set/other/edit", SetOtherEdit)
|
||||||
r.HandleFunc("/set/other/smtp", SetOtherSmtp)
|
r.HandleFunc("/set/other/smtp", SetOtherSmtp)
|
||||||
r.HandleFunc("/set/other/smtp/edit", SetOtherSmtpEdit)
|
r.HandleFunc("/set/other/smtp/edit", SetOtherSmtpEdit)
|
||||||
|
r.HandleFunc("/set/audit/list", SetAuditList)
|
||||||
|
|
||||||
r.HandleFunc("/user/list", UserList)
|
r.HandleFunc("/user/list", UserList)
|
||||||
r.HandleFunc("/user/detail", UserDetail)
|
r.HandleFunc("/user/detail", UserDetail)
|
||||||
|
|
|
@ -2,6 +2,6 @@ package base
|
||||||
|
|
||||||
const (
|
const (
|
||||||
APP_NAME = "AnyLink"
|
APP_NAME = "AnyLink"
|
||||||
// 添加访问日志审计
|
// 添加macvtap支持
|
||||||
APP_VER = "0.5.2"
|
APP_VER = "0.6.1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -51,8 +51,8 @@ func execute() {
|
||||||
}
|
}
|
||||||
rr := ee.MapRange()
|
rr := ee.MapRange()
|
||||||
for rr.Next() {
|
for rr.Next() {
|
||||||
// fmt.Println(rr.Key(), rr.Value())
|
// fmt.Println(rr.Key(), rr.Value().Index(0))
|
||||||
envs[rr.Key().String()] = rr.Value().String()
|
envs[rr.Key().String()] = rr.Value().Index(0).String()
|
||||||
}
|
}
|
||||||
|
|
||||||
if !runSrv {
|
if !runSrv {
|
||||||
|
|
|
@ -55,7 +55,7 @@ var configs = []config{
|
||||||
{Typ: cfgInt, Name: "mobile_dpd", Usage: "移动端死链接检测时间(秒)", ValInt: 60},
|
{Typ: cfgInt, Name: "mobile_dpd", Usage: "移动端死链接检测时间(秒)", ValInt: 60},
|
||||||
{Typ: cfgInt, Name: "session_timeout", Usage: "session过期时间(秒)", ValInt: 3600},
|
{Typ: cfgInt, Name: "session_timeout", Usage: "session过期时间(秒)", ValInt: 3600},
|
||||||
// {Typ: cfgInt, Name: "auth_timeout", Usage: "auth_timeout", ValInt: 0},
|
// {Typ: cfgInt, Name: "auth_timeout", Usage: "auth_timeout", ValInt: 0},
|
||||||
{Typ: cfgInt, Name: "audit_interval", Usage: "审计去重间隔(秒)", ValInt: 1800},
|
{Typ: cfgInt, Name: "audit_interval", Usage: "审计去重间隔(秒),0关闭", ValInt: 0},
|
||||||
}
|
}
|
||||||
|
|
||||||
var envs = map[string]string{}
|
var envs = map[string]string{}
|
||||||
|
|
|
@ -69,7 +69,7 @@ func SetUser(v *User) error {
|
||||||
// 验证用户登陆信息
|
// 验证用户登陆信息
|
||||||
func CheckUser(name, pwd, group string) error {
|
func CheckUser(name, pwd, group string) error {
|
||||||
// TODO 严重问题
|
// TODO 严重问题
|
||||||
return nil
|
// return nil
|
||||||
|
|
||||||
pl := len(pwd)
|
pl := len(pwd)
|
||||||
if name == "" || pl < 6 {
|
if name == "" || pl < 6 {
|
||||||
|
|
|
@ -100,6 +100,10 @@ func checkLinkAcl(group *dbdata.Group, pl *sessdata.Payload) bool {
|
||||||
|
|
||||||
// 访问日志审计
|
// 访问日志审计
|
||||||
func logAudit(cSess *sessdata.ConnSession, pl *sessdata.Payload) {
|
func logAudit(cSess *sessdata.ConnSession, pl *sessdata.Payload) {
|
||||||
|
if base.Cfg.AuditInterval <= 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ipSrc := waterutil.IPv4Source(pl.Data)
|
ipSrc := waterutil.IPv4Source(pl.Data)
|
||||||
ipDst := waterutil.IPv4Destination(pl.Data)
|
ipDst := waterutil.IPv4Destination(pl.Data)
|
||||||
ipPort := waterutil.IPv4DestinationPort(pl.Data)
|
ipPort := waterutil.IPv4DestinationPort(pl.Data)
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
<el-menu-item index="/admin/set/system">系统信息</el-menu-item>
|
<el-menu-item index="/admin/set/system">系统信息</el-menu-item>
|
||||||
<el-menu-item index="/admin/set/soft">软件配置</el-menu-item>
|
<el-menu-item index="/admin/set/soft">软件配置</el-menu-item>
|
||||||
<el-menu-item index="/admin/set/other">其他设置</el-menu-item>
|
<el-menu-item index="/admin/set/other">其他设置</el-menu-item>
|
||||||
|
<el-menu-item index="/admin/set/audit">审计日志</el-menu-item>
|
||||||
</el-submenu>
|
</el-submenu>
|
||||||
|
|
||||||
<el-submenu index="2">
|
<el-submenu index="2">
|
||||||
|
|
|
@ -0,0 +1,146 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card>
|
||||||
|
|
||||||
|
<el-table
|
||||||
|
ref="multipleTable"
|
||||||
|
:data="tableData"
|
||||||
|
border>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
sortable="true"
|
||||||
|
prop="id"
|
||||||
|
label="ID"
|
||||||
|
width="60">
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
prop="username"
|
||||||
|
label="用户名">
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
prop="protocol"
|
||||||
|
label="协议">
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
prop="src"
|
||||||
|
label="源IP地址">
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
prop="dst"
|
||||||
|
label="目的IP地址">
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
prop="dst_port"
|
||||||
|
label="目的端口">
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
prop="created_at"
|
||||||
|
label="创建时间"
|
||||||
|
:formatter="tableDateFormat">
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
label="操作"
|
||||||
|
width="150">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-popconfirm
|
||||||
|
class="m-left-10"
|
||||||
|
@onConfirm="handleDel(scope.row)"
|
||||||
|
title="确定要删除审计日志吗?">
|
||||||
|
<el-button
|
||||||
|
slot="reference"
|
||||||
|
size="mini"
|
||||||
|
type="danger"
|
||||||
|
@click="handleDelete(scope.row)">删除
|
||||||
|
</el-button>
|
||||||
|
</el-popconfirm>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<div class="sh-20"></div>
|
||||||
|
|
||||||
|
<el-pagination
|
||||||
|
background
|
||||||
|
layout="prev, pager, next"
|
||||||
|
:pager-count="11"
|
||||||
|
@current-change="pageChange"
|
||||||
|
:total="count">
|
||||||
|
</el-pagination>
|
||||||
|
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import axios from "axios";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "IpMap",
|
||||||
|
components: {},
|
||||||
|
mixins: [],
|
||||||
|
created() {
|
||||||
|
this.$emit('update:route_path', this.$route.path)
|
||||||
|
this.$emit('update:route_name', ['基础信息', 'IP审计'])
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getData(1)
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tableData: [],
|
||||||
|
count: 10,
|
||||||
|
nowIndex: 0,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getData(p) {
|
||||||
|
axios.get('/set/audit/list', {
|
||||||
|
params: {
|
||||||
|
page: p,
|
||||||
|
}
|
||||||
|
}).then(resp => {
|
||||||
|
var data = resp.data.data
|
||||||
|
console.log(data);
|
||||||
|
this.tableData = data.datas;
|
||||||
|
this.count = data.count
|
||||||
|
}).catch(error => {
|
||||||
|
this.$message.error('哦,请求出错');
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
pageChange(p) {
|
||||||
|
this.getData(p)
|
||||||
|
},
|
||||||
|
|
||||||
|
handleDel(row) {
|
||||||
|
axios.post('/set/audit/del?id=' + row.id).then(resp => {
|
||||||
|
var rdata = resp.data
|
||||||
|
if (rdata.code === 0) {
|
||||||
|
this.$message.success(rdata.msg);
|
||||||
|
this.getData(1);
|
||||||
|
} else {
|
||||||
|
this.$message.error(rdata.msg);
|
||||||
|
}
|
||||||
|
console.log(rdata);
|
||||||
|
}).catch(error => {
|
||||||
|
this.$message.error('哦,请求出错');
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
|
@ -17,6 +17,7 @@ const routes = [
|
||||||
{path: 'set/system', component: () => import('@/pages/set/System')},
|
{path: 'set/system', component: () => import('@/pages/set/System')},
|
||||||
{path: 'set/soft', component: () => import('@/pages/set/Soft')},
|
{path: 'set/soft', component: () => import('@/pages/set/Soft')},
|
||||||
{path: 'set/other', component: () => import('@/pages/set/Other')},
|
{path: 'set/other', component: () => import('@/pages/set/Other')},
|
||||||
|
{path: 'set/audit', component: () => import('@/pages/set/Audit')},
|
||||||
|
|
||||||
{path: 'user/list', component: () => import('@/pages/user/List')},
|
{path: 'user/list', component: () => import('@/pages/user/List')},
|
||||||
{path: 'user/online', component: () => import('@/pages/user/Online')},
|
{path: 'user/online', component: () => import('@/pages/user/Online')},
|
||||||
|
|
Loading…
Reference in New Issue