Exemplo n.º 1
0
 /**
  * @param Request $request
  * @return \Psr\Http\Message\ResponseInterface|RedirectResponse
  */
 public function handle(Request $request)
 {
     $redirectUri = (string) $request->getAttribute('originalUri', $request->getUri())->withQuery('');
     $server = new Twitter(['identifier' => $this->settings->get('flarum-auth-twitter.api_key'), 'secret' => $this->settings->get('flarum-auth-twitter.api_secret'), 'callback_uri' => $redirectUri]);
     $session = $request->getAttribute('session');
     $queryParams = $request->getQueryParams();
     $oAuthToken = array_get($queryParams, 'oauth_token');
     $oAuthVerifier = array_get($queryParams, 'oauth_verifier');
     if (!$oAuthToken || !$oAuthVerifier) {
         $temporaryCredentials = $server->getTemporaryCredentials();
         $session->set('temporary_credentials', serialize($temporaryCredentials));
         $session->save();
         // Second part of OAuth 1.0 authentication is to redirect the
         // resource owner to the login screen on the server.
         $server->authorize($temporaryCredentials);
         exit;
     }
     // Retrieve the temporary credentials we saved before
     $temporaryCredentials = unserialize($session->get('temporary_credentials'));
     // We will now retrieve token credentials from the server
     $tokenCredentials = $server->getTokenCredentials($temporaryCredentials, $oAuthToken, $oAuthVerifier);
     $user = $server->getUserDetails($tokenCredentials);
     $identification = ['twitter_id' => $user->uid];
     $suggestions = ['username' => $user->nickname, 'avatarUrl' => str_replace('_normal', '', $user->imageUrl)];
     return $this->authResponse->make($request, $identification, $suggestions);
 }
Exemplo n.º 2
0
 /**
  * Do twitter login
  *
  * @return mixed|void
  */
 public function twitterLogin()
 {
     $this->autoRender = false;
     $server = new Twitter(['identifier' => Configure::read('OAuth.providers.twitter.options.clientId'), 'secret' => Configure::read('OAuth.providers.twitter.options.clientSecret'), 'callbackUri' => Configure::read('OAuth.providers.twitter.options.redirectUri')]);
     $oauthToken = $this->request->query('oauth_token');
     $oauthVerifier = $this->request->query('oauth_verifier');
     if (!empty($oauthToken) && !empty($oauthVerifier)) {
         $temporaryCredentials = $this->request->session()->read('temporary_credentials');
         $tokenCredentials = $server->getTokenCredentials($temporaryCredentials, $oauthToken, $oauthVerifier);
         $user = (array) $server->getUserDetails($tokenCredentials);
         $user['token'] = ['accessToken' => $tokenCredentials->getIdentifier(), 'tokenSecret' => $tokenCredentials->getSecret()];
         $this->request->session()->write(Configure::read('Users.Key.Session.social'), $user);
         try {
             $user = $this->Auth->identify();
             $this->_afterIdentifyUser($user, true);
         } catch (UserNotActiveException $ex) {
             $exception = $ex;
         } catch (AccountNotActiveException $ex) {
             $exception = $ex;
         } catch (MissingEmailException $ex) {
             $exception = $ex;
         }
         if (!empty($exception)) {
             return $this->failedSocialLogin($exception, $this->request->session()->read(Configure::read('Users.Key.Session.social')), true);
         }
     } else {
         $temporaryCredentials = $server->getTemporaryCredentials();
         $this->request->session()->write('temporary_credentials', $temporaryCredentials);
         $url = $server->getAuthorizationUrl($temporaryCredentials);
         return $this->redirect($url);
     }
 }
Exemplo n.º 3
0
 public function buildToken(Request $req, $firewallName)
 {
     $providerKey = $req->attributes->get('provider');
     // Retrieve the temporary credentials from step 2
     $temporaryCredentials = unserialize($this->session->get(self::TEMP_CRED));
     // Third and final part to OAuth 1.0 authentication is to retrieve token
     // credentials (formally known as access tokens in earlier OAuth 1.0
     // specs).
     $tokenCredentials = $this->provider->getTokenCredentials($temporaryCredentials, $req->query->get('oauth_token'), $req->query->get('oauth_verifier'));
     $this->session->remove(self::TEMP_CRED);
     // We got an access token, let's now get the user's details
     /** @var \League\OAuth1\Client\Entity\User */
     $userDetails = $this->provider->getUserDetails($tokenCredentials);
     $internToken = new Token($firewallName, $providerKey, $userDetails->uid, [self::IDENTIFIED]);
     $internToken->setAttribute('nickname', $userDetails->nickname);
     $this->logger->debug('twitter', iterator_to_array($userDetails->getIterator()));
     return $internToken;
 }
Exemplo n.º 4
0
 /**
  * Returns an instance of TwitterOAuthUser.
  *
  * @return TwitterOAuthUser
  */
 public function getUserDetails()
 {
     $accessToken = $this->getAccessToken();
     $tc = new TokenCredentials();
     $tc->setIdentifier($accessToken['oauth_token']);
     $tc->setSecret($accessToken['oauth_token_secret']);
     $user = $this->instance->getUserDetails($tc);
     $twUserObj = new TwitterOAuthUser($user->nickname);
     $twUserObj->setAvatarUrl($user->imageUrl);
     $twUserObj->setName($user->name);
     $twUserObj->setLocation($user->location);
     $twUserObj->setProfileUrl('https://twitter.com/' . $user->screen_name);
     $twUserObj->setWebsite($user->urls['url']);
     $twUserObj->setDescription($user->description);
     $twUserObj->setProfileId($user->uid);
     return $twUserObj;
 }
Exemplo n.º 5
0
 /**
  * @param Request $request
  * @param array $routeParams
  * @return \Psr\Http\Message\ResponseInterface|RedirectResponse
  */
 public function handle(Request $request, array $routeParams = [])
 {
     session_start();
     $server = new Twitter(array('identifier' => $this->settings->get('flarum-auth-twitter.api_key'), 'secret' => $this->settings->get('flarum-auth-twitter.api_secret'), 'callback_uri' => $this->url->toRoute('auth.twitter')));
     if (!isset($_GET['oauth_token']) || !isset($_GET['oauth_verifier'])) {
         $temporaryCredentials = $server->getTemporaryCredentials();
         $_SESSION['temporary_credentials'] = serialize($temporaryCredentials);
         session_write_close();
         // Second part of OAuth 1.0 authentication is to redirect the
         // resource owner to the login screen on the server.
         $server->authorize($temporaryCredentials);
         exit;
     }
     // Retrieve the temporary credentials we saved before
     $temporaryCredentials = unserialize($_SESSION['temporary_credentials']);
     // We will now retrieve token credentials from the server
     $tokenCredentials = $server->getTokenCredentials($temporaryCredentials, $_GET['oauth_token'], $_GET['oauth_verifier']);
     $user = $server->getUserDetails($tokenCredentials);
     return $this->authenticate(['twitter_id' => $user->uid], ['username' => $user->nickname]);
 }