public function actionExternalAccounts() { $response = null; if (bdApiConsumer_Option::get('_is130+')) { $response = parent::actionExternalAccounts(); if ($response instanceof XenForo_ControllerResponse_View or empty($response->subView)) { // good } else { // not a view? return it asap return $response; } } $visitor = XenForo_Visitor::getInstance(); /** @var bdApiConsumer_XenForo_Model_UserExternal $externalAuthModel */ $externalAuthModel = $this->getModelFromCache('XenForo_Model_UserExternal'); $auth = $this->_getUserModel()->getUserAuthenticationObjectByUserId($visitor['user_id']); if (!$auth) { return $this->responseNoPermission(); } $externalAuths = $externalAuthModel->bdApiConsumer_getExternalAuthAssociations($visitor['user_id']); $providers = bdApiConsumer_Option::getProviders(); $viewParams = array('hasPassword' => $auth->hasPassword(), 'bdApiConsumer_externalAuths' => $externalAuths, 'bdApiConsumer_providers' => $providers); if ($response == null) { $response = $this->_getWrapper('account', 'bdApiConsumer', $this->responseView('bdApiConsumer_ViewPublic_Account_External', 'bdapi_consumer_account_external', $viewParams)); } else { $response->subView->params += $viewParams; } return $response; }
public function validateAuthentication($nameOrEmail, $password, &$error = '') { $userId = parent::validateAuthentication($nameOrEmail, $password, $error); if (empty($userId) and strpos($nameOrEmail, '@') === false and bdApiConsumer_Option::get('takeOver', 'login')) { // try to login with external providers $providers = bdApiConsumer_Option::getProviders(); foreach ($providers as $provider) { $externalToken = bdApiConsumer_Helper_Api::getAccessTokenFromUsernamePassword($provider, $nameOrEmail, $password); if (empty($externalToken)) { continue; } $externalVisitor = bdApiConsumer_Helper_Api::getVisitor($provider, $externalToken['access_token']); if (empty($externalVisitor)) { continue; } /** @var bdApiConsumer_XenForo_Model_UserExternal $userExternalModel */ $userExternalModel = $this->getModelFromCache('XenForo_Model_UserExternal'); $existingAssoc = $userExternalModel->getExternalAuthAssociation($userExternalModel->bdApiConsumer_getProviderCode($provider), $externalVisitor['user_id']); if (!empty($existingAssoc)) { // yay, found an associated user! $error = ''; $userExternalModel->bdApiConsumer_updateExternalAuthAssociation($provider, $externalVisitor['user_id'], $existingAssoc['user_id'], $externalVisitor + array('token' => $externalToken)); return $existingAssoc['user_id']; } $existingUser = $this->getUserByEmail($externalVisitor['user_email']); if (!empty($existingUser)) { // this is not good, an user with matched email // this user will have to associate manually continue; } $sameName = $this->getUserByName($externalVisitor['username']); if (!empty($sameName)) { // not good continue; } $data = array('username' => $externalVisitor['username']); if (bdApiConsumer_Option::get('autoRegister') === 'id_sync') { // additionally look for user with same ID $sameId = $this->getUserById($externalVisitor['user_id']); if (!empty($sameId)) { // not good continue; } $data['user_id'] = $externalVisitor['user_id']; } $user = bdApiConsumer_Helper_AutoRegister::createUser($data, $provider, $externalToken, $externalVisitor, $userExternalModel); if (!empty($user)) { $error = ''; return $user['user_id']; } } } return $userId; }
protected static function _updateProvider(array $provider) { $providers = bdApiConsumer_Option::getProviders(); $providers[$provider['code']] = $provider; $dw = XenForo_DataWriter::create('XenForo_DataWriter_Option'); $dw->setExistingData('bdapi_consumer_providers'); $dw->set('option_value', $providers); if (!$dw->save()) { return false; } bdApiConsumer_Option::setProviders($providers); }
public static function template_post_render($templateName, &$content, array &$containerData, XenForo_Template_Abstract $template) { switch ($templateName) { case 'login': case 'error_with_login': if (!bdApiConsumer_Option::get('_is120+')) { // XenForo 1.1.x compatibility $params = $template->getParams(); $params['providers'] = bdApiConsumer_Option::getProviders(); $params['from'] = 'login_form'; $ourTemplate = $template->create('bdapi_consumer_providers', $template->getParams()); $content .= $ourTemplate->render(); } break; } }