mirror of
				https://github.com/bjdgyc/anylink.git
				synced 2025-11-04 19:16:22 +08:00 
			
		
		
		
	添加审计日志界面
This commit is contained in:
		
							
								
								
									
										33
									
								
								server/admin/api_set_audit.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								server/admin/api_set_audit.go
									
									
									
									
									
										Normal file
									
								
							@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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{}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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">
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										146
									
								
								web/src/pages/set/Audit.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								web/src/pages/set/Audit.vue
									
									
									
									
									
										Normal file
									
								
							@@ -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')},
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user