Example #1
0
 /**
  * auth service callback
  * @param Base $f3
  * @param $params
  */
 function callback(\Base $f3, $params)
 {
     $Opauth = new \Opauth($this->config, false);
     switch ($Opauth->env['callback_transport']) {
         case 'session':
             $response = $f3->get('SESSION.opauth');
             $f3->clear('SESSION.opauth');
             break;
         case 'post':
             $response = unserialize(base64_decode($f3->get('POST.opauth')));
             break;
         case 'get':
             $response = unserialize(base64_decode($f3->get('GET.opauth')));
             break;
         default:
             $f3->error(400, 'Unsupported callback_transport');
             break;
     }
     if (isset($response['error'])) {
         $f3->call($this->abortFunc, array($response));
         return;
     }
     $data = $response['auth'];
     // validate
     if (empty($data) || empty($response['timestamp']) || empty($response['signature']) || empty($data['provider']) || empty($data['uid'])) {
         $f3->error(400, 'Invalid auth response: Missing key auth response components');
     } elseif (!$Opauth->validate(sha1(print_r($data, true)), $response['timestamp'], $response['signature'], $reason)) {
         $f3->error(400, 'Invalid auth response: ' . $reason);
     } else {
         // It's all good
         $f3->call($this->successFunc, array($data));
     }
 }
 private function callback()
 {
     global $wgOpauthConfig;
     /**
      * Instantiate Opauth with the loaded config but not run automatically
      */
     $Opauth = new Opauth($wgOpauthConfig, false);
     /**
      * Fetch auth response, based on transport configuration for callback
      */
     $response = null;
     switch ($Opauth->env['callback_transport']) {
         case 'session':
             session_start();
             $response = $_SESSION['opauth'];
             unset($_SESSION['opauth']);
             break;
         case 'post':
             $response = unserialize(base64_decode($_POST['opauth']));
             break;
         case 'get':
             $response = unserialize(base64_decode($_GET['opauth']));
             break;
         default:
             die('<strong style="color: red;">Error: </strong>Unsupported callback_transport.' . "<br>\n");
             break;
     }
     /**
      * Check if it's an error callback
      */
     if (array_key_exists('error', $response)) {
         die('<strong style="color: red;">Authentication error: </strong> Opauth returns error auth response.' . "<br>\n");
         print_r($response);
         die;
     }
     /**
      * Auth response validation
      *
      * To validate that the auth response received is unaltered, especially auth response that
      * is sent through GET or POST.
      */
     if (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])) {
         echo '<strong style="color: red;">Invalid auth response: </strong>Missing key auth response components.' . "<br>\n";
         print_r($response);
         die;
     } elseif (!$Opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $reason)) {
         echo '<strong style="color: red;">Invalid auth response: </strong>' . $reason . ".<br>\n";
         print_r($response);
         die;
     }
     //echo( '<strong style="color: green;">OK: </strong>Auth response is validated.'."<br>\n" );
     /**
      * It's all good. Go ahead with your application-specific authentication logic
      */
     // echo "<pre>".print_r($response,1)."</pre>";
     // die();
     wfRunHooks('OpauthUserAuthorized', array(strtolower($response['auth']['provider']), $response['auth']['uid'], $response['auth']['info'], $response['auth']));
 }
