/** * returns an access token * * @param ApiClient $pApiClient * @return OAuthToken */ public static function getAccess($pApiClient, $pUser = null) { if ($pUser) { $lUser = $pUser; } else { $lUser = sfContext::getInstance()->getUser()->getUser(); } $lAccessToken = OAuthServiceTokenPeer::getAccessToken($lUser->getId(), $pApiClient->getId()); if ($lAccessToken) { $lAccessToken = $lAccessToken->convert(); } else { $lServiceRegistry = $pApiClient->getOAuthServiceRegistry(); $lRequest = sfContext::getInstance()->getRequest(); $lOAuthKey = $lRequest->getParameter('oauth_token'); $lRequestToken = OAuthServiceTokenPeer::getRequestToken($lUser->getId(), $lOAuthKey); // check if a request token is available if ($lRequestToken) { // delete request token $lRequestToken->delete(); } else { throw new OAuthException('no valid request token'); } $lOAuthConsumer = new OAuthConsumer($lServiceRegistry->getConsumerKey(), $lServiceRegistry->getConsumerSecret(), null); // @todo better http error code handling try { $lAccessToken = OAuthClient::getAccessToken($lOAuthConsumer, $lServiceRegistry->getAccessUri(), $lRequestToken->convert(), $lServiceRegistry->getHttpMethod(), $lServiceRegistry->getScope(), self::getSignature($lServiceRegistry->getSignatureMethods())); } catch (Exception $e) { throw new OAuthException('request token seems to be invalid'); } OAuthServiceTokenPeer::saveAccessToken($lAccessToken, $lUser->getId(), $lServiceRegistry->getId()); } return $lAccessToken; }