From ab76d460079b00dfdded3181ccda1f58c02abd7d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 17:19:39 +0800 Subject: [PATCH 1/2] demo --- internal/demo/register/login.go | 8 ++- internal/demo/register/reset_password.go | 10 +-- internal/demo/register/set_password.go | 7 +- pkg/common/db/model_struct.go | 1 + .../mysql_model/im_mysql_model/demo_model.go | 3 +- pkg/utils/encryption .go | 64 +++++++++++++++++++ pkg/utils/md5.go | 13 ---- 7 files changed, 84 insertions(+), 22 deletions(-) create mode 100644 pkg/utils/encryption .go delete mode 100644 pkg/utils/md5.go diff --git a/internal/demo/register/login.go b/internal/demo/register/login.go index b5d587844..4f0ea5cbd 100644 --- a/internal/demo/register/login.go +++ b/internal/demo/register/login.go @@ -46,12 +46,18 @@ func Login(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"errCode": constant.PasswordErr, "errMsg": "password err"}) return } + var userID string + if r.UserID != "" { + userID = r.UserID + } else { + userID = r.Account + } url := fmt.Sprintf("http://%s:%d/auth/user_token", utils.ServerIP, config.Config.Api.GinPort[0]) openIMGetUserToken := api.UserTokenReq{} openIMGetUserToken.OperationID = params.OperationID openIMGetUserToken.Platform = params.Platform openIMGetUserToken.Secret = config.Config.Secret - openIMGetUserToken.UserID = account + openIMGetUserToken.UserID = userID openIMGetUserTokenResp := api.UserTokenResp{} bMsg, err := http2.Post(url, openIMGetUserToken, 2) if err != nil { diff --git a/internal/demo/register/reset_password.go b/internal/demo/register/reset_password.go index b668f4f62..aee1a7cf5 100644 --- a/internal/demo/register/reset_password.go +++ b/internal/demo/register/reset_password.go @@ -15,8 +15,8 @@ type resetPasswordRequest struct { VerificationCode string `json:"verificationCode" binding:"required"` Email string `json:"email"` PhoneNumber string `json:"phoneNumber"` - NewPassword string `json:"newPassword" binding:"required"` - OperationID string `json:"operationID"` + NewPassword string `json:"newPassword" binding:"required"` + OperationID string `json:"operationID"` } func ResetPassword(c *gin.Context) { @@ -44,12 +44,14 @@ func ResetPassword(c *gin.Context) { } user, err := im_mysql_model.GetRegister(account) if err != nil || user.Account == "" { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "get register error", err.Error()) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "get register error", err.Error()) + } c.JSON(http.StatusOK, gin.H{"errCode": constant.NotRegistered, "errMsg": "user not register!"}) return } if err := im_mysql_model.ResetPassword(account, req.NewPassword); err != nil { - c.JSON(http.StatusOK, gin.H{"errCode": constant.ResetPasswordFailed, "errMsg": "reset password failed: "+err.Error()}) + c.JSON(http.StatusOK, gin.H{"errCode": constant.ResetPasswordFailed, "errMsg": "reset password failed: " + err.Error()}) return } c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "reset password success"}) diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 7a0578264..c45f53a23 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -52,11 +52,12 @@ func SetPassword(c *gin.Context) { return } } + userID := utils.Md5(account) url := config.Config.Demo.ImAPIURL + "/auth/user_register" openIMRegisterReq := api.UserRegisterReq{} openIMRegisterReq.OperationID = params.OperationID openIMRegisterReq.Platform = params.Platform - openIMRegisterReq.UserID = account + openIMRegisterReq.UserID = userID openIMRegisterReq.Nickname = params.Name openIMRegisterReq.Secret = config.Config.Secret openIMRegisterResp := api.UserRegisterResp{} @@ -76,7 +77,7 @@ func SetPassword(c *gin.Context) { return } log.Info(params.OperationID, "begin store mysql", account, params.Password) - err = im_mysql_model.SetPassword(account, params.Password, params.Ex) + err = im_mysql_model.SetPassword(account, params.Password, params.Ex, userID) if err != nil { log.NewError(params.OperationID, "set phone number password error", account, "err", err.Error()) c.JSON(http.StatusOK, gin.H{"errCode": constant.RegisterFailed, "errMsg": err.Error()}) @@ -84,7 +85,7 @@ func SetPassword(c *gin.Context) { } log.Info(params.OperationID, "end setPassword", account, params.Password) // demo onboarding - onboardingProcess(params.OperationID, account, params.Name) + onboardingProcess(params.OperationID, userID, params.Name) c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "", "data": openIMRegisterResp.UserToken}) return } diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index b0854169e..f8e9bca7b 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -6,6 +6,7 @@ type Register struct { Account string `gorm:"column:account;primary_key;type:char(255)" json:"account"` Password string `gorm:"column:password;type:varchar(255)" json:"password"` Ex string `gorm:"column:ex;size:1024" json:"ex"` + UserID string `gorm:"column:user_id;type:varchar(255)" json:"userID"` } // diff --git a/pkg/common/db/mysql_model/im_mysql_model/demo_model.go b/pkg/common/db/mysql_model/im_mysql_model/demo_model.go index eff3050be..278e8bd7f 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/demo_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/demo_model.go @@ -15,11 +15,12 @@ func GetRegister(account string) (*db.Register, error) { account).Take(&r).Error } -func SetPassword(account, password, ex string) error { +func SetPassword(account, password, ex, userID string) error { r := db.Register{ Account: account, Password: password, Ex: ex, + UserID: userID, } dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { diff --git a/pkg/utils/encryption .go b/pkg/utils/encryption .go new file mode 100644 index 000000000..a4862de2e --- /dev/null +++ b/pkg/utils/encryption .go @@ -0,0 +1,64 @@ +package utils + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/md5" + "encoding/hex" + "errors" +) + +func Md5(s string, salt ...string) string { + h := md5.New() + h.Write([]byte(s)) + if len(salt) > 0 { + h.Write([]byte(salt[0])) + } + cipher := h.Sum(nil) + return hex.EncodeToString(cipher) +} + +func AesEncrypt(data []byte, key []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + blockSize := block.BlockSize() + encryptBytes := pkcs7Padding(data, blockSize) + crypted := make([]byte, len(encryptBytes)) + blockMode := cipher.NewCBCEncrypter(block, key[:blockSize]) + blockMode.CryptBlocks(crypted, encryptBytes) + return crypted, nil +} + +func AesDecrypt(data []byte, key []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + blockSize := block.BlockSize() + blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) + crypted := make([]byte, len(data)) + blockMode.CryptBlocks(crypted, data) + crypted, err = pkcs7UnPadding(crypted) + if err != nil { + return nil, err + } + return crypted, nil +} + +func pkcs7Padding(data []byte, blockSize int) []byte { + padding := blockSize - len(data)%blockSize + padText := bytes.Repeat([]byte{byte(padding)}, padding) + return append(data, padText...) +} + +func pkcs7UnPadding(data []byte) ([]byte, error) { + length := len(data) + if length == 0 { + return nil, errors.New("encrypt error") + } + unPadding := int(data[length-1]) + return data[:(length - unPadding)], nil +} diff --git a/pkg/utils/md5.go b/pkg/utils/md5.go deleted file mode 100644 index 8e3531668..000000000 --- a/pkg/utils/md5.go +++ /dev/null @@ -1,13 +0,0 @@ -package utils - -import ( - "crypto/md5" - "encoding/hex" -) - -func Md5(s string) string { - h := md5.New() - h.Write([]byte(s)) - cipher := h.Sum(nil) - return hex.EncodeToString(cipher) -} From ceca0f095bcc946114a0edcaa2a57007472fabc2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 17:24:30 +0800 Subject: [PATCH 2/2] demo --- pkg/common/db/mysql.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/common/db/mysql.go b/pkg/common/db/mysql.go index 0f9f4303f..9713537b9 100644 --- a/pkg/common/db/mysql.go +++ b/pkg/common/db/mysql.go @@ -53,7 +53,9 @@ func initMysqlDB() { } fmt.Println("open db ok ", dsn) - db.AutoMigrate(&Friend{}, + db.AutoMigrate( + &Register{}, + &Friend{}, &FriendRequest{}, &Group{}, &GroupMember{},