Exemple #1
0
 public function actionPostTokenFacebook()
 {
     $client = $this->_getClientOrError();
     /* @var $userModel XenForo_Model_User */
     $userModel = $this->getModelFromCache('XenForo_Model_User');
     /* @var $userExternalModel XenForo_Model_UserExternal */
     $userExternalModel = $this->getModelFromCache('XenForo_Model_UserExternal');
     $facebookToken = $this->_input->filterSingle('facebook_token', XenForo_Input::STRING);
     $facebookUser = XenForo_Helper_Facebook::getUserInfo($facebookToken);
     $userData = array();
     if (empty($facebookUser['id'])) {
         return $this->responseError(new XenForo_Phrase('bdapi_invalid_facebook_token'));
     }
     // create a provider key tied between current API client and Facebook ID
     // this needs to be done because Facebook uses app-scoped user IDs and they are
     // different from app to app (even with the same user)
     $providerKey = sprintf('api:%s:fb:%s', $client['client_id'], $facebookUser['id']);
     $facebookApp = XenForo_Helper_Facebook::getUserInfo($facebookToken, 'app');
     if (!empty($facebookApp['id']) && $facebookApp['id'] === XenForo_Application::getOptions()->get('facebookAppId')) {
         // looks like the facebook_token is generated using the same app configured for XenForo
         // we will use the reported Facebook user ID directly to make it easier for user
         // when he/she login via Facebook on the web
         $providerKey = $facebookUser['id'];
     }
     // attempt #1: try to find the association using our provider key
     $facebookAssoc = $userExternalModel->getExternalAuthAssociation('facebook', $providerKey);
     if (!empty($facebookAssoc)) {
         return $this->_actionPostTokenNonStandard($client, $facebookAssoc['user_id']);
     }
     if (!empty($facebookUser['email'])) {
         // attempt #2: try to find user using email
         // this is a security risk but in most case it's acceptable
         // user who is knowledgeable can avoid this by do not associate a Facebook account
         $user = $userModel->getUserByEmail($facebookUser['email']);
         if ($user['user_state'] == 'valid') {
             $facebookAssoc = $userExternalModel->getExternalAuthAssociationForUser('facebook', $user['user_id']);
             if (!empty($facebookAssoc)) {
                 return $this->_actionPostTokenNonStandard($client, $facebookAssoc['user_id']);
             }
         }
         $userData['user_email'] = $facebookUser['email'];
     }
     if (!empty($facebookUser['name'])) {
         $testDw = XenForo_DataWriter::create('XenForo_DataWriter_User');
         $testDw->set('username', $facebookUser['name']);
         if (!$testDw->hasErrors()) {
             // good username
             $userData['username'] = $facebookUser['name'];
         }
     }
     $extraData = array('external_provider' => 'facebook', 'external_provider_key' => $providerKey);
     if (!empty($userData['user_email'])) {
         $extraData['user_email'] = $userData['user_email'];
     }
     $extraData = serialize($extraData);
     $extraTimestamp = time() + bdApi_Option::get('refreshTokenTTLDays') * 86400;
     $userData += array('extra_data' => bdApi_Crypt::encryptTypeOne($extraData, $extraTimestamp), 'extra_timestamp' => $extraTimestamp);
     $data = array('status' => 'ok', 'message' => new XenForo_Phrase('bdapi_no_facebook_association_found'), 'user_data' => $userData);
     return $this->responseData('bdApi_ViewApi_OAuth_TokenFacebook_NoAssoc', $data);
 }
