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/smtp", SetOtherSmtp)
 | 
			
		||||
	r.HandleFunc("/set/other/smtp/edit", SetOtherSmtpEdit)
 | 
			
		||||
	r.HandleFunc("/set/audit/list", SetAuditList)
 | 
			
		||||
 | 
			
		||||
	r.HandleFunc("/user/list", UserList)
 | 
			
		||||
	r.HandleFunc("/user/detail", UserDetail)
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ var configs = []config{
 | 
			
		||||
	{Typ: cfgInt, Name: "mobile_dpd", Usage: "移动端死链接检测时间(秒)", ValInt: 60},
 | 
			
		||||
	{Typ: cfgInt, Name: "session_timeout", Usage: "session过期时间(秒)", ValInt: 3600},
 | 
			
		||||
	// {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{}
 | 
			
		||||
 
 | 
			
		||||
@@ -100,6 +100,10 @@ func checkLinkAcl(group *dbdata.Group, pl *sessdata.Payload) bool {
 | 
			
		||||
 | 
			
		||||
// 访问日志审计
 | 
			
		||||
func logAudit(cSess *sessdata.ConnSession, pl *sessdata.Payload) {
 | 
			
		||||
	if base.Cfg.AuditInterval <= 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ipSrc := waterutil.IPv4Source(pl.Data)
 | 
			
		||||
	ipDst := waterutil.IPv4Destination(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/soft">软件配置</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 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/soft', component: () => import('@/pages/set/Soft')},
 | 
			
		||||
            {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/online', component: () => import('@/pages/user/Online')},
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user