403 lines
14 KiB
Go
403 lines
14 KiB
Go
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
|
||
//}
|