Exemple #2
0
 public function actionTestFacebook()
 {
     if (!XenForo_Application::get('options')->facebookAppId) {
         $group = $this->getModelFromCache('XenForo_Model_Option')->getOptionGroupById('facebook');
         $url = XenForo_Link::buildAdminLink('options/list', $group);
         return $this->responseError(new XenForo_Phrase('to_test_facebook_integration_must_enter_application_info', array('url' => $url)));
     }
     $fbRedirectUri = XenForo_Link::buildAdminLink('canonical:tools/test-facebook', false, array('x' => '?/&=', 'y' => 2));
     if ($this->_input->filterSingle('test', XenForo_Input::UINT)) {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL, XenForo_Helper_Facebook::getFacebookRequestUrl($fbRedirectUri));
     }
     $info = false;
     $userToken = false;
     $code = $this->_input->filterSingle('code', XenForo_Input::STRING);
     if ($code) {
         $token = XenForo_Helper_Facebook::getAccessTokenFromCode($code, $fbRedirectUri);
         $fbError = XenForo_Helper_Facebook::getFacebookRequestErrorInfo($token, 'access_token');
         if ($fbError) {
             return $this->responseError($fbError);
         }
         $userToken = $token['access_token'];
         $info = XenForo_Helper_Facebook::getUserInfo($userToken);
         $fbError = XenForo_Helper_Facebook::getFacebookRequestErrorInfo($info, 'id');
         if ($fbError) {
             return $this->responseError($fbError);
         }
     }
     $viewParams = array('fbInfo' => $info, 'userToken' => $userToken);
     return $this->responseView('XenForo_ViewAdmin_Tools_TestFacebook', 'tools_test_facebook', $viewParams);
 }
Exemple #3
0
 protected function _fetchAvatarsFromExternalSites()
 {
     /* @var $externalAuthModel XenForo_Model_UserExternal */
     $externalAuthModel = $this->getModelFromCache('XenForo_Model_UserExternal');
     $external = $externalAuthModel->getExternalAuthAssociationsForUser($this->get('user_id'));
     $fbUser = false;
     if (!empty($external['facebook'])) {
         $extra = @unserialize($external['twitter']['extra_data']);
         if (!empty($extra['token'])) {
             $avatarData = XenForo_Helper_Facebook::getUserPicture($extra['token']);
             if ($avatarData && $this->_applyAvatar($avatarData)) {
                 return true;
             }
         }
     }
     $twitterUser = false;
     if (!empty($external['twitter'])) {
         $extra = @unserialize($external['twitter']['extra_data']);
         if (!empty($extra['token'])) {
             $credentials = XenForo_Helper_Twitter::getUserFromToken($extra['token'], $extra['secret']);
             if (!empty($credentials['profile_image_url'])) {
                 try {
                     // get the original size
                     $url = str_replace('_normal', '', $credentials['profile_image_url']);
                     $request = XenForo_Helper_Http::getClient($url)->request();
                     $avatarData = $request->getBody();
                 } catch (Exception $e) {
                     $avatarData = '';
                 }
                 if ($avatarData && $this->_applyAvatar($avatarData)) {
                     return true;
                 }
             }
         }
     }
     $externalExtendedHelpers = array('battlenet' => 'BattleNet', 'github' => 'GitHub', 'linkedin' => 'LinkedIn', 'live' => 'Live', 'odnoklassniki' => 'Odnoklassniki', 'soundcloud' => 'SoundCloud', 'tumblr' => 'Tumblr', 'twitch' => 'Twitch', 'vk' => 'VK');
     foreach ($externalExtendedHelpers as $provider => $class) {
         if (!empty($external[$provider])) {
             $extra = $external[$provider]['extra_data'];
             if (!empty($extra['token'])) {
                 $helper = $this->_getExternalExtendedHelper($class);
                 if ($helper->avatarExists) {
                     $eeUser = $helper->getUserInfo($extra['token']);
                     $avatarData = $helper->getAvatar($eeUser);
                     if ($avatarData && $this->_applyAvatar($avatarData)) {
                         return true;
                     }
                 }
             }
         }
     }
     return false;
 }
Exemple #4
0
 public static function getAccessTokenFromCode($code, $redirectUri = false)
 {
     if (!$redirectUri) {
         $requestPaths = XenForo_Application::get('requestPaths');
         $redirectUri = preg_replace('#(&|\\?)code=[^&]*#', '', $requestPaths['fullUri']);
     } else {
         // FB does this strange thing with slashes after a ? for some reason
         $parts = explode('?', $redirectUri, 2);
         if (isset($parts[1])) {
             $redirectUri = $parts[0] . '?' . str_replace('/', '%2F', $parts[1]);
         }
     }
     return XenForo_Helper_Facebook::getAccessToken($redirectUri, $code);
 }
