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 StaffAuther struct { authprovider.DefAuther } var ( AutherObjStaff *StaffAuther ) func init() { AutherObjStaff = new(StaffAuther) auth2.RegisterAuther(AuthTypeStaff, AutherObjStaff) } func (a *StaffAuther) VerifySecret(dummy, code string) (authBindEx *auth2.AuthBindEx, err error) { globals.SugarLogger.Debugf("dingding staff VerifySecret code:%s", code) userID, err := api.DingDingAPI.GetUserID(code) if err == nil { db := dao.GetDB() var authBind *model.AuthBind if authBind, err = dao.GetAuthBind(db, "", AuthTypeStaff, userID.UserID); dao.IsNoRowsError(err) { userDetail, err2 := api.DingDingAPI.GetUserDetail(userID.UserID) if err = err2; err == nil { userHint := &auth2.UserBasic{ UserID2: userID.UserID, Mobile: utils.Interface2String(userDetail["mobile"]), Email: utils.Interface2String(userDetail["email"]), Name: utils.Interface2String(userDetail["name"]), } unionID := utils.Interface2String(userDetail["unionid"]) if unionID != "" { var authBindList []*model.AuthBind if authBindList, err = dao.GetAuthBindsByAuthID2(db, unionID, []string{AuthTypeDingDing, AuthTypeStaff, AuthTypeQRCode}); err == nil && len(authBindList) > 0 { authBind = authBindList[0] authBind.Type = AuthTypeStaff authBind.AuthID = userID.UserID authBind.DetailData = string(utils.MustMarshal(userDetail)) 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: AuthTypeStaff, AuthID: userID.UserID, AuthID2: unionID, DetailData: string(utils.MustMarshal(userDetail)), }, UserHint: userHint, } } } } } return authBindEx, err }