This commit is contained in:
wangchuxiao 2022-09-06 01:14:36 +08:00
parent 82a8f18e88
commit 821e704b5b
4 changed files with 14 additions and 24 deletions

View File

@ -5,9 +5,11 @@ import (
imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model"
"Open_IM/pkg/common/log"
"Open_IM/pkg/utils"
"errors"
"net/http"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
type CheckLoginLimitReq struct {
@ -22,18 +24,20 @@ func CheckLoginLimit(c *gin.Context) {
req := CheckLoginLimitReq{}
if err := c.BindJSON(&req); err != nil {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.ErrArgs, "errMsg": err.Error()})
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
ip := c.Request.Header.Get("X-Forward-For")
if ip == "" {
ip = c.ClientIP()
}
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "IP: ", ip)
user, err := imdb.GetUserIPLimit(req.UserID)
if err != nil {
if err != nil && !errors.Is(gorm.ErrRecordNotFound, err) {
errMsg := req.OperationID + " imdb.GetUserByUserID failed " + err.Error() + req.UserID
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.ErrDB.ErrCode, "errMsg": errMsg})
return
}
if err := imdb.UpdateIpReocord(req.UserID, ip); err != nil {

View File

@ -57,6 +57,7 @@ func SetPassword(c *gin.Context) {
return
}
if Limited {
log.NewInfo(params.OperationID, utils.GetSelfFuncName(), "is limited", ip, "params:", params)
c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.RegisterLimit, "errMsg": "limited"})
return
}

View File

@ -189,9 +189,9 @@ type UserIpRecord struct {
LastLoginTime time.Time `gorm:"column:last_login_time"`
LastLoginIp string `gorm:"column:last_login_ip;size:15"`
LoginTimes int32 `gorm:"column:login_times"`
LoginLimit int32 `gorm:"column:login_limit"`
}
// ip limit login
type IpLimit struct {
Ip string `gorm:"column:ip;primary_key;size:15"`
LimitRegister int32 `gorm:"column:limit_register;size:1"`
@ -200,6 +200,7 @@ type IpLimit struct {
LimitTime time.Time `gorm:"column:limit_time"`
}
// ip login
type UserIpLimit struct {
UserID string `gorm:"column:user_id;primary_key;size:64"`
Ip string `gorm:"column:ip;primary_key;size:15"`

View File

@ -5,6 +5,7 @@ import (
"Open_IM/pkg/common/constant"
"Open_IM/pkg/common/db"
"Open_IM/pkg/utils"
"errors"
"fmt"
"strconv"
"time"
@ -50,11 +51,6 @@ func UserRegister(user db.User) error {
return nil
}
func DeleteUser(userID string) (i int64) {
i = db.DB.MysqlDB.DefaultGormDB().Table("users").Where("user_id=?", userID).Delete(db.User{}).RowsAffected
return i
}
func GetAllUser() ([]db.User, error) {
var userList []db.User
err := db.DB.MysqlDB.DefaultGormDB().Table("users").Find(&userList).Error
@ -165,15 +161,12 @@ func BlockUser(userID, endDisableTime string) error {
return err
}
if end.Before(time.Now()) {
return constant.ErrDB
return errors.New("endDisableTime is before now")
}
var blockUser db.BlackList
db.DB.MysqlDB.DefaultGormDB().Table("black_lists").Where("uid=?", userID).First(&blockUser)
if blockUser.UserId != "" {
db.DB.MysqlDB.DefaultGormDB().Model(&blockUser).Where("uid=?", blockUser.UserId).Update("end_disable_time", end)
// if user.LoginLimit != 2 {
// db.DB.MysqlDB.DefaultGormDB().Table("users").Where("user_id=?", blockUser.UserId).Update("login_limit", 2)
// }
return nil
}
blockUser = db.BlackList{
@ -181,21 +174,12 @@ func BlockUser(userID, endDisableTime string) error {
BeginDisableTime: time.Now(),
EndDisableTime: end,
}
result := db.DB.MysqlDB.DefaultGormDB().Create(&blockUser)
if result.Error == nil {
// if user.LoginLimit != 2 {
// db.DB.MysqlDB.DefaultGormDB().Table("users").Where("user_id=?", blockUser.UserId).Update("login_limit", 2)
// }
}
return result.Error
err = db.DB.MysqlDB.DefaultGormDB().Create(&blockUser).Error
return err
}
func UnBlockUser(userID string) error {
err := db.DB.MysqlDB.DefaultGormDB().Where("uid=?", userID).Delete(&db.BlackList{}).Error
if err != nil {
return err
}
return db.DB.MysqlDB.DefaultGormDB().Table("users").Where("user_id=?", userID).Update("login_limit", 0).Error
return db.DB.MysqlDB.DefaultGormDB().Where("uid=?", userID).Delete(&db.BlackList{}).Error
}
type BlockUserInfo struct {