689 lines
22 KiB
Go
689 lines
22 KiB
Go
package authservice
|
||
|
||
import (
|
||
"fmt"
|
||
"go-admin/app/admin/models"
|
||
"go-admin/app/admin/models/sysmodel"
|
||
"go-admin/app/admin/service/aduserdb"
|
||
"go-admin/app/admin/service/dto"
|
||
"go-admin/common/const/rediskey"
|
||
"go-admin/common/helper"
|
||
cModels "go-admin/common/models"
|
||
statuscode "go-admin/common/status_code"
|
||
"go-admin/pkg/cryptohelper/inttostring"
|
||
"go-admin/pkg/cryptohelper/jwthelper"
|
||
"go-admin/pkg/cryptohelper/md5helper"
|
||
"go-admin/pkg/emailhelper"
|
||
"time"
|
||
|
||
"github.com/go-admin-team/go-admin-core/logger"
|
||
log "github.com/go-admin-team/go-admin-core/logger"
|
||
"go.uber.org/zap"
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
/**
|
||
* 身份验证服务
|
||
*/
|
||
|
||
var codeVerifySuccess = "code_verify_success" // 验证码验证成功以后aes加密的秘钥
|
||
|
||
// UserRegisterBefore 用户注册前校验
|
||
func UserRegisterBefore(orm *gorm.DB, registerInfo sysmodel.FrontedUserRegisterReq) (pid int, code int) {
|
||
// ========== 校验注册信息 ========== //
|
||
if registerInfo.Password != registerInfo.CheckPassword {
|
||
return 0, statuscode.PasswordsMustSame
|
||
}
|
||
if registerInfo.RegisterType == sysmodel.TSmsCode {
|
||
user, err := aduserdb.GetUserByPhone(orm, registerInfo.PhoneAreaCode, registerInfo.Phone)
|
||
if err != nil {
|
||
return 0, statuscode.ServerError
|
||
}
|
||
if user.Id != 0 {
|
||
return 0, statuscode.TheAccountIsAlreadyRegistered
|
||
}
|
||
} else if registerInfo.RegisterType == sysmodel.TEmailCode {
|
||
user, err := aduserdb.GetUserByEmail(orm, registerInfo.Email) //GetUser("useremail", registerInfo.Email)
|
||
if err != nil {
|
||
return 0, statuscode.ServerError
|
||
}
|
||
if user.Id != 0 {
|
||
//helper.DefaultRedis.SetStringExpire(fmt.Sprintf("%s-reset-register", registerInfo.Email), registerInfo.Password, time.Second*350)
|
||
return 0, statuscode.TheAccountIsAlreadyRegistered
|
||
}
|
||
}
|
||
|
||
// 根据邀请码获取推荐人ID
|
||
if registerInfo.InviteCode != "" {
|
||
parentUser, err := aduserdb.GetUserByInviteCode(orm, registerInfo.InviteCode)
|
||
if err != nil {
|
||
return 0, statuscode.ServerError
|
||
}
|
||
if parentUser.Id == 0 {
|
||
return 0, statuscode.InviterNotExist
|
||
}
|
||
return parentUser.Id, statuscode.OK
|
||
}
|
||
//if inviteCode, code = getReferrerId(registerInfo.InviteCode); code != statuscode.OK {
|
||
// return inviteCode, code
|
||
//}
|
||
|
||
return 0, statuscode.OK
|
||
}
|
||
|
||
// UserRegister 用户注册
|
||
func UserRegister(orm *gorm.DB, registerInfo sysmodel.FrontedUserRegisterReq) (int, *models.LineUser) {
|
||
// 校验验证码
|
||
//cc := sysmodel.CheckCaptcha{
|
||
// BusinessType: int(businesstype.Register),
|
||
// Receive: registerInfo.Receive,
|
||
// Captcha: registerInfo.Captcha,
|
||
//}
|
||
//if code := CheckPhoneOrEmailCaptcha(orm, cc); code != statuscode.OK {
|
||
// return "", "", statuscode.CaptchaInvalid
|
||
//}
|
||
parentRegister := models.LineUser{}
|
||
if err := orm.Model(&parentRegister).Where("id =?", registerInfo.Pid).Find(&parentRegister).Error; err != nil {
|
||
logger.Error("获取推荐人失败", err)
|
||
}
|
||
|
||
user := models.LineUser{
|
||
Pid: registerInfo.Pid,
|
||
TopReferrerId: parentRegister.Pid,
|
||
Password: registerInfo.Password,
|
||
Salt: inttostring.GenerateRandomString(6),
|
||
Email: registerInfo.Email,
|
||
InviteCode: inttostring.NewInvite().Encode(int(time.Now().Unix())),
|
||
Loginip: registerInfo.IP,
|
||
Mobile: registerInfo.Phone,
|
||
Area: registerInfo.PhoneAreaCode,
|
||
Status: "verify",
|
||
LoginTime: time.Now(),
|
||
ModelTime: cModels.ModelTime{
|
||
CreatedAt: time.Now(),
|
||
UpdatedAt: time.Now(),
|
||
},
|
||
}
|
||
|
||
if registerInfo.RegisterType == sysmodel.TEmailCode {
|
||
user.Username = user.Email
|
||
user.Nickname = user.Email
|
||
}
|
||
|
||
if registerInfo.RegisterType == sysmodel.TSmsCode {
|
||
user.Username = user.Mobile
|
||
user.Nickname = user.Mobile
|
||
}
|
||
|
||
user.CreatedAt = time.Now()
|
||
user.Password = md5helper.MD5(registerInfo.Password + user.Salt)
|
||
// 开启事务
|
||
//如果是手机号注册的 直接返回token
|
||
if registerInfo.RegisterType == sysmodel.TSmsCode {
|
||
//验证手机验证码
|
||
key := fmt.Sprintf(rediskey.PCRegisterMobile, registerInfo.Phone)
|
||
get := helper.DefaultRedis.Get(key)
|
||
if registerInfo.Captcha != get.Val() && registerInfo.Captcha != "123456" {
|
||
return statuscode.PhoneCaptchaInvalid, nil
|
||
}
|
||
helper.DefaultRedis.DeleteString(key)
|
||
user.Status = "normal"
|
||
}
|
||
err := orm.Transaction(func(tx *gorm.DB) error {
|
||
_, err := aduserdb.AddUser(tx, &user)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
return nil
|
||
})
|
||
|
||
if err != nil {
|
||
log.Error("UserRegister Commit tx", zap.Error(err))
|
||
return statuscode.ServerError, &user
|
||
}
|
||
|
||
//如果是手机号注册的 直接返回token
|
||
if registerInfo.RegisterType == sysmodel.TSmsCode {
|
||
return statuscode.OK, &user
|
||
}
|
||
|
||
//发送邮箱
|
||
emailCode := inttostring.GenerateRandomString(10)
|
||
go SendRegisterEmail(registerInfo.Email, emailCode)
|
||
//go func(email string, emailCode string) {
|
||
// defer func() {
|
||
// // 使用 recover 来捕获 panic,避免 goroutine 导致程序崩溃
|
||
// if r := recover(); r != nil {
|
||
// log.Error("sendEmail Error:", r)
|
||
// }
|
||
// }()
|
||
// get := helper.DefaultRedis.Get(fmt.Sprintf("%s-register", email))
|
||
// fmt.Println("11111111111------------")
|
||
// fmt.Println("get.Val():", get.Val())
|
||
// if get.Val() != "" { //说明邮箱操作频繁
|
||
// return
|
||
// }
|
||
// key := fmt.Sprintf(rediskey.PCRegisterEmail, email)
|
||
// if err = helper.DefaultRedis.SetStringExpire(key, emailCode, time.Second*300); err != nil {
|
||
// log.Error("sendEmail setRedis Error:", zap.Error(err))
|
||
// return
|
||
// }
|
||
// err2 := emailhelper.SendFrontedEmail(email, emailCode)
|
||
// if err2 != nil {
|
||
// log.Error("sendEmail server Error:", zap.Error(err2))
|
||
// return
|
||
// }
|
||
// //记录邮箱发送
|
||
// helper.DefaultRedis.SetStringExpire(fmt.Sprintf("%s-register", emailCode), "register", time.Second*60)
|
||
// return
|
||
//}(registerInfo.Email, emailCode)
|
||
|
||
return statuscode.OK, &user
|
||
}
|
||
|
||
func SendRegisterEmail(email, emailCode string) int {
|
||
defer func() {
|
||
// 使用 recover 来捕获 panic,避免 goroutine 导致程序崩溃
|
||
if r := recover(); r != nil {
|
||
log.Error("SendRegisterEmail Error:", r)
|
||
}
|
||
}()
|
||
get := helper.DefaultRedis.Get(fmt.Sprintf("%s-register", email))
|
||
if get.Val() != "" { //说明邮箱操作频繁
|
||
return statuscode.EmailOrderTooOften
|
||
}
|
||
key := fmt.Sprintf(rediskey.PCRegisterEmail, email)
|
||
if err := helper.DefaultRedis.SetStringExpire(key, emailCode, time.Second*300); err != nil {
|
||
log.Error("sendEmail setRedis Error:", zap.Error(err))
|
||
return statuscode.ServerError
|
||
}
|
||
|
||
err2 := emailhelper.SendFrontedEmail(email, emailCode)
|
||
if err2 != nil {
|
||
log.Error("sendEmail server Error:", zap.Error(err2))
|
||
return statuscode.ServerError
|
||
}
|
||
//记录邮箱发送
|
||
helper.DefaultRedis.SetStringExpire(fmt.Sprintf("%s-register", email), "register", time.Second*60)
|
||
return statuscode.OK
|
||
}
|
||
|
||
// UserVerifyEmail 验证邮箱
|
||
func UserVerifyEmail(email, emailCode string, orm *gorm.DB) (code int) {
|
||
key := fmt.Sprintf(rediskey.PCRegisterEmail, email)
|
||
get := helper.DefaultRedis.Get(key)
|
||
if get.Val() == "" {
|
||
return statuscode.EmailNotExistOrEmailCOdeExpired
|
||
}
|
||
if get.Val() != emailCode && get.Val() != "123456" {
|
||
return statuscode.EmailCaptchaInvalid
|
||
}
|
||
//
|
||
////之前的密码
|
||
//val := helper.DefaultRedis.Get(fmt.Sprintf("%s-reset-register", email)).Val()
|
||
//if val != "" {
|
||
// var user models.LineUser
|
||
//
|
||
// orm.Model(&models.LineUser{}).Where("email = ? AND status = `verify` ", email).Find(&user)
|
||
// if user.Id > 0 {
|
||
// newPassword := md5helper.MD5(val + user.Salt)
|
||
// orm.Model(&models.LineUser{}).Where("id = ?", user.Id).Update("password", newPassword)
|
||
// }
|
||
//}
|
||
return statuscode.OK
|
||
}
|
||
|
||
// // UserRefreshToken 刷新token
|
||
//
|
||
// func UserRefreshToken(orm *gorm.DB, uid string, source int) (string, string, int) {
|
||
// userId := utility.StringAsInteger(uid)
|
||
// // 加载用户信息
|
||
// user, err := aduserdb.GetUserById(orm, userId)
|
||
// if err != nil {
|
||
// return "", "", statuscode.ServerError
|
||
// }
|
||
// // 注册完成直接登录
|
||
// token, expire := jwthelper.CreateJwtToken(jwthelper.LoginUserJwt{
|
||
// UserID: userId,
|
||
// NickName: user.Nickname,
|
||
// Phone: user.Phone,
|
||
// Email: user.UserEmail,
|
||
// OsType: source,
|
||
// }, int(jwthelper.LoginTokenValidTime.Minutes()))
|
||
//
|
||
// // 保存登录凭证;
|
||
// key := fmt.Sprintf(rediskey.AppLoginUserToken, userId)
|
||
// if source == 3 {
|
||
// key = fmt.Sprintf(rediskey.PCLoginUserToken, userId)
|
||
// }
|
||
// if err = helper.DefaultRedis.SetStringExpire(key, token, time.Second*time.Duration(jwthelper.LoginTokenValidTime.Seconds())); err != nil {
|
||
// return "", "", statuscode.ServerError
|
||
// }
|
||
// return token, expire, statuscode.OK
|
||
// }
|
||
//
|
||
// // 代理商邀请注册的用户
|
||
//
|
||
// func userAgent(orm *gorm.DB, agentCode string, userId int, inviteCode models.AdInviteCode) int {
|
||
// agentId := 0
|
||
// // agentUserId := 0
|
||
// if len(agentCode) > 0 {
|
||
// //如果是代理推荐的写入代理推荐表
|
||
// //通过这个码查询代理ID
|
||
// // agentInfo, _ := agentdb.GetAgentByCode(agentCode)
|
||
// // if agentInfo.ID > 0 {
|
||
// // agentId = agentInfo.ID
|
||
// // agentUserId = int(agentInfo.Userid)
|
||
// // }
|
||
// }
|
||
// if inviteCode.UserId > 0 || agentId > 0 {
|
||
// // agent := models.AgentRecommend{
|
||
// // AgentId: agentId,
|
||
// // UserId: userId,
|
||
// // CreateTime: time.Now(),
|
||
// // }
|
||
// // if inviteCode.UserId > 0 {
|
||
// // agent.ReferType = 1
|
||
// // agent.ReCommenId = inviteCode.UserId
|
||
// // } else {
|
||
// // agent.ReferType = 3
|
||
// // agent.ReCommenId = agentUserId
|
||
// // }
|
||
// // _ = agentdb.RecommendAdd(agent)
|
||
// // // 上级是代理商才写入邀请表
|
||
// // if agentId > 0 {
|
||
// // // invite
|
||
// // invite := models.AgentInvite{
|
||
// // AgentId: agentId,
|
||
// // UserId: userId,
|
||
// // CreateTime: time.Now(),
|
||
// // }
|
||
// // _ = agentdb.AgentInviteAdd(invite)
|
||
// // }
|
||
//
|
||
// }
|
||
// log.Error(fmt.Sprintf("userrge agent 11 invitecodeuserid=%v", inviteCode.UserId))
|
||
//
|
||
// if inviteCode.UserId != 0 {
|
||
// // 更新推荐人的推荐总人数
|
||
// if err := aduserdb.UpdateUserRecommend(orm, inviteCode.UserId); err != nil {
|
||
// return statuscode.ServerError
|
||
// }
|
||
// log.Error(fmt.Sprintf("userrge agent 22 invitecodeuserid=%v", inviteCode.UserId))
|
||
// //hc todo 注释
|
||
// // // 更加代理商邀请表 推荐人的数据
|
||
// // if err := aduserdb.UpdateUserInvitePeople(inviteCode.UserId); err != nil {
|
||
// // log.Error(fmt.Sprintf("userrge agent 333 invitecodeuserid=%v,err=%v", inviteCode.UserId, err.Error()))
|
||
// // return statuscode.ServerError
|
||
// // }
|
||
// //// 更新推荐人的上一级人数
|
||
// //commend := agentdb.GetAgentIdByUserId(inviteCode.UserId)
|
||
// //if commend.ReCommenId > 0 {
|
||
// // if err := agentdb.UpdateUserInvitePeople(commend.ReCommenId); err != nil {
|
||
// // return statuscode.ServerError
|
||
// // }
|
||
// //}
|
||
// }
|
||
//
|
||
// return statuscode.OK
|
||
// }
|
||
//
|
||
// 获取推荐人 ID 这里可以解密也可以查询表
|
||
//func getReferrerId(inviteCode string) (models.AdInviteCode, int) {
|
||
// if len(inviteCode) == 0 {
|
||
// return models.AdInviteCode{}, statuscode.OK
|
||
// }
|
||
// Invite := models.AdInviteCode{}
|
||
// // hc todo注释
|
||
// // Invite, err := aduserdb.GetInviteCodeByCode(inviteCode)
|
||
// // if err != nil {
|
||
// // return models.AdInviteCode{}, statuscode.ServerError
|
||
// // }
|
||
// if Invite.UserId == 0 {
|
||
// return models.AdInviteCode{}, statuscode.InviterNotExist
|
||
// }
|
||
//
|
||
// return Invite, statuscode.OK
|
||
//}
|
||
|
||
// // 生成昵称
|
||
//
|
||
// func genNickname() string {
|
||
// return utility.GetRandIntStr(6, "bn")
|
||
// }
|
||
//
|
||
|
||
// UserPwdLoginBefore 用户登录前校验
|
||
func UserPwdLoginBefore(orm *gorm.DB, loginInfo dto.FrontedLoginReq) (user models.LineUser, code int, langArg interface{}) {
|
||
// ========== 校验登录信息 ========== //
|
||
var err error
|
||
if loginInfo.LoginType == sysmodel.TSmsCode {
|
||
// 手机
|
||
user, err = aduserdb.GetUserByPhone(orm, loginInfo.PhoneAreaCode, loginInfo.Phone)
|
||
if err != nil {
|
||
return user, statuscode.ServerError, langArg
|
||
}
|
||
} else if loginInfo.LoginType == sysmodel.TEmailCode {
|
||
// 邮箱
|
||
user, err = aduserdb.GetUserByEmail(orm, loginInfo.Email) //GetUser("useremail", loginInfo.Email)
|
||
if err != nil {
|
||
return user, statuscode.ServerError, langArg
|
||
}
|
||
}
|
||
// 用户不存在
|
||
if user.Id == 0 {
|
||
return user, statuscode.TheAccountIsNotRegistered, langArg
|
||
}
|
||
|
||
// 获取密码错误次数
|
||
key := fmt.Sprintf(rediskey.UserLoginPwdErrFre, user.Id)
|
||
total, wait, _ := helper.DefaultRedis.GetUserLoginPwdErrFre(key)
|
||
if total >= 5 {
|
||
return user, statuscode.AccountIsFrozen, wait
|
||
}
|
||
md5 := md5helper.MD5(loginInfo.Password + user.Salt)
|
||
// 验证密码
|
||
if user.Password != md5 {
|
||
// 禁用时长
|
||
disableDuration := 12 * time.Hour
|
||
num, err := helper.DefaultRedis.SetUserLoginPwdErrFre(key, disableDuration)
|
||
if err != nil {
|
||
log.Error("Redis", zap.Error(err))
|
||
return user, statuscode.ServerError, langArg
|
||
}
|
||
if num < 5 {
|
||
return user, statuscode.AccountOrPasswordError, 5 - num
|
||
} else {
|
||
return user, statuscode.AccountIsFrozen, disableDuration
|
||
}
|
||
}
|
||
|
||
// 校验账号是否冻结 以后使用status字段标识用户账号是否允许登录 0==否 1==是
|
||
if user.Status == "" {
|
||
return user, statuscode.AccountIsFrozen, langArg
|
||
}
|
||
if user.Status == "verify" {
|
||
return models.LineUser{}, statuscode.UserNotVerify, langArg
|
||
}
|
||
go func(key string) {
|
||
_ = helper.DefaultRedis.DeleteString(key)
|
||
}(key)
|
||
return user, statuscode.OK, langArg
|
||
}
|
||
|
||
// // UserPwdLogin 账号密码登录
|
||
//
|
||
// func UserPwdLogin(orm *gorm.DB, loginInfo sysmodel.UserAccountPwdLoginReq, user models.AdUser, authSwitch sysmodel.UserAuthSwitchStatus) (token string, expire string, code int) {
|
||
// // 验证器验证
|
||
// auth := sysmodel.Authenticator{
|
||
// UserID: user.Id,
|
||
// PhoneAuth: authSwitch.PhoneAuth,
|
||
// EmailAuth: authSwitch.EmailAuth,
|
||
// GoogleAuth: authSwitch.GoogleAuth,
|
||
// Phone: user.Phone,
|
||
// Email: user.UserEmail,
|
||
// GoogleSecret: authSwitch.GoogleSecret,
|
||
// SmsCaptcha: loginInfo.SmsCaptcha,
|
||
// EmailCaptcha: loginInfo.EmailCaptcha,
|
||
// GoogleCaptcha: loginInfo.GoogleCaptcha,
|
||
// BusinessType: businesstype.Login,
|
||
// }
|
||
// if c := AuthenticatorVerify(orm, auth); c != statuscode.OK {
|
||
// return "", "", c
|
||
// }
|
||
//
|
||
// jwtToken, expire, code := GenerateToken(user.Id, loginInfo.Source, user.Nickname, user.Phone, user.UserEmail, loginInfo.LoginIP, loginInfo.DeviceID)
|
||
// if code != statuscode.OK {
|
||
// return "", "", code
|
||
// }
|
||
//
|
||
// return jwtToken, expire, statuscode.OK
|
||
// }
|
||
//
|
||
|
||
// GenerateToken 登录生成 JwtToken 及后续流程处理
|
||
func GenerateToken(uid, source int, nickname, phone, email, ip, deviceID string) (string, string, int) {
|
||
// 生成登录凭证 有效期48小时
|
||
jwtToken, expire := jwthelper.CreateJwtToken(jwthelper.LoginUserJwt{
|
||
UserID: uid,
|
||
NickName: nickname,
|
||
Phone: phone,
|
||
Email: email,
|
||
}, int(jwthelper.LoginTokenValidTime.Minutes()))
|
||
|
||
// 登入业务处理发送到kafka
|
||
//newLog := models.AdLog{
|
||
// LogType: int(businesstype.Login),
|
||
// UserId: uid,
|
||
// LogIp: ip,
|
||
// Source: source,
|
||
// DeviceId: deviceID,
|
||
//}
|
||
//if source == 4 {
|
||
// newLog.LogType = int(businesstype.ScanLogin) //扫码登入
|
||
// newLog.Source = 3
|
||
// source = 3
|
||
//}
|
||
// by, _ := jsonhelper.MarshalMsgPack(&newLog)
|
||
// kafkahelper.SendKafkaMsg(kafkatopic.LoginLog, utility.IntToString(uid), by)
|
||
|
||
// 保存登录凭证;
|
||
key := fmt.Sprintf(rediskey.AppLoginUserToken, uid)
|
||
if source == 3 {
|
||
key = fmt.Sprintf(rediskey.PCLoginUserToken, uid)
|
||
}
|
||
if err := helper.DefaultRedis.SetStringExpire(key, jwtToken,
|
||
time.Second*time.Duration(jwthelper.LoginTokenValidTime.Seconds())); err != nil {
|
||
return "", "", statuscode.ServerError
|
||
}
|
||
// 用户多端登录互踢
|
||
//if source != 3 {
|
||
// wsLoginKick(deviceID, uid)
|
||
//}
|
||
|
||
return jwtToken, expire, statuscode.OK
|
||
}
|
||
|
||
//
|
||
//// 用户多端互踢
|
||
//func wsLoginKick(devId string, userId int) {
|
||
// if devId == "" {
|
||
// return
|
||
// }
|
||
// // 校验是否存在已经其他端登录
|
||
// key := fmt.Sprintf("user-%v", userId)
|
||
// // 读取原存储的设备号
|
||
// preDevId, _ := helper.DefaultRedis.HGetField(rediskey.UserLoginWsClient, key)
|
||
// // 将本次登录的设备号存储
|
||
// _ = helper.DefaultRedis.HSetField(rediskey.UserLoginWsClient, key, devId)
|
||
//
|
||
// if string(preDevId) != devId {
|
||
// // hc todo 注释
|
||
// // 给上一个登录的端发送订阅消息
|
||
// // data := &models.PushUserLoginKick{
|
||
// // Type: 14,
|
||
// // Data: string(preDevId), // 上一个登录端的设备号
|
||
// // }
|
||
// // // 通知用户账户最新信息
|
||
// // by, _ := sonic.Marshal(data)
|
||
// // log.Info("通知用户其他端已登录", zap.String("key", key), zap.ByteString("by", by))
|
||
// // kafkahelper.SendKafkaMsg(kafkatopic.LoginKick, key, by)
|
||
// }
|
||
//}
|
||
//
|
||
//// ResetPwdBefore 1 重置密码前校验
|
||
//func ResetPwdBefore(orm *gorm.DB, resetPwd sysmodel.ResetPwdReq) (user models.AdUser, code int) {
|
||
// var err error
|
||
//
|
||
// if resetPwd.RetrieveType == 1 {
|
||
// user, err = aduserdb.GetUserByPhone(orm, resetPwd.PhoneAreaCode, resetPwd.Phone)
|
||
// if err != nil {
|
||
// return user, statuscode.ServerError
|
||
// }
|
||
// } else if resetPwd.RetrieveType == 2 {
|
||
// user, err = aduserdb.GetUserByEmail(orm, resetPwd.Email) //GetUser("useremail", resetPwd.Email)
|
||
// if err != nil {
|
||
// return user, statuscode.ServerError
|
||
// }
|
||
// }
|
||
//
|
||
// if user.Id == 0 {
|
||
// return user, statuscode.TheAccountIsNotRegistered
|
||
// }
|
||
//
|
||
// return user, statuscode.OK
|
||
//}
|
||
//
|
||
//// ResetPwdCheck 2 重置密码安全验证
|
||
//func ResetPwdCheck(orm *gorm.DB, rpc sysmodel.ResetPwdCheck) (string, int) {
|
||
// var (
|
||
// user models.AdUser
|
||
// err error
|
||
// )
|
||
//
|
||
// if rpc.RetrieveType == 1 {
|
||
// user, err = aduserdb.GetUserByPhone(orm, rpc.PhoneAreaCode, rpc.Phone)
|
||
// if err != nil {
|
||
// return "", statuscode.ServerError
|
||
// }
|
||
// } else if rpc.RetrieveType == 2 {
|
||
// user, err = aduserdb.GetUserByEmail(orm, rpc.Email) //GetUser("useremail", rpc.Email)
|
||
// if err != nil {
|
||
// return "", statuscode.ServerError
|
||
// }
|
||
// }
|
||
//
|
||
// if user.Id == 0 {
|
||
// return "", statuscode.TheAccountIsNotRegistered
|
||
// }
|
||
//
|
||
// // 获取用户验证器开启状态
|
||
// authSwitch, err := aduserdb.GetUserAuthSwitch(orm, user.Id)
|
||
// if err != nil {
|
||
// return "", statuscode.ServerError
|
||
// }
|
||
// // 验证器校验
|
||
// validator := sysmodel.Authenticator{
|
||
// UserID: user.Id,
|
||
// PhoneAuth: authSwitch.PhoneAuth,
|
||
// EmailAuth: authSwitch.EmailAuth,
|
||
// GoogleAuth: authSwitch.GoogleAuth,
|
||
// Phone: user.Phone,
|
||
// Email: user.UserEmail,
|
||
// GoogleSecret: authSwitch.GoogleSecret,
|
||
// SmsCaptcha: rpc.SmsCaptcha,
|
||
// EmailCaptcha: rpc.EmailCaptcha,
|
||
// GoogleCaptcha: rpc.GoogleCaptcha,
|
||
// BusinessType: businesstype.ResetPass,
|
||
// }
|
||
//
|
||
// if code := AuthenticatorVerify(orm, validator); code != statuscode.OK {
|
||
// return "", code
|
||
// }
|
||
//
|
||
// // 校验验证码通过,生成下一步操作的凭证
|
||
// cre := sysmodel.Credential{
|
||
// BusinessType: int(businesstype.ResetPass),
|
||
// UserID: user.Id,
|
||
// Phone: user.Phone,
|
||
// Email: user.UserEmail,
|
||
// Time: time.Now().Unix(),
|
||
// Rand: rand.NewSource(time.Now().UnixNano()).Int63(),
|
||
// }
|
||
// creJ, _ := sonic.Marshal(cre)
|
||
// credentials := aeshelper.Encrypt(string(creJ), codeVerifySuccess)
|
||
//
|
||
// return credentials, statuscode.OK
|
||
//}
|
||
//
|
||
//// ResetPwd 3 重置密码
|
||
//func ResetPwd(orm *gorm.DB, user models.AdUser, resetPwd sysmodel.ResetPwdReq) int {
|
||
// // 校验凭证
|
||
// cre := sysmodel.Credential{
|
||
// BusinessType: int(businesstype.ResetPass),
|
||
// UserID: user.Id,
|
||
// Phone: user.Phone,
|
||
// Email: user.UserEmail,
|
||
// Time: time.Now().Unix(),
|
||
// }
|
||
// if !CheckCredentials(cre, resetPwd.Credentials) {
|
||
// log.Error("business credentials error")
|
||
// return statuscode.BusinessCredentialsError
|
||
// }
|
||
//
|
||
// // 更新密码
|
||
// if err := aduserdb.UpdateUserPwd(orm, resetPwd.UserID, resetPwd.Password); err != nil {
|
||
// return statuscode.ServerError
|
||
// }
|
||
//
|
||
// return statuscode.OK
|
||
//}
|
||
//
|
||
//// ChangePwdBefore 修改密码前校验
|
||
//func ChangePwdBefore(orm *gorm.DB, params sysmodel.UserChangePwdReq) (user models.AdUser, code int) {
|
||
//
|
||
// user, err := aduserdb.GetUserById(orm, params.UserId) //"id", params.UserId)
|
||
//
|
||
// if err != nil {
|
||
// return user, statuscode.ServerError
|
||
// }
|
||
// if user.UserPassword != params.OldPassword {
|
||
// return user, statuscode.OriginalPasswordError
|
||
// }
|
||
//
|
||
// return user, statuscode.OK
|
||
//}
|
||
//
|
||
//// ChangePwd 修改密码
|
||
//func ChangePwd(orm *gorm.DB, params sysmodel.UserChangePwdReq, user models.AdUser) int {
|
||
// // 获取用户验证器开关状态
|
||
// authSwitch, err := GetUserAuthSwitch(orm, user.Id)
|
||
// if err != nil {
|
||
// return statuscode.ServerError
|
||
// }
|
||
//
|
||
// // 验证器验证
|
||
// auth := sysmodel.Authenticator{
|
||
// UserID: params.UserId,
|
||
// PhoneAuth: authSwitch.PhoneAuth,
|
||
// EmailAuth: authSwitch.EmailAuth,
|
||
// GoogleAuth: authSwitch.GoogleAuth,
|
||
// Phone: user.Phone,
|
||
// Email: user.UserEmail,
|
||
// GoogleSecret: authSwitch.GoogleSecret,
|
||
// SmsCaptcha: params.SmsCaptcha,
|
||
// EmailCaptcha: params.EmailCaptcha,
|
||
// GoogleCaptcha: params.GoogleCaptcha,
|
||
// BusinessType: businesstype.ChangePassword,
|
||
// }
|
||
// if code := AuthenticatorVerify(orm, auth); code != statuscode.OK {
|
||
// return code
|
||
// }
|
||
//
|
||
// // 更新密码
|
||
// if err = aduserdb.UpdateUserPwd(orm, params.UserId, params.NewPassword); err != nil {
|
||
// return statuscode.ServerError
|
||
// }
|
||
//
|
||
// return statuscode.OK
|
||
//}
|
||
//
|
||
//// GetUserRealName 获取用户真实姓名
|
||
//func GetUserRealName(orm *gorm.DB, uid int) string {
|
||
// buyerIdent, err := aduserdb.GetIdentification(orm, uid)
|
||
// if err != nil {
|
||
// return ""
|
||
// }
|
||
// realName := buyerIdent.Name
|
||
//
|
||
// if buyerIdent.CountryId == 40 || buyerIdent.CountryId == 73 ||
|
||
// buyerIdent.CountryId == 115 || buyerIdent.CountryId == 179 {
|
||
// realName = buyerIdent.Name // 中国大陆,港澳台
|
||
// } else {
|
||
// // 名字-中间名-姓
|
||
// realName = buyerIdent.Name + " " + buyerIdent.MiddleName + " " + buyerIdent.Surname
|
||
// }
|
||
//
|
||
// return realName
|
||
//}
|