示例#1
0
 /**
  * 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;
 }