/** * Processes the callback from OAuth provider * * @param sfRequest $request */ public function executeCallback(sfRequest $request) { $this->forward404Unless($request->getParameter('provider')); // user has denied auth'ing the app, don't continue if ($request->hasParameter('error')) { $this->redirect('@homepage'); } $config = sfConfig::get('app_cacophony'); $provider = $request->getParameter('provider'); $this->forward404Unless(in_array($provider, array_keys($config['providers']))); // if OAuth 2.0 if (is_null($config['providers'][$provider]['request_token_url'])) { $this->forward($request->getParameter('module'), 'callback2'); } if (!$this->getUser()->isAuthenticated() || $config['plugin']['allow_multiple_tokens']) { $requestToken = $this->getUser()->getAttribute('requestToken', null, sprintf('sfCacophonyPlugin/%s', $provider)); if ($requestToken) { try { $this->getUser()->setAttribute('accessToken', sfCacophonyOAuth::getAccessToken($provider, $request->getParameter('oauth_token'), $requestToken['oauth_token_secret'], $request->getParameter('oauth_verifier')), sprintf('sfCacophonyPlugin/%s', $provider)); $this->getUser()->getAttributeHolder()->remove('requestToken', null, sprintf('sfCacophonyPlugin/%s', $provider)); // add me to session $me = sfCacophonyOAuth::getMe($provider, $this->getUser()->getAttribute('accessToken', null, sprintf('sfCacophonyPlugin/%s', $provider))); $this->getUser()->setAttribute('me', $me['normalized'], sprintf('sfCacophonyPlugin/%s', $provider)); } catch (Exception $e) { $this->getUser()->setFlash('error', sprintf('Failed to retrieve access token: %s', $e->getMessage())); $this->redirect('@homepage'); } } } else { $this->redirect('@homepage'); } return sfView::NONE; }