Exemple #5
0
 /**
  * Registers a new account (or associates with an existing one) using Facebook.
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function actionFacebookRegister()
 {
     $this->_assertPostOnly();
     $fbToken = XenForo_Application::getSession()->get('fbToken');
     $fbUser = XenForo_Helper_Facebook::getUserInfo($fbToken);
     if (empty($fbUser['id'])) {
         return $this->responseError(new XenForo_Phrase('error_occurred_while_connecting_with_facebook'));
     }
     if (empty($fbUser['email'])) {
         return $this->responseError(new XenForo_Phrase('facebook_did_not_provide_email'));
     }
     $userExternalModel = $this->_getUserExternalModel();
     $redirect = XenForo_Application::getSession()->get('loginRedirect');
     if (!$redirect) {
         $redirect = $this->getDynamicRedirect(false, false);
     }
     $doAssoc = $this->_input->filterSingle('associate', XenForo_Input::STRING) || $this->_input->filterSingle('force_assoc', XenForo_Input::UINT);
     if ($doAssoc) {
         $userId = $this->_associateExternalAccount();
         $userExternalModel->updateExternalAuthAssociation('facebook', $fbUser['id'], $userId, array('token' => $fbToken));
         XenForo_Helper_Facebook::setUidCookie($fbUser['id']);
         XenForo_Application::getSession()->remove('loginRedirect');
         XenForo_Application::getSession()->remove('fbToken');
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $redirect);
     }
     $data = $this->_input->filter(array('username' => XenForo_Input::STRING, 'timezone' => XenForo_Input::STRING, 'location' => XenForo_Input::STRING, 'dob_day' => XenForo_Input::UINT, 'dob_month' => XenForo_Input::UINT, 'dob_year' => XenForo_Input::UINT));
     if (isset($fbUser['gender'])) {
         switch ($fbUser['gender']) {
             case 'man':
             case 'male':
                 $data['gender'] = 'male';
                 break;
             case 'woman':
             case 'female':
                 $data['gender'] = 'female';
                 break;
         }
     }
     if (!empty($fbUser['birthday'])) {
         $birthday = $this->_validateBirthdayString($fbUser['birthday'], 'm/d/y');
         if ($birthday) {
             $data['dob_year'] = $birthday[0];
             $data['dob_month'] = $birthday[1];
             $data['dob_day'] = $birthday[2];
         }
     }
     if (!empty($fbUser['website'])) {
         list($website) = preg_split('/\\r?\\n/', $fbUser['website']);
         if ($website && Zend_Uri::check($website)) {
             $data['homepage'] = $website;
         }
     }
     $data['email'] = $fbUser['email'];
     if (!empty($fbUser['location']['name'])) {
         $data['location'] = $fbUser['location']['name'];
     }
     $writer = $this->_setupExternalUser($data);
     if (!$this->_validateBirthdayInput($writer, $birthdayError)) {
         $writer->error($birthdayError);
     }
     $spamModel = $this->_runSpamCheck($writer);
     $writer->advanceRegistrationUserState(false);
     $writer->save();
     $user = $writer->getMergedData();
     $spamModel->logSpamTrigger('user', $user['user_id']);
     if ($this->_canApplyAvatar()) {
         $avatarData = XenForo_Helper_Facebook::getUserPicture($fbToken);
         $this->_applyAvatar($user, $avatarData);
     }
     $userExternalModel->updateExternalAuthAssociation('facebook', $fbUser['id'], $user['user_id'], array('token' => $fbToken));
     XenForo_Helper_Facebook::setUidCookie($fbUser['id']);
     XenForo_Application::getSession()->remove('loginRedirect');
     XenForo_Application::getSession()->remove('fbToken');
     return $this->_completeRegistration($user, array('redirect' => $redirect));
 }
Exemple #6
0
 public function actionExternalAccountsDisassociate()
 {
     $this->_assertPostOnly();
     $visitor = XenForo_Visitor::getInstance();
     $auth = $this->_getUserModel()->getUserAuthenticationObjectByUserId($visitor['user_id']);
     if (!$auth) {
         return $this->responseNoPermission();
     }
     /** @var XenForo_Model_UserExternal $externalAuthModel */
     $externalAuthModel = $this->getModelFromCache('XenForo_Model_UserExternal');
     $input = $this->_input->filter(array('disassociate' => XenForo_Input::STRING, 'account' => XenForo_Input::STRING));
     if ($input['disassociate'] && $input['account']) {
         $externalAuthModel->deleteExternalAuthAssociationForUser($input['account'], $visitor['user_id']);
         if (!$auth->hasPassword() && !$externalAuthModel->getExternalAuthAssociationsForUser($visitor['user_id'])) {
             $this->getModelFromCache('XenForo_Model_UserConfirmation')->resetPassword($visitor['user_id']);
         }
         if ($input['account'] == 'facebook') {
             XenForo_Helper_Facebook::setUidCookie(0);
         }
     }
     return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('account/external-accounts'));
 }
