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); }
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); }
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; }
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); }
/** * 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)); }
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')); }
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)); }
/** * 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); }
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)); } }
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); }