mirror of
https://github.com/bjdgyc/anylink.git
synced 2025-08-08 16:43:25 +08:00
优化活动日志代码
This commit is contained in:
@@ -51,3 +51,29 @@ func SetAuditExport(w http.ResponseWriter, r *http.Request) {
|
|||||||
gocsv.Marshal(datas, w)
|
gocsv.Marshal(datas, w)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UserActLogList(w http.ResponseWriter, r *http.Request) {
|
||||||
|
_ = r.ParseForm()
|
||||||
|
pageS := r.FormValue("page")
|
||||||
|
page, _ := strconv.Atoi(pageS)
|
||||||
|
if page < 1 {
|
||||||
|
page = 1
|
||||||
|
}
|
||||||
|
var datas []dbdata.UserActLog
|
||||||
|
session := dbdata.UserActLogIns.GetSession(r.Form)
|
||||||
|
count, err := dbdata.FindAndCount(session, &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,
|
||||||
|
"statusOps": dbdata.UserActLogIns.GetStatusOpsWithTag(),
|
||||||
|
"osOps": dbdata.UserActLogIns.OsOps,
|
||||||
|
"clientOps": dbdata.UserActLogIns.ClientOps,
|
||||||
|
}
|
||||||
|
|
||||||
|
RespSucess(w, data)
|
||||||
|
}
|
||||||
|
@@ -178,7 +178,7 @@ func UserOnline(w http.ResponseWriter, r *http.Request) {
|
|||||||
func UserOffline(w http.ResponseWriter, r *http.Request) {
|
func UserOffline(w http.ResponseWriter, r *http.Request) {
|
||||||
_ = r.ParseForm()
|
_ = r.ParseForm()
|
||||||
token := r.FormValue("token")
|
token := r.FormValue("token")
|
||||||
sessdata.CloseSess(token)
|
sessdata.CloseSess(token, 4)
|
||||||
RespSucess(w, nil)
|
RespSucess(w, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,34 +0,0 @@
|
|||||||
package admin
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
"strconv"
|
|
||||||
|
|
||||||
"github.com/bjdgyc/anylink/dbdata"
|
|
||||||
)
|
|
||||||
|
|
||||||
func UserActLogList(w http.ResponseWriter, r *http.Request) {
|
|
||||||
_ = r.ParseForm()
|
|
||||||
pageS := r.FormValue("page")
|
|
||||||
page, _ := strconv.Atoi(pageS)
|
|
||||||
if page < 1 {
|
|
||||||
page = 1
|
|
||||||
}
|
|
||||||
var datas []dbdata.UserActLog
|
|
||||||
session := dbdata.UserActLogIns.GetSession(r.Form)
|
|
||||||
count, err := dbdata.FindAndCount(session, &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,
|
|
||||||
"statusOps": dbdata.UserActLogIns.GetStatusOpsWithTag(),
|
|
||||||
"osOps": dbdata.UserActLogIns.OsOps,
|
|
||||||
"clientOps": dbdata.UserActLogIns.ClientOps,
|
|
||||||
}
|
|
||||||
|
|
||||||
RespSucess(w, data)
|
|
||||||
}
|
|
@@ -45,6 +45,7 @@ func StartAdmin() {
|
|||||||
r.HandleFunc("/set/other/audit_log/edit", SetOtherAuditLogEdit)
|
r.HandleFunc("/set/other/audit_log/edit", SetOtherAuditLogEdit)
|
||||||
r.HandleFunc("/set/audit/list", SetAuditList)
|
r.HandleFunc("/set/audit/list", SetAuditList)
|
||||||
r.HandleFunc("/set/audit/export", SetAuditExport)
|
r.HandleFunc("/set/audit/export", SetAuditExport)
|
||||||
|
r.HandleFunc("/set/audit/act_log_list", UserActLogList)
|
||||||
|
|
||||||
r.HandleFunc("/user/list", UserList)
|
r.HandleFunc("/user/list", UserList)
|
||||||
r.HandleFunc("/user/detail", UserDetail)
|
r.HandleFunc("/user/detail", UserDetail)
|
||||||
@@ -63,7 +64,6 @@ func StartAdmin() {
|
|||||||
r.HandleFunc("/user/policy/detail", PolicyDetail)
|
r.HandleFunc("/user/policy/detail", PolicyDetail)
|
||||||
r.HandleFunc("/user/policy/set", PolicySet)
|
r.HandleFunc("/user/policy/set", PolicySet)
|
||||||
r.HandleFunc("/user/policy/del", PolicyDel)
|
r.HandleFunc("/user/policy/del", PolicyDel)
|
||||||
r.HandleFunc("/user/act_log/list", UserActLogList)
|
|
||||||
|
|
||||||
r.HandleFunc("/group/list", GroupList)
|
r.HandleFunc("/group/list", GroupList)
|
||||||
r.HandleFunc("/group/names", GroupNames)
|
r.HandleFunc("/group/names", GroupNames)
|
||||||
|
@@ -15,6 +15,12 @@ const (
|
|||||||
UserAuthSuccess = 1 // 认证成功
|
UserAuthSuccess = 1 // 认证成功
|
||||||
UserConnected = 2 // 连线成功
|
UserConnected = 2 // 连线成功
|
||||||
UserLogout = 3 // 用户登出
|
UserLogout = 3 // 用户登出
|
||||||
|
UserLogoutLose = 0 // 用户掉线
|
||||||
|
UserLogoutBanner = 1 // 用户banner弹窗取消
|
||||||
|
UserLogoutClient = 2 // 用户主动登出
|
||||||
|
UserLogoutTimeout = 3 // 用户超时登出
|
||||||
|
UserLogoutAdmin = 4 // 账号被管理员踢下线
|
||||||
|
UserLogoutExpire = 5 // 账号过期被踢下线
|
||||||
)
|
)
|
||||||
|
|
||||||
type UserActLogProcess struct {
|
type UserActLogProcess struct {
|
||||||
@@ -48,9 +54,12 @@ var (
|
|||||||
2: "Unknown",
|
2: "Unknown",
|
||||||
},
|
},
|
||||||
InfoOps: []string{ // 信息
|
InfoOps: []string{ // 信息
|
||||||
0: "用户掉线",
|
UserLogoutLose: "用户掉线",
|
||||||
1: "用户/客户端主动断开",
|
UserLogoutBanner: "用户取消弹窗",
|
||||||
2: "用户被踢下线(管理员/账号过期)",
|
UserLogoutClient: "用户/客户端主动断开",
|
||||||
|
UserLogoutTimeout: "Session过期被踢下线",
|
||||||
|
UserLogoutAdmin: "账号被管理员踢下线",
|
||||||
|
UserLogoutExpire: "账号过期被踢下线",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -104,8 +113,7 @@ func (ua *UserActLogProcess) GetStatusOpsWithTag() interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ua *UserActLogProcess) GetInfoOpsById(id uint8) string {
|
func (ua *UserActLogProcess) GetInfoOpsById(id uint8) string {
|
||||||
infoMap := ua.InfoOps
|
return ua.InfoOps[id]
|
||||||
return infoMap[id]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ua *UserActLogProcess) ParseUserAgent(userAgent string) (os_idx, client_idx uint8, ver string) {
|
func (ua *UserActLogProcess) ParseUserAgent(userAgent string) (os_idx, client_idx uint8, ver string) {
|
||||||
|
@@ -43,7 +43,6 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
// fmt.Printf("%+v \n", cr)
|
// fmt.Printf("%+v \n", cr)
|
||||||
|
|
||||||
setCommonHeader(w)
|
setCommonHeader(w)
|
||||||
if cr.Type == "logout" {
|
if cr.Type == "logout" {
|
||||||
// 退出删除session信息
|
// 退出删除session信息
|
||||||
@@ -100,6 +99,8 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) {
|
|||||||
sess.Group = cr.GroupSelect
|
sess.Group = cr.GroupSelect
|
||||||
sess.MacAddr = strings.ToLower(cr.MacAddressList.MacAddress)
|
sess.MacAddr = strings.ToLower(cr.MacAddressList.MacAddress)
|
||||||
sess.UniqueIdGlobal = cr.DeviceId.UniqueIdGlobal
|
sess.UniqueIdGlobal = cr.DeviceId.UniqueIdGlobal
|
||||||
|
sess.UserAgent = userAgent
|
||||||
|
sess.RemoteAddr = r.RemoteAddr
|
||||||
// 获取客户端mac地址
|
// 获取客户端mac地址
|
||||||
macHw, err := net.ParseMAC(sess.MacAddr)
|
macHw, err := net.ParseMAC(sess.MacAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -7,6 +7,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bjdgyc/anylink/base"
|
"github.com/bjdgyc/anylink/base"
|
||||||
|
"github.com/bjdgyc/anylink/dbdata"
|
||||||
"github.com/bjdgyc/anylink/pkg/utils"
|
"github.com/bjdgyc/anylink/pkg/utils"
|
||||||
"github.com/bjdgyc/anylink/sessdata"
|
"github.com/bjdgyc/anylink/sessdata"
|
||||||
)
|
)
|
||||||
@@ -55,7 +56,7 @@ func LinkCstp(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSessio
|
|||||||
// do nothing
|
// do nothing
|
||||||
// base.Debug("recv keepalive", cSess.IpAddr)
|
// base.Debug("recv keepalive", cSess.IpAddr)
|
||||||
case 0x05: // DISCONNECT
|
case 0x05: // DISCONNECT
|
||||||
cSess.UserDisconnect = true
|
cSess.UserLogoutCode = dbdata.UserLogoutClient
|
||||||
base.Debug("DISCONNECT", cSess.IpAddr)
|
base.Debug("DISCONNECT", cSess.IpAddr)
|
||||||
return
|
return
|
||||||
case 0x03: // DPD-REQ
|
case 0x03: // DPD-REQ
|
||||||
|
@@ -5,6 +5,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bjdgyc/anylink/base"
|
"github.com/bjdgyc/anylink/base"
|
||||||
|
"github.com/bjdgyc/anylink/dbdata"
|
||||||
"github.com/bjdgyc/anylink/pkg/utils"
|
"github.com/bjdgyc/anylink/pkg/utils"
|
||||||
"github.com/bjdgyc/anylink/sessdata"
|
"github.com/bjdgyc/anylink/sessdata"
|
||||||
)
|
)
|
||||||
@@ -57,7 +58,7 @@ func LinkDtls(conn net.Conn, cSess *sessdata.ConnSession) {
|
|||||||
// do nothing
|
// do nothing
|
||||||
// base.Debug("recv keepalive", cSess.IpAddr)
|
// base.Debug("recv keepalive", cSess.IpAddr)
|
||||||
case 0x05: // DISCONNECT
|
case 0x05: // DISCONNECT
|
||||||
cSess.UserDisconnect = true
|
cSess.UserLogoutCode = dbdata.UserLogoutClient
|
||||||
base.Debug("DISCONNECT DTLS", cSess.IpAddr)
|
base.Debug("DISCONNECT DTLS", cSess.IpAddr)
|
||||||
return
|
return
|
||||||
case 0x03: // DPD-REQ
|
case 0x03: // DPD-REQ
|
||||||
|
@@ -37,8 +37,7 @@ type ConnSession struct {
|
|||||||
IfName string
|
IfName string
|
||||||
Client string // 客户端 mobile pc
|
Client string // 客户端 mobile pc
|
||||||
UserAgent string // 客户端信息
|
UserAgent string // 客户端信息
|
||||||
UserDisconnect bool // 用户/客户端主动登出
|
UserLogoutCode uint8 // 用户/客户端主动登出
|
||||||
UserKickout bool // 被踢下线
|
|
||||||
CstpDpd int
|
CstpDpd int
|
||||||
Group *dbdata.Group
|
Group *dbdata.Group
|
||||||
Limit *LimitRater
|
Limit *LimitRater
|
||||||
@@ -76,6 +75,8 @@ type Session struct {
|
|||||||
Group string
|
Group string
|
||||||
AuthStep string
|
AuthStep string
|
||||||
AuthPass string
|
AuthPass string
|
||||||
|
RemoteAddr string
|
||||||
|
UserAgent string
|
||||||
|
|
||||||
LastLogin time.Time
|
LastLogin time.Time
|
||||||
IsActive bool
|
IsActive bool
|
||||||
@@ -113,7 +114,7 @@ func checkSession() {
|
|||||||
|
|
||||||
// 删除过期session
|
// 删除过期session
|
||||||
for _, v := range outToken {
|
for _, v := range outToken {
|
||||||
CloseSess(v)
|
CloseSess(v, dbdata.UserLogoutTimeout)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@@ -133,7 +134,7 @@ func CloseUserLimittimeSession() {
|
|||||||
}
|
}
|
||||||
sessMux.RUnlock()
|
sessMux.RUnlock()
|
||||||
for _, v := range limitTimeToken {
|
for _, v := range limitTimeToken {
|
||||||
CloseSess(v)
|
CloseSess(v, dbdata.UserLogoutExpire)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -411,7 +412,7 @@ func DelSess(token string) {
|
|||||||
// sessions.Delete(token)
|
// sessions.Delete(token)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CloseSess(token string) {
|
func CloseSess(token string, code ...uint8) {
|
||||||
sessMux.Lock()
|
sessMux.Lock()
|
||||||
defer sessMux.Unlock()
|
defer sessMux.Unlock()
|
||||||
sess, ok := sessions[token]
|
sess, ok := sessions[token]
|
||||||
@@ -421,8 +422,15 @@ func CloseSess(token string) {
|
|||||||
|
|
||||||
delete(sessions, token)
|
delete(sessions, token)
|
||||||
delete(dtlsIds, sess.DtlsSid)
|
delete(dtlsIds, sess.DtlsSid)
|
||||||
sess.CSess.UserKickout = true
|
|
||||||
|
if sess.CSess != nil {
|
||||||
|
if len(code) > 0 {
|
||||||
|
sess.CSess.UserLogoutCode = code[0]
|
||||||
|
}
|
||||||
sess.CSess.Close()
|
sess.CSess.Close()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
AddUserActLogBySess(sess)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CloseCSess(token string) {
|
func CloseCSess(token string) {
|
||||||
@@ -433,14 +441,16 @@ func CloseCSess(token string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if sess.CSess != nil {
|
||||||
sess.CSess.Close()
|
sess.CSess.Close()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func DelSessByStoken(stoken string) {
|
func DelSessByStoken(stoken string) {
|
||||||
stoken = strings.TrimSpace(stoken)
|
stoken = strings.TrimSpace(stoken)
|
||||||
sarr := strings.Split(stoken, "@")
|
sarr := strings.Split(stoken, "@")
|
||||||
token := sarr[1]
|
token := sarr[1]
|
||||||
CloseSess(token)
|
CloseSess(token, dbdata.UserLogoutBanner)
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddUserActLog(cs *ConnSession) {
|
func AddUserActLog(cs *ConnSession) {
|
||||||
@@ -451,13 +461,18 @@ func AddUserActLog(cs *ConnSession) {
|
|||||||
RemoteAddr: cs.RemoteAddr,
|
RemoteAddr: cs.RemoteAddr,
|
||||||
Status: dbdata.UserLogout,
|
Status: dbdata.UserLogout,
|
||||||
}
|
}
|
||||||
infoId := uint8(0)
|
ua.Info = dbdata.UserActLogIns.GetInfoOpsById(cs.UserLogoutCode)
|
||||||
switch {
|
|
||||||
case cs.UserDisconnect:
|
|
||||||
infoId = 1
|
|
||||||
case cs.UserKickout:
|
|
||||||
infoId = 2
|
|
||||||
}
|
|
||||||
ua.Info = dbdata.UserActLogIns.GetInfoOpsById(infoId)
|
|
||||||
dbdata.UserActLogIns.Add(ua, cs.UserAgent)
|
dbdata.UserActLogIns.Add(ua, cs.UserAgent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AddUserActLogBySess(sess *Session) {
|
||||||
|
ua := dbdata.UserActLog{
|
||||||
|
Username: sess.Username,
|
||||||
|
GroupName: sess.Group,
|
||||||
|
IpAddr: "",
|
||||||
|
RemoteAddr: sess.RemoteAddr,
|
||||||
|
Status: dbdata.UserLogout,
|
||||||
|
}
|
||||||
|
ua.Info = dbdata.UserActLogIns.GetInfoOpsById(1)
|
||||||
|
dbdata.UserActLogIns.Add(ua, sess.UserAgent)
|
||||||
|
}
|
||||||
|
@@ -193,7 +193,7 @@ export default {
|
|||||||
getData(page) {
|
getData(page) {
|
||||||
console.log(this.searchForm)
|
console.log(this.searchForm)
|
||||||
this.page = page
|
this.page = page
|
||||||
axios.get('/user/act_log/list', {
|
axios.get('/set/audit/act_log_list', {
|
||||||
params: {
|
params: {
|
||||||
page: page,
|
page: page,
|
||||||
username: this.searchForm.username || '',
|
username: this.searchForm.username || '',
|
||||||
|
Reference in New Issue
Block a user