public function actionExternalAccounts() { $response = parent::actionExternalAccounts(); if ($response instanceof XenForo_ControllerResponse_View && $response->subView instanceof XenForo_ControllerResponse_View) { $params =& $response->subView->params; if (!empty($params['external']['accountsfreedom'])) { $external = $params['external']['accountsfreedom']; $accounts = new AnyTV_AccountsAuthentication_Accounts(); $extraData = unserialize($external['extra_data']); $accountsUser = $accounts->getUserInfo($external['provider_key'], $extraData['token']); if (!empty($accountsUser)) { $accountsUser = $accountsUser; } else { $accountsUser = false; } $params['accountsUser'] = $accountsUser; } } return $response; }
public function actionAccountsfreedom() { $accounts = new AnyTV_AccountsAuthentication_Accounts(); if (!$accounts->isConnectable()) { return $this->responseError(new XenForo_Phrase('something_went_wrong_please_try_again')); } $assocUserId = $this->_input->filterSingle('assoc', XenForo_Input::UINT); $redirect = $this->_getExternalAuthRedirect(); $session = XenForo_Application::getSession(); $redirectUri = XenForo_Link::buildPublicLink('canonical:register/accountsfreedom', false, array('assoc' => $assocUserId ? $assocUserId : false)); if ($this->_input->filterSingle('reg', XenForo_Input::UINT)) { $session->set('loginRedirect', $redirect); $session->remove('accountsToken'); return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL, $accounts->getAccountsRequestUrl($redirectUri)); } $accountsToken = $this->_input->filterSingle('token', XenForo_Input::STRING); if (!$accountsToken) { $accountsToken = $session->get('accountsToken'); } $accountsUser = false; if (!$accountsToken) { $error = $this->_input->filterSingle('error', XenForo_Input::STRING); if ($error == 'access_denied') { return $this->responseError(new XenForo_Phrase('you_did_not_grant_permission_to_access_external_account')); } $code = $this->_input->filterSingle('code', XenForo_Input::STRING); if (!$code) { return $this->responseError(new XenForo_Phrase('accountsfreedom_error_occurred_while_connecting_with_accountsfreedom1')); } $state = $this->_input->filterSingle('state', XenForo_Input::STRING); if (!$state || !$session->get('accountsCsrfState') || $state !== $session->get('accountsCsrfState')) { return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('canonical:index')); } $token = $accounts->getAccessTokenFromCode($code, $redirectUri); if (!isset($token['access_token'])) { return $this->responseError(new XenForo_Phrase('accountsfreedom_error_occurred_while_connecting_with_accountsfreedom2')); } $accountsToken = $token['access_token']; $accountsUser = $accounts->getUserInfo(null, $accountsToken); } if (!isset($accountsUser['user_id'])) { return $this->responseError(new XenForo_Phrase('accountsfreedom_error_occurred_while_connecting_with_accountsfreedom3')); } $userModel = $this->_getUserModel(); $userExternalModel = $this->_getUserExternalModel(); $accountsAssoc = $userExternalModel->getExternalAuthAssociation('accountsfreedom', $accountsUser['user_id']); if ($accountsAssoc && $userModel->getUserById($accountsAssoc['user_id'])) { $userExternalModel->updateExternalAuthAssociationExtra($accountsAssoc['user_id'], 'accountsfreedom', array('token' => $accountsToken)); $userExternalModel->updateExternalAuthAssociationExtra($accountsAssoc['user_id'], 'accountsfreedom', array('data' => $accountsUser)); $redirect = XenForo_Application::getSession()->get('loginRedirect'); if (!$redirect) { $redirect = $this->getDynamicRedirect(false, false); } $visitor = XenForo_Visitor::setup($accountsAssoc['user_id']); XenForo_Application::getSession()->userLogin($accountsAssoc['user_id'], $visitor['password_date']); $this->_getUserModel()->setUserRememberCookie($accountsAssoc['user_id']); return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $redirect); } $existingUser = false; $emailMatch = false; if (XenForo_Visitor::getUserId()) { $existingUser = XenForo_Visitor::getInstance(); } else { if ($assocUserId) { $existingUser = $userModel->getUserById($assocUserId); } } $existingUser = $userModel->getUserByEmail($accountsUser['email']); if ($existingUser) { $emailMatch = true; } $viewName = 'AnyTV_AccountsAuthentication_ViewPublic_Accounts_Register'; $templateName = 'register_accountsfreedom'; XenForo_Application::getSession()->set('accountsToken', $accountsToken); XenForo_Application::getSession()->set('accountsUser', $accountsUser); if ($existingUser) { // must associate: matching user return $this->_getExternalRegisterFormResponse($viewName, $templateName, array('associateOnly' => true, 'accountsfreedom' => $accountsUser, 'existingUser' => $existingUser, 'emailMatch' => $emailMatch, 'redirect' => $redirect)); } $this->_assertRegistrationActive(); if (!empty($accountsUser['birthday'])) { $this->_validateBirthdayString($accountsUser['birthday'], 'm/d/y'); } return $this->_getExternalRegisterFormResponse($viewName, $templateName, array('accountsfreedom' => $accountsUser, 'redirect' => $redirect, 'showDob' => empty($accountsUser['birthday']))); }