Esempio n. 1
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;
 }
Esempio n. 2
0
 protected function _bdApiConsumer_autoRegister($provider, $externalToken, array $externalVisitor)
 {
     $mode = bdApiConsumer_Option::get('autoRegister');
     if ($mode !== 'on' and $mode !== 'id_sync') {
         // not in working mode
         return false;
     }
     $data = array();
     $sameName = $this->_getUserModel()->getUserByName($externalVisitor['username']);
     if (!empty($sameName)) {
         // username conflict found, too bad
         return false;
     }
     $data['username'] = $externalVisitor['username'];
     if ($mode === 'id_sync') {
         // additionally look for user with same ID
         $sameId = $this->_getUserModel()->getUserById($externalVisitor['user_id']);
         if (!empty($sameId)) {
             // ID conflict found...
             return false;
         }
         $data['user_id'] = $externalVisitor['user_id'];
     }
     /** @var bdApiConsumer_XenForo_Model_UserExternal $userExternalModel */
     $userExternalModel = $this->_getUserExternalModel();
     $user = bdApiConsumer_Helper_AutoRegister::createUser($data, $provider, $externalToken, $externalVisitor, $userExternalModel);
     if (empty($user)) {
         // for some reason, the user could not be created
         return false;
     }
     return $userExternalModel->getExternalAuthAssociation($userExternalModel->bdApiConsumer_getProviderCode($provider), $externalVisitor['user_id']);
 }