Пример #1
0
 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;
 }
Пример #2
0
 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;
 }
Пример #3
0
 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);
 }
Пример #4
0
 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;
     }
 }