68 lines
2.0 KiB
Go
68 lines
2.0 KiB
Go
package dingding
|
|
|
|
import (
|
|
"git.rosy.net.cn/baseapi/utils"
|
|
"git.rosy.net.cn/jx-callback/business/auth2"
|
|
"git.rosy.net.cn/jx-callback/business/auth2/authprovider"
|
|
"git.rosy.net.cn/jx-callback/business/model"
|
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
|
"git.rosy.net.cn/jx-callback/globals"
|
|
"git.rosy.net.cn/jx-callback/globals/api"
|
|
)
|
|
|
|
type QRCodeAuther struct {
|
|
authprovider.DefAuther
|
|
}
|
|
|
|
var (
|
|
AutherObjQRCode *QRCodeAuther
|
|
)
|
|
|
|
func init() {
|
|
AutherObjQRCode = new(QRCodeAuther)
|
|
auth2.RegisterAuther(AuthTypeQRCode, AutherObjQRCode)
|
|
}
|
|
|
|
func (a *QRCodeAuther) VerifySecret(dummy, code string) (authBindEx *auth2.AuthBindEx, err error) {
|
|
globals.SugarLogger.Debugf("dingding qrcode VerifySecret code:%s", code)
|
|
|
|
userQRInfo, err := api.DingDingQRCodeAPI.GetUserInfoByCode(code)
|
|
if err == nil {
|
|
db := dao.GetDB()
|
|
var authBind *model.AuthBind
|
|
if authBind, err = dao.GetAuthBind(db, "", AuthTypeQRCode, userQRInfo.OpenID); dao.IsNoRowsError(err) {
|
|
userHint := &auth2.UserBasic{
|
|
Name: userQRInfo.Nickname,
|
|
}
|
|
if userQRInfo.UnionID != "" {
|
|
var authBindList []*model.AuthBind
|
|
if authBindList, err = dao.GetAuthBindsByAuthID2(db, userQRInfo.UnionID, []string{AuthTypeDingDing, AuthTypeStaff, AuthTypeQRCode}); err == nil && len(authBindList) > 0 {
|
|
authBind = authBindList[0]
|
|
authBind.Type = AuthTypeQRCode
|
|
authBind.AuthID = userQRInfo.OpenID
|
|
authBind.DetailData = string(utils.MustMarshal(userQRInfo))
|
|
authBindEx = &auth2.AuthBindEx{
|
|
AuthBind: *authBind,
|
|
UserHint: userHint,
|
|
}
|
|
err = a.AddAuthBind(authBindEx, "admin")
|
|
} else if dao.IsNoRowsError(err) {
|
|
err = nil
|
|
}
|
|
}
|
|
if err == nil && authBindEx == nil {
|
|
authBindEx = &auth2.AuthBindEx{
|
|
AuthBind: model.AuthBind{
|
|
Type: AuthTypeQRCode,
|
|
AuthID: userQRInfo.OpenID,
|
|
AuthID2: userQRInfo.UnionID,
|
|
DetailData: string(utils.MustMarshal(userQRInfo)),
|
|
},
|
|
UserHint: userHint,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return authBindEx, err
|
|
}
|