- 修复「修改接入网关失败」的问题
- 完成「[功能请求]审计的历史会话建议添加“已阅”的功能」close #194 - 增加一键删除登录日志和历史会话的功能
This commit is contained in:
@ -39,9 +39,12 @@ func (r AccessGatewayService) ReConnectAll() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for i := range gateways {
|
||||
r.ReConnect(&gateways[i])
|
||||
if len(gateways) > 0 {
|
||||
for i := range gateways {
|
||||
r.ReConnect(&gateways[i])
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -37,3 +37,41 @@ func (r SessionService) FixSessionState() error {
|
||||
func (r SessionService) EmptyPassword() error {
|
||||
return r.sessionRepository.EmptyPassword()
|
||||
}
|
||||
|
||||
func (r SessionService) ClearOfflineSession() error {
|
||||
sessions, err := r.sessionRepository.FindByStatus(constant.Disconnected)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sessionIds := make([]string, 0)
|
||||
for i := range sessions {
|
||||
sessionIds = append(sessionIds, sessions[i].ID)
|
||||
}
|
||||
return r.sessionRepository.DeleteByIds(sessionIds)
|
||||
}
|
||||
|
||||
func (r SessionService) ReviewedAll() error {
|
||||
sessions, err := r.sessionRepository.FindAllUnReviewed()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var sessionIds = make([]string, 0)
|
||||
total := len(sessions)
|
||||
for i := range sessions {
|
||||
sessionIds = append(sessionIds, sessions[i].ID)
|
||||
if i >= 100 && i%100 == 0 {
|
||||
if err := r.sessionRepository.UpdateReadByIds(true, sessionIds); err != nil {
|
||||
return err
|
||||
}
|
||||
sessionIds = nil
|
||||
} else {
|
||||
if i == total-1 {
|
||||
if err := r.sessionRepository.UpdateReadByIds(true, sessionIds); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -26,7 +26,10 @@ func NewStorageService(storageRepository *repository.StorageRepository, userRepo
|
||||
}
|
||||
|
||||
func (r StorageService) InitStorages() error {
|
||||
users := r.userRepository.FindAll()
|
||||
users, err := r.userRepository.FindAll()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for i := range users {
|
||||
userId := users[i].ID
|
||||
_, err := r.storageRepository.FindByOwnerIdAndDefault(userId, true)
|
||||
|
@ -1,6 +1,7 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"next-terminal/server/global/cache"
|
||||
"strings"
|
||||
|
||||
"next-terminal/server/constant"
|
||||
@ -21,7 +22,10 @@ func NewUserService(userRepository *repository.UserRepository, loginLogRepositor
|
||||
|
||||
func (r UserService) InitUser() (err error) {
|
||||
|
||||
users := r.userRepository.FindAll()
|
||||
users, err := r.userRepository.FindAll()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(users) == 0 {
|
||||
initPassword := "admin"
|
||||
@ -37,6 +41,7 @@ func (r UserService) InitUser() (err error) {
|
||||
Nickname: "超级管理员",
|
||||
Type: constant.TypeAdmin,
|
||||
Created: utils.NowJsonTime(),
|
||||
Status: constant.StatusEnabled,
|
||||
}
|
||||
if err := r.userRepository.Create(&user); err != nil {
|
||||
return err
|
||||
@ -83,12 +88,14 @@ func (r UserService) FixUserOnlineState() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r UserService) Logout(token string) (err error) {
|
||||
func (r UserService) LogoutByToken(token string) (err error) {
|
||||
loginLog, err := r.loginLogRepository.FindById(token)
|
||||
if err != nil {
|
||||
log.Warnf("登录日志「%v」获取失败", token)
|
||||
return
|
||||
}
|
||||
cacheKey := r.BuildCacheKeyByToken(token)
|
||||
cache.GlobalCache.Delete(cacheKey)
|
||||
|
||||
loginLogForUpdate := &model.LoginLog{LogoutTime: utils.NowJsonTime(), ID: token}
|
||||
err = r.loginLogRepository.Update(loginLogForUpdate)
|
||||
@ -107,6 +114,26 @@ func (r UserService) Logout(token string) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserService) LogoutById(id string) error {
|
||||
user, err := r.userRepository.FindById(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
username := user.Username
|
||||
loginLogs, err := r.loginLogRepository.FindAliveLoginLogsByUsername(username)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for j := range loginLogs {
|
||||
token := loginLogs[j].ID
|
||||
if err := r.LogoutByToken(token); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r UserService) BuildCacheKeyByToken(token string) string {
|
||||
cacheKey := strings.Join([]string{constant.Token, token}, ":")
|
||||
return cacheKey
|
||||
@ -121,9 +148,36 @@ func (r UserService) OnEvicted(key string, value interface{}) {
|
||||
if strings.HasPrefix(key, constant.Token) {
|
||||
token := r.GetTokenFormCacheKey(key)
|
||||
log.Debugf("用户Token「%v」过期", token)
|
||||
err := r.Logout(token)
|
||||
err := r.LogoutByToken(token)
|
||||
if err != nil {
|
||||
log.Errorf("退出登录失败 %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (r UserService) UpdateStatusById(id string, status string) error {
|
||||
if constant.StatusDisabled == status {
|
||||
// 将该用户下线
|
||||
if err := r.LogoutById(id); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
u := model.User{
|
||||
ID: id,
|
||||
Status: status,
|
||||
}
|
||||
return r.userRepository.Update(&u)
|
||||
}
|
||||
|
||||
func (r UserService) DeleteLoginLogs(tokens []string) error {
|
||||
for i := range tokens {
|
||||
token := tokens[i]
|
||||
if err := r.LogoutByToken(token); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := r.loginLogRepository.DeleteById(token); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user