Exemple #7
0
 public function actionExtra()
 {
     $userId = $this->_input->filterSingle('user_id', XenForo_Input::UINT);
     $user = $this->_getUserOrError($userId);
     /** @var XenForo_Model_UserUpgrade $upgradeModel */
     $upgradeModel = $this->getModelFromCache('XenForo_Model_UserUpgrade');
     $upgradeRecords = $upgradeModel->getActiveUserUpgradeRecordsForUser($user['user_id']);
     /** @var XenForo_Model_UserExternal $externalAuthModel */
     $externalAuthModel = $this->getModelFromCache('XenForo_Model_UserExternal');
     $external = $externalAuthModel->getExternalAuthAssociationsForUser($user['user_id']);
     $fbUser = false;
     if (!empty($external['facebook'])) {
         $extra = @unserialize($external['facebook']['extra_data']);
         if (!empty($extra['token'])) {
             $fbUser = XenForo_Helper_Facebook::getUserInfo($extra['token'], $external['facebook']['provider_key']);
         }
     }
     $twitterUser = false;
     if (!empty($external['twitter'])) {
         $extra = @unserialize($external['twitter']['extra_data']);
         if (!empty($extra['token'])) {
             $twitterUser = XenForo_Helper_Twitter::getUserFromToken($extra['token'], $extra['secret']);
         }
     }
     return $this->responseView('XenForo_ViewAdmin_User_Extra', 'user_extra', array('user' => $user, 'upgradeRecords' => $upgradeRecords, 'external' => $external, 'fbUser' => $fbUser, 'twitterUser' => $twitterUser));
 }