Example #3
0
 /**
  * @return LoginProviderEntity
  * @throws \Nette\InvalidStateException
  * @throws \Nette\InvalidArgumentException
  */
 protected function createLoginProviderEntity()
 {
     $type = $this->getOpauthType();
     $params = array('path' => $this->getCallbackUrl(), 'callback_url' => $this->getCallbackUrl(), 'Strategy' => array($type => $this->getConfig()));
     Debugger::$maxLen = 10000;
     $this->opauth = new Opauth($params, FALSE);
     $this->opauth->strategy = Strings::lower($type);
     $response = null;
     switch ($this->opauth->env['callback_transport']) {
         case 'session':
             $response = $_SESSION['opauth'];
             unset($_SESSION['opauth']);
             break;
         case 'post':
             $response = unserialize(base64_decode($_POST['opauth']));
             break;
         case 'get':
             $response = unserialize(base64_decode($_GET['opauth']));
             break;
         default:
             throw new InvalidArgumentException("Unsupported callback transport.");
             break;
     }
     if ($response === NULL) {
         if (isset($_GET['_opauth_action'])) {
             $action = explode('/', $_GET['_opauth_action']);
             $this->opauth->action = $action[1];
         }
         $this->opauth->run();
     }
     if (array_key_exists('error', $response)) {
         throw new InvalidStateException($response['error']['message']);
     }
     if (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])) {
         throw new InvalidStateException('Invalid auth response: Missing key auth response components');
     } elseif (!$this->opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $reason)) {
         throw new InvalidStateException('Invalid auth response: ' . $reason);
     }
     $ret = new LoginProviderEntity($response['auth']['uid'], static::getType());
     $this->fillLoginEntity($ret, $response['auth']['raw']);
     return $ret;
 }
 /**
  *
  *
  * @return void
  */
 public function callback()
 {
     $config = Config::get('opauth');
     $Opauth = new Opauth($config, FALSE);
     if (!session_id()) {
         session_start();
     }
     $response = isset($_SESSION['opauth']) ? $_SESSION['opauth'] : array();
     $err_msg = null;
     unset($_SESSION['opauth']);
     if (array_key_exists('error', $response)) {
         $err_msg = 'Authentication error:Opauth returns error auth response.';
     } else {
         if (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])) {
             $err_msg = 'Invalid auth response: Missing key auth response components.';
         } elseif (!$Opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $reason)) {
             $err_msg = 'Invalid auth response: ' . $reason;
         }
     }
     if ($err_msg) {
         return Redirect::to('account/login')->with('error', $err_msg);
     } else {
         $email = $response['auth']['info']['email'];
         $authentication = new Authentication();
         $authentication->provider = $response['auth']['provider'];
         $authentication->provider_uid = $response['auth']['uid'];
         $authentication_exist = Authentication::where('provider', $authentication->provider)->where('provider_uid', '=', $authentication->provider_uid)->first();
         if (!$authentication_exist) {
             if (Sentry::check()) {
                 $user = Sentry::getUser();
                 $authentication->user_id = $user->id;
             } else {
                 try {
                     $user = Sentry::getUserProvider()->findByLogin($email);
                 } catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
                     $user = Sentry::register(array('first_name' => $response['auth']['info']['first_name'], 'last_name' => $response['auth']['info']['last_name'], 'email' => $email, 'password' => Str::random(14)), TRUE);
                 }
                 $authentication->user_id = $user->id;
             }
             $authentication->save();
         } else {
             $user = Sentry::getUserProvider()->findById($authentication_exist->user_id);
             Sentry::login($user);
             Session::put('user_image', $response['auth']['info']['image']);
             return Redirect::to('/');
         }
     }
 }
Example #5
0
 /**
  * Call
  *
  * @return bool|void
  */
 public function call()
 {
     $options = $this->injectors;
     $app = $this->app;
     $that = $this;
     $callback = function ($req, $res, $next) use($that, $app, $options) {
         $opauth = new OPAuthService($options, false);
         $response = unserialize(base64_decode($app->input->data('opauth')));
         $reason = null;
         $auth = false;
         if (isset($response['error'])) {
             $reason = $response['error'];
         } else {
             if (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])) {
                 $reason = 'Missing key auth response components';
             } elseif (!$opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $_reason)) {
                 $reason = $_reason;
             } else {
                 $auth = $response['auth'];
             }
         }
         $req->auth = $auth;
         $req->auth_error = $reason;
         $next();
     };
     $init = function ($req, $res, $next) use($options) {
         if (isset($options['Strategy'][$req->params['strategy']])) {
             new OPAuthService($options);
         } else {
             $next();
         }
     };
     // Register url routes
     $app->post($options['callback_url'], $callback, $options['callback']);
     $app->get($options['login_url'] . '/:strategy', $init);
     $app->all($options['login_url'] . '/:strategy/:return', $init);
     $this->next();
 }
