Exemplo n.º 1
0
 /**
  * Connect
  */
 public function connect($variables)
 {
     if (!craft()->httpSession->get('oauth.response')) {
         // we don't have any response yet, get ready to connect
         // clean session
         $this->_sessionClean();
         // get provider
         $provider = craft()->oauth->getProvider($variables['provider']);
         // referer
         if (!empty($variables['referer'])) {
             $referer = $variables['referer'];
         } else {
             $referer = craft()->request->getUrl();
         }
         craft()->httpSession->add('oauth.referer', $referer);
         // scope
         if (!empty($variables['scope'])) {
             $scope = $variables['scope'];
         } else {
             $scope = [];
         }
         craft()->httpSession->add('oauth.scope', $scope);
         // authorizationOptions
         if (!empty($variables['authorizationOptions'])) {
             $authorizationOptions = $variables['authorizationOptions'];
         } else {
             $authorizationOptions = [];
             // $authorizationOptions = $provider->getauthorizationOptions();
         }
         craft()->httpSession->add('oauth.authorizationOptions', $authorizationOptions);
         // redirect url
         $redirectUrl = UrlHelper::getActionUrl('oauth/connect/', array('provider' => $variables['provider']));
         OauthPlugin::log('Redirect to OAuth Connect' . "\r\n" . 'Redirect to: ' . $redirectUrl . "\r\n" . 'Session Data: ' . print_r(['oauth.referer' => $referer, 'oauth.scope' => $scope, 'oauth.authorizationOptions' => $authorizationOptions], true) . "\r\n", LogLevel::Info);
         // redirect
         craft()->request->redirect($redirectUrl);
     } else {
         // populate token object from response
         $response = craft()->httpSession->get('oauth.response');
         craft()->httpSession->remove('oauth.response');
         OauthPlugin::log('OAuth Connect - Retrieve token from response' . "\r\n" . 'Session Data: ' . print_r(['oauth.response' => $response], true) . "\r\n", LogLevel::Info);
         if ($response['token']) {
             // response token to token model
             $token = new Oauth_TokenModel();
             $provider = $this->getProvider($variables['provider']);
             if ($provider) {
                 switch ($provider->getOauthVersion()) {
                     case 1:
                         if (!empty($response['token']['identifier'])) {
                             $token->accessToken = $response['token']['identifier'];
                         }
                         if (!empty($response['token']['secret'])) {
                             $token->secret = $response['token']['secret'];
                         }
                         break;
                     case 2:
                         if (!empty($response['token']['accessToken'])) {
                             $token->accessToken = $response['token']['accessToken'];
                         }
                         if (!empty($response['token']['endOfLife'])) {
                             $token->endOfLife = $response['token']['endOfLife'];
                         }
                         if (!empty($response['token']['refreshToken'])) {
                             $token->refreshToken = $response['token']['refreshToken'];
                         }
                         break;
                 }
             }
             $token->providerHandle = $variables['provider'];
             $token->pluginHandle = $variables['plugin'];
             OauthPlugin::log('OAuth Connect - Token' . "\r\n" . print_r(["Token: \r\n" . print_r($token->getAttributes(), true)], true), LogLevel::Info);
             $response['token'] = $token;
         }
         $this->_sessionClean();
         return $response;
     }
 }