From 821e704b5b6357bdd63c7a1e5b2aba2449f4089d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 6 Sep 2022 01:14:36 +0800 Subject: [PATCH] cms --- internal/demo/register/check_login.go | 8 ++++-- internal/demo/register/set_password.go | 1 + pkg/common/db/model_struct.go | 3 ++- .../mysql_model/im_mysql_model/user_model.go | 26 ++++--------------- 4 files changed, 14 insertions(+), 24 deletions(-) diff --git a/internal/demo/register/check_login.go b/internal/demo/register/check_login.go index 818cd6c27..6592172ca 100644 --- a/internal/demo/register/check_login.go +++ b/internal/demo/register/check_login.go @@ -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 { diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index f2cf70d39..74e93b95e 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -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 } diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index 043240532..6b767b6dc 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -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"` diff --git a/pkg/common/db/mysql_model/im_mysql_model/user_model.go b/pkg/common/db/mysql_model/im_mysql_model/user_model.go index caf76744c..a88f83573 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/user_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/user_model.go @@ -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 {