Example #6
0
 public function action_callback()
 {
     $_opauth = new Opauth($this->_config, false);
     switch ($_opauth->env['callback_transport']) {
         case 'session':
             session_start();
             $response = $_SESSION['opauth'];
             $s = var_export($_SESSION, true);
             unset($_SESSION['opauth']);
             break;
     }
     if (array_key_exists('error', $response)) {
         return $this->login_failed();
     } else {
         if (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])) {
             return $this->login_failed();
         } elseif (!$_opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $reason)) {
             return $this->login_failed();
         } else {
             return $this->opauth_login($response);
         }
     }
 }
 /**
  * Authentication callback
  *
  * This method handles the `final` callback from Opauth
  * to verify the response, handle errors and pass handling
  * of user profile to the Provider class.
  *
  * @since 1.0
  */
 public function callback()
 {
     // Create a new Opauth instance without triggering authentication
     $opauth = new Opauth($this->config, false);
     try {
         // only GET/POST supported
         switch ($opauth->env['callback_transport']) {
             case 'post':
                 $response = maybe_unserialize(base64_decode($_POST['opauth']));
                 break;
             case 'get':
                 $response = maybe_unserialize(base64_decode($_GET['opauth']));
                 break;
             default:
                 throw new Exception('Opauth unsupported transport callback');
         }
         $validation_reason = null;
         // check for error response
         if (array_key_exists('error', $response)) {
             throw new Exception('Response error');
         } elseif (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])) {
             // ensure required data
             throw new Exception('Invalid auth response - missing required components');
         } elseif (!$opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $validation_reason)) {
             // validate response has not been modified
             throw new Exception(sprintf('Invalid auth response - %s', $validation_reason));
         }
     } catch (Exception $e) {
         // log error messages and response data
         $GLOBALS['wc_social_login']->log(sprintf('Error: %s, Response: %s', $e->getMessage(), print_r($response, true)));
         $this->redirect('error');
     }
     // valid response, get provider
     $provider = $GLOBALS['wc_social_login']->get_provider(strtolower($response['auth']['provider']));
     $profile = new WC_Social_Login_Provider_Profile($response['auth']);
     // Let the provider handle processing user profile and logging in
     $user_id = $provider->process_profile($profile);
     // Redirect back to where we came from
     $this->redirect(null, $user_id);
 }
Example #8
0
        break;
    case 'get':
        $response = unserialize(base64_decode($_GET['opauth']));
        break;
    default:
        echo '<strong style="color: red;">Error: </strong>Unsupported callback_transport.' . "<br>\n";
        break;
}
/**
 * Check if it's an error callback
 */
if (array_key_exists('error', $response)) {
    echo '<strong style="color: red;">Authentication error: </strong> Opauth returns error auth response.' . "<br>\n";
} else {
    if (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])) {
        echo '<strong style="color: red;">Invalid auth response: </strong>Missing key auth response components.' . "<br>\n";
    } elseif (!$Opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $reason)) {
        echo '<strong style="color: red;">Invalid auth response: </strong>' . $reason . ".<br>\n";
    } else {
        echo '<strong style="color: green;">OK: </strong>Auth response is validated.' . "<br>\n";
        /**
         * It's all good. Go ahead with your application-specific authentication logic
         */
    }
}
/**
* Auth response dump
*/
echo "<pre>";
print_r($response);
echo "</pre>";
Example #9
0
 /**
  * @param  string|null              $strategy
  * @return IOpauthIdentity
  * @throws InvalidArgumentException
  * @throws InvalidLoginException
  */
 public function callback($strategy)
 {
     if ($strategy === NULL) {
         throw new InvalidLoginException('No auth response. Probably user cancelled the process.');
     }
     if ($this->isFakeStrategy($strategy)) {
         if ($this->config['debug'] != true) {
             throw new InvalidLoginException("Fake login available only in debug mode!");
         }
         return $this->createIdentity(array('uid' => "123123123", 'info' => array('name' => "Chuck Norris", 'image' => "http://placekitten.com/465/465"), 'raw' => array('link' => "http://www.google.com/search?q=chuck+norris", 'email' => "*****@*****.**", 'given_name' => "Chuck", 'family_name' => "Norris"), 'provider' => 'Google'));
     }
     $Opauth = new \Opauth($this->config, false);
     $response = null;
     switch ($Opauth->env['callback_transport']) {
         case 'session':
             $response = $_SESSION['opauth'];
             unset($_SESSION['opauth']);
             break;
         case 'post':
             $response = unserialize(base64_decode($_POST['opauth']));
             break;
         case 'get':
             $response = unserialize(base64_decode($_GET['opauth']));
             break;
         default:
             throw new InvalidArgumentException("Unsupported callback transport.");
             break;
     }
     if (array_key_exists('error', $response)) {
         throw new InvalidLoginException($response['error']['message']);
     }
     if (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])) {
         throw new InvalidLoginException('Invalid auth response: Missing key auth response components');
     } elseif (!$Opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $reason)) {
         throw new InvalidLoginException('Invalid auth response: ' . $reason);
     }
     \Nette\Diagnostics\Debugger::barDump($response['auth'], 'authInfo');
     return $this->createIdentity($response['auth']);
 }
