1
This commit is contained in:
402
common/service/sysservice/authservice/authenticator.go
Normal file
402
common/service/sysservice/authservice/authenticator.go
Normal file
@ -0,0 +1,402 @@
|
||||
package authservice
|
||||
|
||||
//
|
||||
//import (
|
||||
// "go-admin/app/admin/models"
|
||||
// "go-admin/app/admin/models/sysmodel"
|
||||
// "go-admin/app/admin/service/aduserdb"
|
||||
// "go-admin/app/admin/service/otcdb/orderdb"
|
||||
// "go-admin/common/const/enum/businesstype"
|
||||
// statuscode "go-admin/common/status_code"
|
||||
// "go-admin/pkg/googleauthhelper"
|
||||
// "go-admin/pkg/utility"
|
||||
//
|
||||
// log "github.com/go-admin-team/go-admin-core/logger"
|
||||
// "gorm.io/gorm"
|
||||
//
|
||||
// "go.uber.org/zap"
|
||||
//)
|
||||
//
|
||||
//// GetUserAuthSwitch 获取用户验证器开关状态
|
||||
//func GetUserAuthSwitch(orm *gorm.DB, userID int) (auth sysmodel.UserAuthSwitchStatus, err error) {
|
||||
// // 获取用户验证器开关
|
||||
// auth, err = aduserdb.GetUserAuthSwitch(orm, userID)
|
||||
// if err != nil {
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// if auth.PhoneAuth != 1 {
|
||||
// auth.PhoneAuth = 0
|
||||
// }
|
||||
// if auth.EmailAuth != 1 {
|
||||
// auth.EmailAuth = 0
|
||||
// }
|
||||
// if auth.GoogleAuth != 1 {
|
||||
// auth.GoogleAuth = 0
|
||||
// }
|
||||
//
|
||||
// return
|
||||
//}
|
||||
//
|
||||
//// AuthenticatorVerify 已开通验证器校验
|
||||
//func AuthenticatorVerify(orm *gorm.DB, authenticator sysmodel.Authenticator) int {
|
||||
// // 是否完全验证
|
||||
// if authenticator.PhoneAuth == 1 && len(authenticator.SmsCaptcha) == 0 ||
|
||||
// authenticator.EmailAuth == 1 && len(authenticator.EmailCaptcha) == 0 ||
|
||||
// authenticator.GoogleAuth == 1 && len(authenticator.GoogleCaptcha) == 0 {
|
||||
//
|
||||
// return statuscode.PleasePerformCompleteSecurityVerification
|
||||
// }
|
||||
// var phoneCheck sysmodel.CheckCaptcha
|
||||
// var emailCheck sysmodel.CheckCaptcha
|
||||
// // 校验验证码
|
||||
// if authenticator.PhoneAuth == 1 {
|
||||
// phoneCheck = sysmodel.CheckCaptcha{
|
||||
// BusinessType: int(authenticator.BusinessType),
|
||||
// Receive: authenticator.Phone,
|
||||
// Captcha: authenticator.SmsCaptcha,
|
||||
// }
|
||||
// }
|
||||
// if authenticator.EmailAuth == 1 {
|
||||
// emailCheck = sysmodel.CheckCaptcha{
|
||||
// BusinessType: int(authenticator.BusinessType),
|
||||
// Receive: authenticator.Email,
|
||||
// Captcha: authenticator.EmailCaptcha,
|
||||
// }
|
||||
// }
|
||||
// var googleSecret string
|
||||
// var googleCaptcha string
|
||||
// if authenticator.GoogleAuth == 1 {
|
||||
// googleSecret = authenticator.GoogleSecret
|
||||
// googleCaptcha = authenticator.GoogleCaptcha
|
||||
// }
|
||||
// // 检验验证码
|
||||
// code := CheckCaptchaNew(orm, phoneCheck, emailCheck, googleSecret, googleCaptcha)
|
||||
// return code
|
||||
//}
|
||||
//
|
||||
//// AuthSwitchBefore 身份验证开关前校验(新)
|
||||
//func AuthSwitchBefore(orm *gorm.DB, auth sysmodel.AuthenticatorSwitch) int {
|
||||
// // 开启手机、更改手机、开启邮箱、更改邮箱 判断是否被占用
|
||||
// var user models.AdUser
|
||||
// var err error
|
||||
// if auth.BusinessType == businesstype.OpenPhoneAuth || auth.BusinessType == businesstype.ChangePhoneAuth {
|
||||
// user, err = aduserdb.GetUserByPhone(orm, auth.NewPhoneArea, auth.NewPhone)
|
||||
// if err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
// if user.Id != 0 && user.Id != auth.UserID {
|
||||
// return statuscode.ThePhoneHasBeenBound
|
||||
// }
|
||||
// } else if auth.BusinessType == businesstype.OpenEmailAuth || auth.BusinessType == businesstype.ChangeEmailAuth {
|
||||
// user, err = aduserdb.GetUserByEmail(orm, auth.NewEmail) //GetUser("useremail", auth.NewEmail)
|
||||
// if err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
// if user.Id != 0 && user.Id != auth.UserID {
|
||||
// return statuscode.TheEmailHasBeenBound
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 获取用户验证器开关状态
|
||||
// authSwitch, err := GetUserAuthSwitch(orm, auth.UserID)
|
||||
// if err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
//
|
||||
// // 关闭验证器 需保证至少两个开启
|
||||
// if auth.BusinessType == businesstype.ClosePhoneAuth ||
|
||||
// auth.BusinessType == businesstype.CloseEmailAuth ||
|
||||
// auth.BusinessType == businesstype.CloseGoogleAuth {
|
||||
//
|
||||
// if (authSwitch.PhoneAuth + authSwitch.EmailAuth + authSwitch.GoogleAuth) < 3 {
|
||||
// return statuscode.AllAuthMustOpen
|
||||
// }
|
||||
//
|
||||
// // OTC 订单状态为:1-待付款、3-代放币、7-申诉中时,不允许解绑手机
|
||||
// if auth.BusinessType == businesstype.ClosePhoneAuth {
|
||||
// // hc todo 注释
|
||||
// // 广告
|
||||
// // sum, err := advertisedb.GetUserAdvertiseSum(auth.UserID)
|
||||
// // if err != nil {
|
||||
// // return statuscode.ServerError
|
||||
// // }
|
||||
// // if sum > 0 {
|
||||
// // return statuscode.OTCAdvertiseAreInProgress
|
||||
// // }
|
||||
// // 订单
|
||||
// num, err := orderdb.GetUnfilledOrderCount(orm, auth.UserID)
|
||||
// if err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
// if num > 0 {
|
||||
// return statuscode.OTCOrdersAreInProgress
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if user.Id == 0 {
|
||||
// user, err = aduserdb.GetUserById(orm, auth.UserID) //"id", auth.UserID)
|
||||
// if err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // ==================== 1 已开通验证器校验 ==================== //
|
||||
// validator := sysmodel.Authenticator{
|
||||
// UserID: auth.UserID,
|
||||
// PhoneAuth: authSwitch.PhoneAuth,
|
||||
// EmailAuth: authSwitch.EmailAuth,
|
||||
// GoogleAuth: authSwitch.GoogleAuth,
|
||||
// Phone: user.Phone,
|
||||
// Email: user.UserEmail,
|
||||
// GoogleSecret: authSwitch.GoogleSecret,
|
||||
// SmsCaptcha: auth.SmsCaptcha,
|
||||
// EmailCaptcha: auth.EmailCaptcha,
|
||||
// GoogleCaptcha: auth.GoogleCaptcha,
|
||||
// BusinessType: auth.BusinessType,
|
||||
// }
|
||||
//
|
||||
// // 是否完全验证
|
||||
// if validator.PhoneAuth == 1 && len(validator.SmsCaptcha) == 0 ||
|
||||
// validator.EmailAuth == 1 && len(validator.EmailCaptcha) == 0 ||
|
||||
// validator.GoogleAuth == 1 && len(validator.GoogleCaptcha) == 0 {
|
||||
//
|
||||
// return statuscode.PleasePerformCompleteSecurityVerification
|
||||
// }
|
||||
// var phoneCode models.AdVerifyCode
|
||||
// if len(validator.SmsCaptcha) > 0 && !CheckOpenVerifyCode(validator.SmsCaptcha) {
|
||||
// // 校验手机号码发送的验证码
|
||||
// phoneCheck := sysmodel.CheckCaptcha{
|
||||
// BusinessType: int(businesstype.WithdrawAuth),
|
||||
// Receive: validator.Phone,
|
||||
// Captcha: validator.SmsCaptcha,
|
||||
// }
|
||||
// phoneCode = aduserdb.GetVerifyCode(orm, phoneCheck)
|
||||
// if phoneCode.Id == 0 {
|
||||
// return statuscode.PhoneCaptchaInvalid
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// var emailCode models.AdVerifyCode
|
||||
// if len(validator.EmailCaptcha) > 0 && !CheckOpenVerifyCode(validator.EmailCaptcha) {
|
||||
// // 校验邮箱号码发送的验证码
|
||||
// emailCheck := sysmodel.CheckCaptcha{
|
||||
// BusinessType: int(businesstype.WithdrawAuth),
|
||||
// Receive: validator.Email,
|
||||
// Captcha: validator.EmailCaptcha,
|
||||
// }
|
||||
// emailCode = aduserdb.GetVerifyCode(orm, emailCheck)
|
||||
// if emailCode.Id == 0 {
|
||||
// return statuscode.EmailCaptchaInvalid
|
||||
// }
|
||||
// }
|
||||
// if len(validator.GoogleCaptcha) > 0 {
|
||||
// // 校验谷歌的验证码
|
||||
// auth2 := googleauthhelper.VerifyCode(validator.GoogleSecret, utility.StringAsInt32(validator.GoogleCaptcha))
|
||||
// if !auth2 {
|
||||
// return statuscode.GoogleCaptchaInvalid
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // ==================== 2 新绑定的验证器校验 ==================== //
|
||||
// var phoneNewCode models.AdVerifyCode
|
||||
// // 开启手机|更改手机验证 都需要校验新手机
|
||||
// if auth.BusinessType == businesstype.OpenPhoneAuth || auth.BusinessType == businesstype.ChangePhoneAuth {
|
||||
// if !CheckOpenVerifyCode(auth.NewPhoneCaptcha) {
|
||||
// cc := sysmodel.CheckCaptcha{
|
||||
// BusinessType: int(auth.BusinessType),
|
||||
// Receive: auth.NewPhone,
|
||||
// Captcha: auth.NewPhoneCaptcha,
|
||||
// }
|
||||
// phoneNewCode = aduserdb.GetVerifyCode(orm, cc)
|
||||
// if phoneNewCode.Id == 0 {
|
||||
// return statuscode.NewPhoneCaptchaInvalid
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// var emailNewCode models.AdVerifyCode
|
||||
// // 开启邮箱|更改邮箱验证 都需要校验新邮箱
|
||||
// if auth.BusinessType == businesstype.OpenEmailAuth || auth.BusinessType == businesstype.ChangeEmailAuth {
|
||||
// if !CheckOpenVerifyCode(auth.NewEmailCaptcha) {
|
||||
// cc := sysmodel.CheckCaptcha{
|
||||
// BusinessType: int(auth.BusinessType),
|
||||
// Receive: auth.NewEmail,
|
||||
// Captcha: auth.NewEmailCaptcha,
|
||||
// }
|
||||
// emailNewCode = aduserdb.GetVerifyCode(orm, cc)
|
||||
// if emailNewCode.Id == 0 {
|
||||
// return statuscode.NewEmailCaptchaInvalid
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 开启谷歌验证器 需要验证谷歌
|
||||
// if auth.BusinessType == businesstype.OpenGoogleAuth {
|
||||
// newSecret, _ := aduserdb.GetNewGoogleSecret(orm, auth.UserID)
|
||||
// if ok := googleauthhelper.VerifyCode(newSecret, utility.StringAsInt32(auth.NewGoogleCaptcha)); !ok {
|
||||
// // tx.Rollback()
|
||||
// log.Error("google验证码校验失败")
|
||||
// return statuscode.GoogleCaptchaInvalid
|
||||
// }
|
||||
// }
|
||||
// if phoneCode.Id == 0 && phoneNewCode.Id == 0 && emailCode.Id == 0 && emailNewCode.Id == 0 {
|
||||
// log.Error("AuthSwitchBefore", zap.String("没验证旧手机、新手机、旧邮箱、新邮箱,估计只验证谷歌验证器",
|
||||
// "phoneCode.Id ==0 && phoneNewCode.Id ==0 && emailCode.Id ==0&& emailNewCode.Id ==0"))
|
||||
// return statuscode.OK
|
||||
// }
|
||||
//
|
||||
// var transCode int
|
||||
// err = orm.Transaction(func(tx *gorm.DB) error {
|
||||
// // ==================== 1 已开通验证器校验,修改表数据为已验证 ==================== //
|
||||
// if phoneCode.Id > 0 { // 旧手机验证码修改
|
||||
// err := aduserdb.UpdateVerifyFlag(tx, phoneCode.Id)
|
||||
// if err != nil {
|
||||
// log.Error("AuthSwitchBefore phoneCode", zap.Error(err))
|
||||
// // _ = tx.Rollback()
|
||||
// transCode = statuscode.PhoneCaptchaInvalid
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
// if emailCode.Id > 0 { // 旧邮箱验证码修改
|
||||
// err = aduserdb.UpdateVerifyFlag(tx, emailCode.Id)
|
||||
// if err != nil {
|
||||
// log.Error("AuthSwitchBefore emailCode", zap.Error(err))
|
||||
// // _ = tx.Rollback()
|
||||
// transCode = statuscode.EmailCaptchaInvalid
|
||||
//
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // ==================== 2 新绑定的验证器校验,修改表数据为已验证 ==================== //
|
||||
// if phoneNewCode.Id > 0 { // 新手机验证码修改
|
||||
// err = aduserdb.UpdateVerifyFlag(tx, phoneNewCode.Id)
|
||||
// if err != nil {
|
||||
// log.Error("AuthSwitchBefore phoneNewCode", zap.Error(err))
|
||||
//
|
||||
// transCode = statuscode.PhoneCaptchaInvalid
|
||||
//
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
// if emailNewCode.Id > 0 { // 新邮箱验证码修改
|
||||
// err = aduserdb.UpdateVerifyFlag(tx, emailNewCode.Id)
|
||||
// if err != nil {
|
||||
// log.Error("AuthSwitchBefore emailNewCode", zap.Error(err))
|
||||
//
|
||||
// transCode = statuscode.EmailCaptchaInvalid
|
||||
//
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return nil
|
||||
// })
|
||||
// // 开启事务
|
||||
// // tx, err := dbhelper.MasterPgdb.Beginx()
|
||||
// // if err != nil {
|
||||
// // return statuscode.ServerError
|
||||
// // }
|
||||
//
|
||||
// // // ==================== 1 已开通验证器校验,修改表数据为已验证 ==================== //
|
||||
// // if phoneCode.Id > 0 { // 旧手机验证码修改
|
||||
// // err = aduserdb.UpdateVerifyFlag(phoneCode.Id, tx)
|
||||
// // if err != nil {
|
||||
// // log.Error("AuthSwitchBefore phoneCode", zap.Error(err))
|
||||
// // _ = tx.Rollback()
|
||||
// // return statuscode.PhoneCaptchaInvalid
|
||||
// // }
|
||||
// // }
|
||||
// // if emailCode.Id > 0 { // 旧邮箱验证码修改
|
||||
// // err = aduserdb.UpdateVerifyFlag(emailCode.Id, tx)
|
||||
// // if err != nil {
|
||||
// // log.Error("AuthSwitchBefore emailCode", zap.Error(err))
|
||||
// // _ = tx.Rollback()
|
||||
// // return statuscode.EmailCaptchaInvalid
|
||||
// // }
|
||||
// // }
|
||||
//
|
||||
// // // ==================== 2 新绑定的验证器校验,修改表数据为已验证 ==================== //
|
||||
// // if phoneNewCode.Id > 0 { // 新手机验证码修改
|
||||
// // err = aduserdb.UpdateVerifyFlag(phoneNewCode.Id, tx)
|
||||
// // if err != nil {
|
||||
// // log.Error("AuthSwitchBefore phoneNewCode", zap.Error(err))
|
||||
// // _ = tx.Rollback()
|
||||
// // return statuscode.PhoneCaptchaInvalid
|
||||
// // }
|
||||
// // }
|
||||
// // if emailNewCode.Id > 0 { // 新邮箱验证码修改
|
||||
// // err = aduserdb.UpdateVerifyFlag(emailNewCode.Id, tx)
|
||||
// // if err != nil {
|
||||
// // log.Error("AuthSwitchBefore emailNewCode", zap.Error(err))
|
||||
// // _ = tx.Rollback()
|
||||
// // return statuscode.EmailCaptchaInvalid
|
||||
// // }
|
||||
// // }
|
||||
// // // 提交事务
|
||||
// // if err = tx.Commit(); err != nil {
|
||||
// // return statuscode.ServerError
|
||||
// // }
|
||||
//
|
||||
// if err != nil {
|
||||
// return transCode
|
||||
// }
|
||||
// return statuscode.OK
|
||||
//}
|
||||
//
|
||||
//// AuthSwitchNew 身份验证开关(新)
|
||||
//func AuthSwitchNew(orm *gorm.DB, auth sysmodel.AuthenticatorSwitch) int {
|
||||
// // 验证器-开关
|
||||
// switch auth.BusinessType {
|
||||
// case businesstype.OpenPhoneAuth:
|
||||
// if err := aduserdb.BindPhoneAuth(orm, auth.UserID, auth.NewPhoneArea, auth.NewPhone); err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
// case businesstype.ChangePhoneAuth:
|
||||
// if err := aduserdb.ChangePhoneAuth(orm, auth.UserID, auth.NewPhoneArea, auth.NewPhone); err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
// // hc todo 注释掉 先不急
|
||||
// // 更新商家信息
|
||||
// // merchant := merchantdb.GetMerchantInfoForUserId(orm, auth.UserID)
|
||||
// // if merchant.Id > 0 {
|
||||
// // _ = merchantdb.UpdateMerchantMobile(auth.UserID, auth.NewPhone)
|
||||
// // }
|
||||
// case businesstype.ClosePhoneAuth:
|
||||
// if err := aduserdb.ClosePhoneAuth(orm, auth.UserID); err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
//
|
||||
// case businesstype.OpenEmailAuth:
|
||||
// if err := aduserdb.BindEmailAuth(orm, auth.UserID, auth.NewEmail); err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
// case businesstype.ChangeEmailAuth:
|
||||
// if err := aduserdb.ChangeEmailAuth(orm, auth.UserID, auth.NewEmail); err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
// case businesstype.CloseEmailAuth:
|
||||
// if err := aduserdb.CloseEmailAuth(orm, auth.UserID); err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
//
|
||||
// case businesstype.OpenGoogleAuth:
|
||||
// if err := aduserdb.OpenGoogleAuth(orm, auth.UserID); err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
// case businesstype.ChangeGoogleAuth:
|
||||
// if err := aduserdb.CloseGoogleAuth(orm, auth.UserID); err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
// case businesstype.CloseGoogleAuth:
|
||||
// if err := aduserdb.CloseGoogleAuth(orm, auth.UserID); err != nil {
|
||||
// return statuscode.ServerError
|
||||
// }
|
||||
//
|
||||
// default:
|
||||
// return statuscode.ParameterInvalid
|
||||
// }
|
||||
//
|
||||
// return statuscode.OK
|
||||
//}
|
||||
Reference in New Issue
Block a user