- 修复RDP协议连接导致的任意文件读取漏洞
- RDP协议增加「域」参数 - 增加安全访问功能 - 优化代码
This commit is contained in:
106
pkg/model/login_log.go
Normal file
106
pkg/model/login_log.go
Normal file
@ -0,0 +1,106 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"github.com/sirupsen/logrus"
|
||||
"next-terminal/pkg/global"
|
||||
"next-terminal/pkg/utils"
|
||||
)
|
||||
|
||||
type LoginLog struct {
|
||||
ID string `gorm:"primary_key" json:"id"`
|
||||
UserId string `gorm:"index" json:"userId"`
|
||||
ClientIP string `json:"clientIp"`
|
||||
ClientUserAgent string `json:"clientUserAgent"`
|
||||
LoginTime utils.JsonTime `json:"loginTime"`
|
||||
LogoutTime utils.JsonTime `json:"logoutTime"`
|
||||
Remember bool `json:"remember"`
|
||||
}
|
||||
|
||||
type LoginLogVo struct {
|
||||
ID string `json:"id"`
|
||||
UserId string `json:"userId"`
|
||||
UserName string `json:"userName"`
|
||||
ClientIP string `json:"clientIp"`
|
||||
ClientUserAgent string `json:"clientUserAgent"`
|
||||
LoginTime utils.JsonTime `json:"loginTime"`
|
||||
LogoutTime utils.JsonTime `json:"logoutTime"`
|
||||
Remember bool `json:"remember"`
|
||||
}
|
||||
|
||||
func (r *LoginLog) TableName() string {
|
||||
return "login_logs"
|
||||
}
|
||||
|
||||
func FindPageLoginLog(pageIndex, pageSize int, userId, clientIp string) (o []LoginLogVo, total int64, err error) {
|
||||
|
||||
db := global.DB.Table("login_logs").Select("login_logs.id,login_logs.user_id,login_logs.client_ip,login_logs.client_user_agent,login_logs.login_time, login_logs.logout_time, users.nickname as user_name").Joins("left join users on login_logs.user_id = users.id")
|
||||
dbCounter := global.DB.Table("login_logs").Select("DISTINCT login_logs.id")
|
||||
|
||||
if userId != "" {
|
||||
db = db.Where("login_logs.user_id = ?", userId)
|
||||
dbCounter = dbCounter.Where("login_logs.user_id = ?", userId)
|
||||
}
|
||||
|
||||
if clientIp != "" {
|
||||
db = db.Where("login_logs.client_ip like ?", "%"+clientIp+"%")
|
||||
dbCounter = dbCounter.Where("login_logs.client_ip like ?", "%"+clientIp+"%")
|
||||
}
|
||||
|
||||
err = dbCounter.Count(&total).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
err = db.Order("login_logs.login_time desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
|
||||
if o == nil {
|
||||
o = make([]LoginLogVo, 0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func FindAliveLoginLogs() (o []LoginLog, err error) {
|
||||
err = global.DB.Where("logout_time is null").Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func FindAliveLoginLogsByUserId(userId string) (o []LoginLog, err error) {
|
||||
err = global.DB.Where("logout_time is null and user_id = ?", userId).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func CreateNewLoginLog(o *LoginLog) (err error) {
|
||||
return global.DB.Create(o).Error
|
||||
}
|
||||
|
||||
func DeleteLoginLogByIdIn(ids []string) (err error) {
|
||||
return global.DB.Where("id in ?", ids).Delete(&LoginLog{}).Error
|
||||
}
|
||||
|
||||
func FindLoginLogById(id string) (o LoginLog, err error) {
|
||||
err = global.DB.Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func Logout(token string) (err error) {
|
||||
|
||||
loginLog, err := FindLoginLogById(token)
|
||||
if err != nil {
|
||||
logrus.Warnf("登录日志「%v」获取失败", token)
|
||||
return
|
||||
}
|
||||
|
||||
err = global.DB.Updates(&LoginLog{LogoutTime: utils.NowJsonTime(), ID: token}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
loginLogs, err := FindAliveLoginLogsByUserId(loginLog.UserId)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if len(loginLogs) == 0 {
|
||||
err = UpdateUserOnline(false, loginLog.UserId)
|
||||
}
|
||||
return
|
||||
}
|
Reference in New Issue
Block a user