Example #10
0
 public function endpoint()
 {
     if ($this->Auth->user()) {
         $this->set('redirect_to', array('plugin' => null, 'controller' => 'users', 'action' => 'linked'));
     } else {
         $this->set('redirect_to', array('plugin' => null, 'controller' => 'users', 'action' => 'login'));
     }
     $Opauth = new Opauth(Configure::read('Opauth'), false);
     /**
      * Fetch auth response, based on transport configuration for callback
      */
     $response = null;
     switch ($Opauth->env['callback_transport']) {
         case 'session':
             $response = $_SESSION['opauth'];
             unset($_SESSION['opauth']);
             break;
         case 'post':
             $response = unserialize(base64_decode($_POST['opauth']));
             break;
         case 'get':
             $response = unserialize(base64_decode($_GET['opauth']));
             break;
         default:
             $this->Session->setFlash('Unsupported callback_transport.', 'flash', array('type' => 'error'));
             return $this->render('endpoint');
             break;
     }
     /**
      * Check if it's an error callback
      */
     if (array_key_exists('error', $response)) {
         $this->Session->setFlash('Authentication error: Opauth returns error auth response.', 'flash', array('type' => 'error'));
     } else {
         if (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])) {
             $this->Session->setFlash('Invalid auth response: Missing key auth response components.', 'flash', array('type' => 'error'));
         } elseif (!$Opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $reason)) {
             $this->Session->setFlash(sprintf('Invalid auth response: %s', $reason), 'flash', array('type' => 'error'));
         } else {
             /**
              * It's all good. Go ahead with your application-specific authentication logic
              */
             if (!$this->Auth->user()) {
                 $auth = $this->User->Authentication->find('first', array('conditions' => array('Authentication.provider' => $response['auth']['provider'], 'Authentication.identifier' => $response['auth']['uid']), 'contain' => array('User')));
                 if (!empty($auth)) {
                     $this->Auth->login($auth['User']);
                     $this->set('redirect_to', array('plugin' => null, 'controller' => 'users', 'action' => 'play', 'demo'));
                 } else {
                     if (($id = $this->User->register($response, User::REGISTER_SOCIAL)) != false) {
                         $auth = $this->User->find('first', array('conditions' => array('User.id' => $id)));
                         $this->Auth->login($auth['User']);
                         $this->set('redirect_to', array('plugin' => null, 'controller' => 'users', 'action' => 'play', 'demo'));
                     } else {
                         $this->set('redirect_to', array('plugin' => null, 'controller' => 'users', 'action' => 'login'));
                     }
                 }
             } else {
                 if (!$this->User->Authentication->hasAny(array('Authentication.user_id' => $this->Auth->user('id'), 'Authentication.provider' => $response['auth']['provider']))) {
                     $data = array('Authentication' => array('user_id' => $this->Auth->user('id'), 'provider' => $response['auth']['provider'], 'identifier' => $response['auth']['uid'], 'email' => $data['auth']['info']['email'], 'display_name' => $data['auth']['info']['name'], 'avatar' => $data['auth']['info']['image']));
                     $this->User->Authentication->create();
                     if ($this->User->Authentication->save($data)) {
                         $this->Session->setFlash('Social linked succesfully', 'flash', array('type' => 'success'));
                     }
                 } else {
                     $this->Session->setFlash('Social was linked already', 'flash', array('type' => 'error'));
                 }
             }
         }
     }
 }
Example #11
0
 /**
  * Callback action. Redirected after auth
  */
 public function callbackAction()
 {
     $response = null;
     try {
         $opauth = new Opauth($this->_opauthConfig, false);
         if (isset($opauth->env['callback_transport']) && $opauth->env['callback_transport'] == 'session') {
             if (isset($_SESSION['opauth'])) {
                 $response = $_SESSION['opauth'];
                 unset($_SESSION['opauth']);
                 /**
                  * Check if it's an error callback
                  */
                 if (array_key_exists('error', $response)) {
                     throw new Zend_Controller_Action_Exception('Opauth returns error auth response');
                 } else {
                     if (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])) {
                         throw new Zend_Controller_Action_Exception('Invalid auth response: Missing key auth response components.');
                     } elseif (!$opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $reason)) {
                         //Auth response validation error
                         throw new Zend_Controller_Action_Exception('Invalid auth response: ' . $reason);
                     } else {
                         //Auth Ok!
                         $this->_oauthLogin($response);
                     }
                 }
             } else {
                 throw new Zend_Controller_Action_Exception('Auth session is empty.');
             }
         } else {
             throw new Zend_Controller_Action_Exception('Incorrect callback transport.');
         }
     } catch (Exception $ex) {
         //Display error and redirect to login page
         $this->_flashMessenger->addMessage($ex->getMessage());
         $this->_helper->redirector->gotoRoute(array(), 'login');
     }
 }