dockerfiles/anylink/server/dbdata/audit.go

63 lines
1.5 KiB
Go

package dbdata
import (
"encoding/json"
"xorm.io/xorm"
)
type SearchCon struct {
Username string `json:"username"`
Src string `json:"src"`
Dst string `json:"dst"`
DstPort string `json:"dst_port"`
AccessProto string `json:"access_proto"`
Date []string `json:"date"`
Info string `json:"info"`
Sort int `json:"sort"`
}
func GetAuditSession(search string) *xorm.Session {
session := xdb.Where("1=1")
if search == "" {
return session
}
var searchData SearchCon
err := json.Unmarshal([]byte(search), &searchData)
if err != nil {
return session
}
if searchData.Username != "" {
session.And("username = ?", searchData.Username)
}
if searchData.Src != "" {
session.And("src = ?", searchData.Src)
}
if searchData.Dst != "" {
session.And("dst = ?", searchData.Dst)
}
if searchData.DstPort != "" {
session.And("dst_port = ?", searchData.DstPort)
}
if searchData.AccessProto != "" {
session.And("access_proto = ?", searchData.AccessProto)
}
if len(searchData.Date) > 0 && searchData.Date[0] != "" {
session.And("created_at BETWEEN ? AND ?", searchData.Date[0], searchData.Date[1])
}
if searchData.Info != "" {
session.And("info LIKE ?", "%"+searchData.Info+"%")
}
if searchData.Sort == 1 {
session.OrderBy("id desc")
} else {
session.OrderBy("id asc")
}
return session
}
func ClearAccessAudit(ts string) (int64, error) {
affected, err := xdb.Where("created_at < '" + ts + "'").Delete(&AccessAudit{})
return affected, err
}