Exemple #8
0
 /**
  * Registers a new account (or associates with an existing one) using Facebook.
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function actionFacebookRegister()
 {
     $this->_assertPostOnly();
     $fbToken = $this->_input->filterSingle('fb_token', XenForo_Input::STRING);
     $fbUser = XenForo_Helper_Facebook::getUserInfo($fbToken);
     if (empty($fbUser['id'])) {
         return $this->responseError(new XenForo_Phrase('error_occurred_while_connecting_with_facebook'));
     }
     $userModel = $this->_getUserModel();
     $userExternalModel = $this->_getUserExternalModel();
     $doAssoc = $this->_input->filterSingle('associate', XenForo_Input::STRING) || $this->_input->filterSingle('force_assoc', XenForo_Input::UINT);
     if ($doAssoc) {
         $associate = $this->_input->filter(array('associate_login' => XenForo_Input::STRING, 'associate_password' => XenForo_Input::STRING));
         $loginModel = $this->_getLoginModel();
         if ($loginModel->requireLoginCaptcha($associate['associate_login'])) {
             return $this->responseError(new XenForo_Phrase('your_account_has_temporarily_been_locked_due_to_failed_login_attempts'));
         }
         $userId = $userModel->validateAuthentication($associate['associate_login'], $associate['associate_password'], $error);
         if (!$userId) {
             $loginModel->logLoginAttempt($associate['associate_login']);
             return $this->responseError($error);
         }
         $userExternalModel->updateExternalAuthAssociation('facebook', $fbUser['id'], $userId);
         XenForo_Helper_Facebook::setUidCookie($fbUser['id']);
         XenForo_Application::get('session')->changeUserId($userId);
         XenForo_Visitor::setup($userId);
         $redirect = XenForo_Application::get('session')->get('fbRedirect');
         XenForo_Application::get('session')->remove('fbRedirect');
         if (!$redirect) {
             $redirect = $this->getDynamicRedirect(false, false);
         }
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $redirect);
     }
     $this->_assertRegistrationActive();
     $data = $this->_input->filter(array('username' => XenForo_Input::STRING, 'timezone' => XenForo_Input::STRING));
     if (XenForo_Dependencies_Public::getTosUrl() && !$this->_input->filterSingle('agree', XenForo_Input::UINT)) {
         return $this->responseError(new XenForo_Phrase('you_must_agree_to_terms_of_service'));
     }
     $options = XenForo_Application::get('options');
     $gender = '';
     if (isset($fbUser['gender'])) {
         switch ($fbUser['gender']) {
             case 'man':
             case 'male':
                 $gender = 'male';
                 break;
             case 'woman':
             case 'female':
                 $gender = 'female';
                 break;
         }
     }
     $writer = XenForo_DataWriter::create('XenForo_DataWriter_User');
     if ($options->registrationDefaults) {
         $writer->bulkSet($options->registrationDefaults, array('ignoreInvalidFields' => true));
     }
     $writer->bulkSet($data);
     $writer->bulkSet(array('gender' => $gender, 'email' => $fbUser['email'], 'location' => isset($fbUser['location']['name']) ? $fbUser['location']['name'] : ''));
     if (!empty($fbUser['birthday'])) {
         $birthdayParts = explode('/', $fbUser['birthday']);
         if (count($birthdayParts) == 3) {
             list($month, $day, $year) = $birthdayParts;
             $userAge = $this->_getUserProfileModel()->calculateAge($year, $month, $day);
             if ($userAge < intval($options->get('registrationSetup', 'minimumAge'))) {
                 // TODO: set a cookie to prevent re-registration attempts
                 return $this->responseError(new XenForo_Phrase('sorry_you_too_young_to_create_an_account'));
             }
             $writer->bulkSet(array('dob_year' => $year, 'dob_month' => $month, 'dob_day' => $day));
         }
     }
     if (!empty($fbUser['website'])) {
         list($website) = preg_split('/\\r?\\n/', $fbUser['website']);
         if ($website && Zend_Uri::check($website)) {
             $writer->set('homepage', $website);
         }
     }
     $auth = XenForo_Authentication_Abstract::create('XenForo_Authentication_NoPassword');
     $writer->set('scheme_class', $auth->getClassName());
     $writer->set('data', $auth->generate(''), 'xf_user_authenticate');
     $writer->set('user_group_id', XenForo_Model_User::$defaultRegisteredGroupId);
     $writer->set('language_id', XenForo_Visitor::getInstance()->get('language_id'));
     $writer->advanceRegistrationUserState(false);
     $writer->preSave();
     // TODO: option for extra user group
     $writer->save();
     $user = $writer->getMergedData();
     $avatarFile = tempnam(XenForo_Helper_File::getTempDir(), 'xf');
     if ($avatarFile) {
         $data = XenForo_Helper_Facebook::getUserPicture($fbToken);
         if ($data && $data[0] != '{') {
             file_put_contents($avatarFile, $data);
             try {
                 $user = array_merge($user, $this->getModelFromCache('XenForo_Model_Avatar')->applyAvatar($user['user_id'], $avatarFile));
             } catch (XenForo_Exception $e) {
             }
         }
         @unlink($avatarFile);
     }
     $userExternalModel->updateExternalAuthAssociation('facebook', $fbUser['id'], $user['user_id']);
     XenForo_Model_Ip::log($user['user_id'], 'user', $user['user_id'], 'register');
     XenForo_Helper_Facebook::setUidCookie($fbUser['id']);
     XenForo_Application::get('session')->changeUserId($user['user_id']);
     XenForo_Visitor::setup($user['user_id']);
     $redirect = $this->_input->filterSingle('redirect', XenForo_Input::STRING);
     $viewParams = array('user' => $user, 'redirect' => $redirect ? XenForo_Link::convertUriToAbsoluteUri($redirect) : '', 'facebook' => true);
     return $this->responseView('XenForo_ViewPublic_Register_Process', 'register_process', $viewParams, $this->_getRegistrationContainerParams());
 }
 protected function _getExternalRegisterFormResponse($viewName, $templateName, array $extraParams = array())
 {
     $registerTemplates = array('register_facebook', 'register_twitter', 'register_google', 'register_tumblr', 'register_ee');
     if (!empty($extraParams['existingUser'])) {
         if (in_array($templateName, $registerTemplates)) {
             /* @var $userExternalModel XenForo_Model_UserExternal */
             $userExternalModel = $this->_getUserExternalModel();
             $session = XenForo_Application::getSession();
             $userId = $extraParams['existingUser']['user_id'];
             $redirect = $extraParams['redirect'];
             switch ($templateName) {
                 case 'register_facebook':
                     $fbToken = $session->get('fbToken');
                     $fbUser = XenForo_Helper_Facebook::getUserInfo($fbToken);
                     if (empty($fbUser['id'])) {
                         return $this->responseError(new XenForo_Phrase('error_occurred_while_connecting_with_facebook'));
                     }
                     $provider = 'facebook';
                     $providerKey = $fbUser['id'];
                     $extra = array('token' => $fbToken);
                     XenForo_Helper_Facebook::setUidCookie($fbUser['id']);
                     XenForo_Application::getSession()->remove('loginRedirect');
                     XenForo_Application::getSession()->remove('fbToken');
                     break;
                 case 'register_twitter':
                     $accessToken = @unserialize($session->get('twitterAccessToken'));
                     $credentials = @unserialize($session->get('twitterCredentials'));
                     if (!$accessToken || !$credentials) {
                         return $this->responseError(new XenForo_Phrase('unexpected_error_occurred'));
                     }
                     $provider = 'twitter';
                     $providerKey = $credentials['id_str'];
                     $extra = array('token' => $accessToken->getToken(), 'secret' => $accessToken->getTokenSecret());
                     XenForo_Application::getSession()->remove('twitterAccessToken');
                     XenForo_Application::getSession()->remove('twitterCredentials');
                     break;
                 case 'register_google':
                     $credentials = $session->get('googleCredentials');
                     if (!$credentials) {
                         return $this->responseError(new XenForo_Phrase('unexpected_error_occurred'));
                     }
                     $provider = 'google';
                     $providerKey = $credentials['basic']['sub'];
                     $extra = $credentials['extra'];
                     break;
                 case 'register_tumblr':
                     $session = XenForo_Application::getSession();
                     $accessToken = @unserialize($session->get('tumblrAccessToken'));
                     $credentials = @unserialize($session->get('tumblrCredentials'));
                     if (!$accessToken || !$credentials) {
                         return $this->responseError(new XenForo_Phrase('unexpected_error_occurred'));
                     }
                     $provider = 'tumblr';
                     $providerKey = $credentials['response']['user']['name'];
                     $extra = array('token' => $accessToken->getToken(), 'secret' => $accessToken->getTokenSecret());
                     break;
                 case 'register_ee':
                     $provider = $extraParams['provider'];
                     switch ($provider) {
                         case 'battlenet':
                             $helper = $this->getHelper('ExternalExtended_Helper_BattleNet');
                             break;
                         case 'github':
                             $helper = $this->getHelper('ExternalExtended_Helper_GitHub');
                             break;
                         case 'linkedin':
                             $helper = $this->getHelper('ExternalExtended_Helper_LinkedIn');
                             break;
                         case 'live':
                             $helper = $this->getHelper('ExternalExtended_Helper_Live');
                             break;
                         case 'odnoklassniki':
                             $helper = $this->getHelper('ExternalExtended_Helper_Odnoklassniki');
                             break;
                         case 'soundcloud':
                             $helper = $this->getHelper('ExternalExtended_Helper_SoundCloud');
                             break;
                         case 'twitch':
                             $helper = $this->getHelper('ExternalExtended_Helper_Twitch');
                             break;
                         case 'vk':
                             $helper = $this->getHelper('ExternalExtended_Helper_VK');
                             break;
                         case 'strava':
                             $helper = $this->getHelper('ExternalExtended_Helper_Strava');
                             break;
                         case 'vimeo':
                             $helper = $this->getHelper('ExternalExtended_Helper_Vimeo');
                             break;
                     }
                     $eeToken = XenForo_Application::getSession()->get('eeToken');
                     $eeUser = $helper->getUserInfo($eeToken);
                     $providerKey = $eeUser[$helper->authUser];
                     $extra = $helper->getAssociation($eeToken, $eeUser);
                     XenForo_Application::getSession()->remove('loginRedirect');
                     XenForo_Application::getSession()->remove('eeToken');
                     break;
             }
             $userExternalModel->updateExternalAuthAssociation($provider, $providerKey, $userId, $extra);
             $visitor = XenForo_Visitor::setup($userId);
             XenForo_Application::getSession()->userLogin($userId, $visitor['password_date']);
             $this->_getUserModel()->setUserRememberCookie($userId);
             return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('index'));
         }
     }
     return parent::_getExternalRegisterFormResponse($viewName, $templateName, $extraParams);
 }
Exemple #10
0
 public function actionFacebook()
 {
     $visitor = XenForo_Visitor::getInstance();
     $auth = $this->_getUserModel()->getUserAuthenticationObjectByUserId($visitor['user_id']);
     if (!$auth) {
         return $this->responseNoPermission();
     }
     if ($this->isConfirmedPost()) {
         $disassociate = $this->_input->filter(array('disassociate' => XenForo_Input::STRING, 'disassociate_confirm' => XenForo_Input::STRING));
         if ($disassociate['disassociate'] && $disassociate['disassociate_confirm']) {
             XenForo_Helper_Facebook::setUidCookie(0);
             $this->getModelFromCache('XenForo_Model_UserExternal')->deleteExternalAuthAssociation('facebook', $visitor['facebook_auth_id'], $visitor['user_id']);
             if (!$auth->hasPassword()) {
                 $this->getModelFromCache('XenForo_Model_UserConfirmation')->resetPassword($visitor['user_id']);
             }
         }
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('account/facebook'));
     } else {
         if ($visitor['facebook_auth_id']) {
             $fbUser = XenForo_Helper_Facebook::getUserInfo('', $visitor['facebook_auth_id']);
         } else {
             $fbUser = false;
         }
         $viewParams = array('fbUser' => $fbUser, 'hasPassword' => $auth->hasPassword());
         return $this->_getWrapper('account', 'facebook', $this->responseView('XenForo_ViewPublic_Account_Facebook', 'account_facebook', $viewParams));
     }
 }
Exemple #11
0
 public function actionSocialShareTestFacebook()
 {
     $this->assertAdminPermission('option');
     $targetId = $this->_input->filterSingle('targetId', XenForo_Input::STRING);
     $targetIdParsed = bdSocialShare_Helper_Common::parseTargetId($targetId);
     if (!empty($targetIdParsed)) {
         if (!empty($targetIdParsed['targetId'])) {
             $targetId = $targetIdParsed['targetId'];
         }
         if (!empty($targetIdParsed['accessToken'])) {
             $accessToken = $targetIdParsed['accessToken'];
         }
     }
     if (empty($accessToken)) {
         return $this->responseNoPermission();
     }
     $targetInfo = XenForo_Helper_Facebook::getUserInfo($accessToken, $targetId);
     if (!empty($targetInfo['link'])) {
         $link = $targetInfo['link'];
     } elseif (!empty($targetInfo['id'])) {
         $link = sprintf('https://www.facebook.com/%s', $targetInfo['id']);
     } else {
         throw new bdSocialShare_Exception_Interrupted(serialize($targetInfo));
     }
     return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_UPDATED, $link);
 }