Paul Klimov
11 years ago
17 changed files with 499 additions and 813 deletions
@ -0,0 +1,145 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @link http://www.yiiframework.com/ |
||||||
|
* @copyright Copyright (c) 2008 Yii Software LLC |
||||||
|
* @license http://www.yiiframework.com/license/ |
||||||
|
*/ |
||||||
|
|
||||||
|
namespace yii\authclient; |
||||||
|
|
||||||
|
use Yii; |
||||||
|
use yii\base\NotSupportedException; |
||||||
|
use yii\helpers\StringHelper; |
||||||
|
|
||||||
|
/** |
||||||
|
* Class ProviderTrait |
||||||
|
* |
||||||
|
* @see ClientInterface |
||||||
|
* |
||||||
|
* @author Paul Klimov <klimov.paul@gmail.com> |
||||||
|
* @since 2.0 |
||||||
|
*/ |
||||||
|
trait ClientTrait |
||||||
|
{ |
||||||
|
/** |
||||||
|
* @var string service id. |
||||||
|
* This value mainly used as HTTP request parameter. |
||||||
|
*/ |
||||||
|
private $_id; |
||||||
|
/** |
||||||
|
* @var string service unique name. |
||||||
|
* This value may be used in database records, CSS files and so on. |
||||||
|
*/ |
||||||
|
private $_name; |
||||||
|
/** |
||||||
|
* @var string service title to display in views. |
||||||
|
*/ |
||||||
|
private $_title; |
||||||
|
/** |
||||||
|
* @var array authenticated user attributes. |
||||||
|
*/ |
||||||
|
private $_userAttributes; |
||||||
|
|
||||||
|
/** |
||||||
|
* @param string $id service id. |
||||||
|
*/ |
||||||
|
public function setId($id) |
||||||
|
{ |
||||||
|
$this->_id = $id; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return string service id |
||||||
|
*/ |
||||||
|
public function getId() |
||||||
|
{ |
||||||
|
if (empty($this->_id)) { |
||||||
|
$this->_id = $this->getName(); |
||||||
|
} |
||||||
|
return $this->_id; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return string service name. |
||||||
|
*/ |
||||||
|
public function getName() |
||||||
|
{ |
||||||
|
if ($this->_name === null) { |
||||||
|
$this->_name = $this->defaultName(); |
||||||
|
} |
||||||
|
return $this->_name; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param string $name service name. |
||||||
|
*/ |
||||||
|
public function setName($name) |
||||||
|
{ |
||||||
|
$this->_name = $name; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return string service title. |
||||||
|
*/ |
||||||
|
public function getTitle() |
||||||
|
{ |
||||||
|
if ($this->_title === null) { |
||||||
|
$this->_title = $this->defaultTitle(); |
||||||
|
} |
||||||
|
return $this->_title; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param string $title service title. |
||||||
|
*/ |
||||||
|
public function setTitle($title) |
||||||
|
{ |
||||||
|
$this->_title = $title; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return array list of user attributes |
||||||
|
*/ |
||||||
|
public function getUserAttributes() |
||||||
|
{ |
||||||
|
if ($this->_userAttributes === null) { |
||||||
|
$this->_userAttributes = $this->initUserAttributes(); |
||||||
|
} |
||||||
|
return $this->_userAttributes; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param array $userAttributes list of user attributes |
||||||
|
*/ |
||||||
|
public function setUserAttributes(array $userAttributes) |
||||||
|
{ |
||||||
|
$this->_userAttributes = $userAttributes; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Generates service name. |
||||||
|
* @return string service name. |
||||||
|
*/ |
||||||
|
protected function defaultName() |
||||||
|
{ |
||||||
|
return StringHelper::basename(get_class($this)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Generates service title. |
||||||
|
* @return string service title. |
||||||
|
*/ |
||||||
|
protected function defaultTitle() |
||||||
|
{ |
||||||
|
return StringHelper::basename(get_class($this)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Initializes authenticated user attributes. |
||||||
|
* @return array auth user attributes. |
||||||
|
*/ |
||||||
|
protected function initUserAttributes() |
||||||
|
{ |
||||||
|
throw new NotSupportedException('Method "' . get_class($this) . '::' . __FUNCTION__ . '" not implemented.'); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,107 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @link http://www.yiiframework.com/ |
||||||
|
* @copyright Copyright (c) 2008 Yii Software LLC |
||||||
|
* @license http://www.yiiframework.com/license/ |
||||||
|
*/ |
||||||
|
|
||||||
|
namespace yii\authclient; |
||||||
|
|
||||||
|
use yii\base\Component; |
||||||
|
use yii\base\InvalidParamException; |
||||||
|
use Yii; |
||||||
|
|
||||||
|
/** |
||||||
|
* Collection is a storage for all auth clients in the application. |
||||||
|
* |
||||||
|
* Example application configuration: |
||||||
|
* |
||||||
|
* ~~~ |
||||||
|
* 'components' => [ |
||||||
|
* 'auth' => [ |
||||||
|
* 'class' => 'yii\authclient\Collection', |
||||||
|
* 'clients' => [ |
||||||
|
* 'google' => [ |
||||||
|
* 'class' => 'yii\authclient\clients\GoogleOpenId' |
||||||
|
* ], |
||||||
|
* 'facebook' => [ |
||||||
|
* 'class' => 'yii\authclient\clients\Facebook', |
||||||
|
* 'clientId' => 'facebook_client_id', |
||||||
|
* 'clientSecret' => 'facebook_client_secret', |
||||||
|
* ], |
||||||
|
* ], |
||||||
|
* ] |
||||||
|
* ... |
||||||
|
* ] |
||||||
|
* ~~~ |
||||||
|
* |
||||||
|
* @property array $clients list of Auth clients with their configuration in format: 'clientId' => [...] |
||||||
|
* |
||||||
|
* @author Paul Klimov <klimov.paul@gmail.com> |
||||||
|
* @since 2.0 |
||||||
|
*/ |
||||||
|
class Collection extends Component |
||||||
|
{ |
||||||
|
/** |
||||||
|
* @var array list of Auth clients with their configuration in format: 'clientId' => [...] |
||||||
|
*/ |
||||||
|
private $_clients = []; |
||||||
|
|
||||||
|
/** |
||||||
|
* @param array $clients list of auth clients |
||||||
|
*/ |
||||||
|
public function setClients(array $clients) |
||||||
|
{ |
||||||
|
$this->_clients = $clients; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return ClientInterface[] list of auth clients. |
||||||
|
*/ |
||||||
|
public function getClients() |
||||||
|
{ |
||||||
|
$clients = []; |
||||||
|
foreach ($this->_clients as $id => $client) { |
||||||
|
$clients[$id] = $this->getClient($id); |
||||||
|
} |
||||||
|
return $clients; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param string $id service id. |
||||||
|
* @return ClientInterface auth client instance. |
||||||
|
* @throws InvalidParamException on non existing client request. |
||||||
|
*/ |
||||||
|
public function getClient($id) |
||||||
|
{ |
||||||
|
if (!array_key_exists($id, $this->_clients)) { |
||||||
|
throw new InvalidParamException("Unknown auth client '{$id}'."); |
||||||
|
} |
||||||
|
if (!is_object($this->_clients[$id])) { |
||||||
|
$this->_clients[$id] = $this->createClient($id, $this->_clients[$id]); |
||||||
|
} |
||||||
|
return $this->_clients[$id]; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Checks if client exists in the hub. |
||||||
|
* @param string $id client id. |
||||||
|
* @return boolean whether client exist. |
||||||
|
*/ |
||||||
|
public function hasClient($id) |
||||||
|
{ |
||||||
|
return array_key_exists($id, $this->_clients); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Creates auth client instance from its array configuration. |
||||||
|
* @param string $id auth client id. |
||||||
|
* @param array $config auth client instance configuration. |
||||||
|
* @return ClientInterface auth client instance. |
||||||
|
*/ |
||||||
|
protected function createClient($id, $config) |
||||||
|
{ |
||||||
|
$config['id'] = $id; |
||||||
|
return Yii::createObject($config); |
||||||
|
} |
||||||
|
} |
@ -1,105 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\authclient\provider; |
|
||||||
|
|
||||||
use yii\base\Component; |
|
||||||
use yii\base\InvalidParamException; |
|
||||||
use Yii; |
|
||||||
|
|
||||||
/** |
|
||||||
* Collection is a storage for all auth providers in the application. |
|
||||||
* |
|
||||||
* Example application configuration: |
|
||||||
* |
|
||||||
* ~~~ |
|
||||||
* 'components' => [ |
|
||||||
* 'auth' => [ |
|
||||||
* 'class' => 'yii\authclient\provider\Collection', |
|
||||||
* 'providers' => [ |
|
||||||
* 'google' => [ |
|
||||||
* 'class' => 'yii\authclient\provider\GoogleOpenId' |
|
||||||
* ], |
|
||||||
* 'facebook' => [ |
|
||||||
* 'class' => 'yii\authclient\provider\Facebook', |
|
||||||
* 'clientId' => 'facebook_client_id', |
|
||||||
* 'clientSecret' => 'facebook_client_secret', |
|
||||||
* ], |
|
||||||
* ], |
|
||||||
* ] |
|
||||||
* ... |
|
||||||
* ] |
|
||||||
* ~~~ |
|
||||||
* |
|
||||||
* @author Paul Klimov <klimov.paul@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class Collection extends Component |
|
||||||
{ |
|
||||||
/** |
|
||||||
* @var array list of Auth providers with their configuration in format: 'providerId' => [...] |
|
||||||
*/ |
|
||||||
private $_providers = []; |
|
||||||
|
|
||||||
/** |
|
||||||
* @param array $providers list of auth providers |
|
||||||
*/ |
|
||||||
public function setProviders(array $providers) |
|
||||||
{ |
|
||||||
$this->_providers = $providers; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @return ProviderInterface[] list of auth providers. |
|
||||||
*/ |
|
||||||
public function getProviders() |
|
||||||
{ |
|
||||||
$providers = []; |
|
||||||
foreach ($this->_providers as $id => $provider) { |
|
||||||
$providers[$id] = $this->getProvider($id); |
|
||||||
} |
|
||||||
return $providers; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @param string $id service id. |
|
||||||
* @return ProviderInterface auth service instance. |
|
||||||
* @throws InvalidParamException on non existing provider request. |
|
||||||
*/ |
|
||||||
public function getProvider($id) |
|
||||||
{ |
|
||||||
if (!array_key_exists($id, $this->_providers)) { |
|
||||||
throw new InvalidParamException("Unknown auth provider '{$id}'."); |
|
||||||
} |
|
||||||
if (!is_object($this->_providers[$id])) { |
|
||||||
$this->_providers[$id] = $this->createProvider($id, $this->_providers[$id]); |
|
||||||
} |
|
||||||
return $this->_providers[$id]; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Checks if provider exists in the hub. |
|
||||||
* @param string $id provider id. |
|
||||||
* @return boolean whether provider exist. |
|
||||||
*/ |
|
||||||
public function hasProvider($id) |
|
||||||
{ |
|
||||||
return array_key_exists($id, $this->_providers); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Creates auth provider instance from its array configuration. |
|
||||||
* @param string $id auth provider id. |
|
||||||
* @param array $config auth provider instance configuration. |
|
||||||
* @return ProviderInterface auth provider instance. |
|
||||||
*/ |
|
||||||
protected function createProvider($id, $config) |
|
||||||
{ |
|
||||||
$config['id'] = $id; |
|
||||||
return Yii::createObject($config); |
|
||||||
} |
|
||||||
} |
|
@ -1,51 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\authclient\provider; |
|
||||||
|
|
||||||
use Yii; |
|
||||||
|
|
||||||
/** |
|
||||||
* Class OAuth1 |
|
||||||
* |
|
||||||
* @author Paul Klimov <klimov.paul@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class OAuth1 extends \yii\authclient\OAuth1 implements ProviderInterface |
|
||||||
{ |
|
||||||
use ProviderTrait; |
|
||||||
|
|
||||||
/** |
|
||||||
* @inheritdoc |
|
||||||
*/ |
|
||||||
public function authenticate() |
|
||||||
{ |
|
||||||
// user denied error |
|
||||||
if (isset($_GET['denied'])) { |
|
||||||
return $this->redirectCancel(); |
|
||||||
} |
|
||||||
|
|
||||||
if (isset($_REQUEST['oauth_token'])) { |
|
||||||
$oauthToken = $_REQUEST['oauth_token']; |
|
||||||
} |
|
||||||
|
|
||||||
if (!isset($oauthToken)) { |
|
||||||
// Get request token. |
|
||||||
$requestToken = $this->fetchRequestToken(); |
|
||||||
// Get authorization URL. |
|
||||||
$url = $this->buildAuthUrl($requestToken); |
|
||||||
// Redirect to authorization URL. |
|
||||||
return Yii::$app->getResponse()->redirect($url); |
|
||||||
} else { |
|
||||||
// Upgrade to access token. |
|
||||||
$accessToken = $this->fetchAccessToken(); |
|
||||||
$this->isAuthenticated = true; |
|
||||||
} |
|
||||||
|
|
||||||
return $this->isAuthenticated; |
|
||||||
} |
|
||||||
} |
|
@ -1,58 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\authclient\provider; |
|
||||||
use Yii; |
|
||||||
use yii\base\Exception; |
|
||||||
|
|
||||||
/** |
|
||||||
* Class OAuth2 |
|
||||||
* |
|
||||||
* @author Paul Klimov <klimov.paul@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class OAuth2 extends \yii\authclient\OAuth2 implements ProviderInterface |
|
||||||
{ |
|
||||||
use ProviderTrait; |
|
||||||
|
|
||||||
/** |
|
||||||
* @inheritdoc |
|
||||||
*/ |
|
||||||
public function authenticate() |
|
||||||
{ |
|
||||||
if (isset($_GET['error'])) { |
|
||||||
if ($_GET['error'] == 'access_denied') { |
|
||||||
// user denied error |
|
||||||
return $this->redirectCancel(); |
|
||||||
} else { |
|
||||||
// request error |
|
||||||
if (isset($_GET['error_description'])) { |
|
||||||
$errorMessage = $_GET['error_description']; |
|
||||||
} elseif (isset($_GET['error_message'])) { |
|
||||||
$errorMessage = $_GET['error_message']; |
|
||||||
} else { |
|
||||||
$errorMessage = http_build_query($_GET); |
|
||||||
} |
|
||||||
throw new Exception('Auth error: ' . $errorMessage); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
// Get the access_token and save them to the session. |
|
||||||
if (isset($_GET['code'])) { |
|
||||||
$code = $_GET['code']; |
|
||||||
$token = $this->fetchAccessToken($code); |
|
||||||
if (!empty($token)) { |
|
||||||
$this->isAuthenticated = true; |
|
||||||
} |
|
||||||
} else { |
|
||||||
$url = $this->buildAuthUrl(); |
|
||||||
return Yii::$app->getResponse()->redirect($url); |
|
||||||
} |
|
||||||
|
|
||||||
return $this->isAuthenticated; |
|
||||||
} |
|
||||||
} |
|
@ -1,74 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\authclient\provider; |
|
||||||
|
|
||||||
use Yii; |
|
||||||
use yii\base\Exception; |
|
||||||
use yii\web\HttpException; |
|
||||||
|
|
||||||
/** |
|
||||||
* Class OpenId |
|
||||||
* |
|
||||||
* @author Paul Klimov <klimov.paul@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class OpenId extends \yii\authclient\OpenId implements ProviderInterface |
|
||||||
{ |
|
||||||
use ProviderTrait; |
|
||||||
|
|
||||||
/** |
|
||||||
* @inheritdoc |
|
||||||
*/ |
|
||||||
public function authenticate() |
|
||||||
{ |
|
||||||
if (!empty($_REQUEST['openid_mode'])) { |
|
||||||
switch ($_REQUEST['openid_mode']) { |
|
||||||
case 'id_res': |
|
||||||
if ($this->validate()) { |
|
||||||
$attributes = array( |
|
||||||
'id' => $this->identity |
|
||||||
); |
|
||||||
$rawAttributes = $this->getAttributes(); |
|
||||||
foreach ($this->getRequiredAttributes() as $openIdAttributeName) { |
|
||||||
if (isset($rawAttributes[$openIdAttributeName])) { |
|
||||||
$attributes[$openIdAttributeName] = $rawAttributes[$openIdAttributeName]; |
|
||||||
} else { |
|
||||||
throw new Exception('Unable to complete the authentication because the required data was not received.'); |
|
||||||
} |
|
||||||
} |
|
||||||
$this->setAttributes($attributes); |
|
||||||
$this->isAuthenticated = true; |
|
||||||
return true; |
|
||||||
} else { |
|
||||||
throw new Exception('Unable to complete the authentication because the required data was not received.'); |
|
||||||
} |
|
||||||
break; |
|
||||||
case 'cancel': |
|
||||||
$this->redirectCancel(); |
|
||||||
break; |
|
||||||
default: |
|
||||||
throw new HttpException(400); |
|
||||||
break; |
|
||||||
} |
|
||||||
} else { |
|
||||||
$this->identity = $this->authUrl; // Setting identifier |
|
||||||
$this->required = []; // Try to get info from openid provider |
|
||||||
foreach ($this->getRequiredAttributes() as $openIdAttributeName) { |
|
||||||
$this->required[] = $openIdAttributeName; |
|
||||||
} |
|
||||||
$request = Yii::$app->getRequest(); |
|
||||||
$this->realm = $request->getHostInfo(); |
|
||||||
$this->returnUrl = $this->realm . $request->getUrl(); // getting return URL |
|
||||||
|
|
||||||
$url = $this->authUrl(); |
|
||||||
return Yii::$app->getResponse()->redirect($url); |
|
||||||
} |
|
||||||
|
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
@ -1,221 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\authclient\provider; |
|
||||||
|
|
||||||
use Yii; |
|
||||||
use yii\helpers\StringHelper; |
|
||||||
|
|
||||||
/** |
|
||||||
* Class ProviderTrait |
|
||||||
* |
|
||||||
* @see ProviderInterface |
|
||||||
* |
|
||||||
* @author Paul Klimov <klimov.paul@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
trait ProviderTrait |
|
||||||
{ |
|
||||||
/** |
|
||||||
* @var string service id. |
|
||||||
* This value mainly used as HTTP request parameter. |
|
||||||
*/ |
|
||||||
private $_id; |
|
||||||
/** |
|
||||||
* @var string service unique name. |
|
||||||
* This value may be used in database records, CSS files and so on. |
|
||||||
*/ |
|
||||||
private $_name; |
|
||||||
/** |
|
||||||
* @var string service title to display in views. |
|
||||||
*/ |
|
||||||
private $_title; |
|
||||||
/** |
|
||||||
* @var string the redirect url after successful authorization. |
|
||||||
*/ |
|
||||||
private $_successUrl = ''; |
|
||||||
/** |
|
||||||
* @var string the redirect url after unsuccessful authorization (e.g. user canceled). |
|
||||||
*/ |
|
||||||
private $_cancelUrl = ''; |
|
||||||
|
|
||||||
/** |
|
||||||
* @param string $id service id. |
|
||||||
*/ |
|
||||||
public function setId($id) |
|
||||||
{ |
|
||||||
$this->_id = $id; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @return string service id |
|
||||||
*/ |
|
||||||
public function getId() |
|
||||||
{ |
|
||||||
if (empty($this->_id)) { |
|
||||||
$this->_id = $this->getName(); |
|
||||||
} |
|
||||||
return $this->_id; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @return string service name. |
|
||||||
*/ |
|
||||||
public function getName() |
|
||||||
{ |
|
||||||
if ($this->_name === null) { |
|
||||||
$this->_name = $this->defaultName(); |
|
||||||
} |
|
||||||
return $this->_name; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @param string $name service name. |
|
||||||
*/ |
|
||||||
public function setName($name) |
|
||||||
{ |
|
||||||
$this->_name = $name; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @return string service title. |
|
||||||
*/ |
|
||||||
public function getTitle() |
|
||||||
{ |
|
||||||
if ($this->_title === null) { |
|
||||||
$this->_title = $this->defaultTitle(); |
|
||||||
} |
|
||||||
return $this->_title; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @param string $title service title. |
|
||||||
*/ |
|
||||||
public function setTitle($title) |
|
||||||
{ |
|
||||||
$this->_title = $title; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @param string $url successful URL. |
|
||||||
*/ |
|
||||||
public function setSuccessUrl($url) |
|
||||||
{ |
|
||||||
$this->_successUrl = $url; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @return string successful URL. |
|
||||||
*/ |
|
||||||
public function getSuccessUrl() |
|
||||||
{ |
|
||||||
if (empty($this->_successUrl)) { |
|
||||||
$this->_successUrl = $this->defaultSuccessUrl(); |
|
||||||
} |
|
||||||
return $this->_successUrl; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @param string $url cancel URL. |
|
||||||
*/ |
|
||||||
public function setCancelUrl($url) |
|
||||||
{ |
|
||||||
$this->_cancelUrl = $url; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @return string cancel URL. |
|
||||||
*/ |
|
||||||
public function getCancelUrl() |
|
||||||
{ |
|
||||||
if (empty($this->_cancelUrl)) { |
|
||||||
$this->_cancelUrl = $this->defaultCancelUrl(); |
|
||||||
} |
|
||||||
return $this->_cancelUrl; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Generates service name. |
|
||||||
* @return string service name. |
|
||||||
*/ |
|
||||||
protected function defaultName() |
|
||||||
{ |
|
||||||
return StringHelper::basename(get_class($this)); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Generates service title. |
|
||||||
* @return string service title. |
|
||||||
*/ |
|
||||||
protected function defaultTitle() |
|
||||||
{ |
|
||||||
return StringHelper::basename(get_class($this)); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Creates default {@link successUrl} value. |
|
||||||
* @return string success URL value. |
|
||||||
*/ |
|
||||||
protected function defaultSuccessUrl() |
|
||||||
{ |
|
||||||
return Yii::$app->getUser()->getReturnUrl(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Creates default {@link cancelUrl} value. |
|
||||||
* @return string cancel URL value. |
|
||||||
*/ |
|
||||||
protected function defaultCancelUrl() |
|
||||||
{ |
|
||||||
return Yii::$app->getRequest()->getAbsoluteUrl(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Redirect to the given URL or simply close the popup window. |
|
||||||
* @param mixed $url URL to redirect, could be a string or array config to generate a valid URL. |
|
||||||
* @param boolean $enforceRedirect indicates if redirect should be performed even in case of popup window. |
|
||||||
* @return \yii\web\Response response instance. |
|
||||||
*/ |
|
||||||
public function redirect($url, $enforceRedirect = true) |
|
||||||
{ |
|
||||||
$viewData = [ |
|
||||||
'url' => $url, |
|
||||||
'enforceRedirect' => $enforceRedirect, |
|
||||||
]; |
|
||||||
$viewFile = __DIR__ . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'redirect.php'; |
|
||||||
|
|
||||||
$response = Yii::$app->getResponse(); |
|
||||||
$response->content = Yii::$app->getView()->renderFile($viewFile, $viewData); |
|
||||||
return $response; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Redirect to the URL. If URL is null, {@link successUrl} will be used. |
|
||||||
* @param string $url URL to redirect. |
|
||||||
* @return \yii\web\Response response instance. |
|
||||||
*/ |
|
||||||
public function redirectSuccess($url = null) |
|
||||||
{ |
|
||||||
if ($url === null) { |
|
||||||
$url = $this->getSuccessUrl(); |
|
||||||
} |
|
||||||
return $this->redirect($url); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Redirect to the {@link cancelUrl} or simply close the popup window. |
|
||||||
* @param string $url URL to redirect. |
|
||||||
* @return \yii\web\Response response instance. |
|
||||||
*/ |
|
||||||
public function redirectCancel($url = null) |
|
||||||
{ |
|
||||||
if ($url === null) { |
|
||||||
$url = $this->getCancelUrl(); |
|
||||||
} |
|
||||||
return $this->redirect($url, false); |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,58 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace yiiunit\extensions\authclient; |
||||||
|
|
||||||
|
use yii\authclient\ClientInterface; |
||||||
|
use yii\authclient\ClientTrait; |
||||||
|
use yii\base\Object; |
||||||
|
|
||||||
|
class ClientTraitTest extends TestCase |
||||||
|
{ |
||||||
|
protected function setUp() |
||||||
|
{ |
||||||
|
$config = [ |
||||||
|
'components' => [ |
||||||
|
'user' => [ |
||||||
|
'identityClass' => '\yii\web\IdentityInterface' |
||||||
|
], |
||||||
|
'request' => [ |
||||||
|
'hostInfo' => 'http://testdomain.com', |
||||||
|
'scriptUrl' => '/index.php', |
||||||
|
], |
||||||
|
] |
||||||
|
]; |
||||||
|
$this->mockApplication($config, '\yii\web\Application'); |
||||||
|
} |
||||||
|
|
||||||
|
public function testSetGet() |
||||||
|
{ |
||||||
|
$provider = new Client(); |
||||||
|
|
||||||
|
$id = 'test_id'; |
||||||
|
$provider->setId($id); |
||||||
|
$this->assertEquals($id, $provider->getId(), 'Unable to setup id!'); |
||||||
|
|
||||||
|
$name = 'test_name'; |
||||||
|
$provider->setName($name); |
||||||
|
$this->assertEquals($name, $provider->getName(), 'Unable to setup name!'); |
||||||
|
|
||||||
|
$title = 'test_title'; |
||||||
|
$provider->setTitle($title); |
||||||
|
$this->assertEquals($title, $provider->getTitle(), 'Unable to setup title!'); |
||||||
|
} |
||||||
|
|
||||||
|
public function testGetDescriptiveData() |
||||||
|
{ |
||||||
|
$provider = new Client(); |
||||||
|
|
||||||
|
$this->assertNotEmpty($provider->getName(), 'Unable to get name!'); |
||||||
|
$this->assertNotEmpty($provider->getTitle(), 'Unable to get title!'); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class Client extends Object implements ClientInterface |
||||||
|
{ |
||||||
|
use ClientTrait; |
||||||
|
|
||||||
|
public function authenticate() {} |
||||||
|
} |
@ -0,0 +1,90 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace yiiunit\extensions\authclient; |
||||||
|
|
||||||
|
use yii\authclient\Collection; |
||||||
|
use yii\authclient\ClientInterface; |
||||||
|
use yii\authclient\ClientTrait; |
||||||
|
use yii\base\Object; |
||||||
|
use yiiunit\extensions\authclient\TestCase; |
||||||
|
|
||||||
|
class CollectionTest extends TestCase |
||||||
|
{ |
||||||
|
// Tests : |
||||||
|
|
||||||
|
public function testSetGet() |
||||||
|
{ |
||||||
|
$collection = new Collection(); |
||||||
|
|
||||||
|
$clients = [ |
||||||
|
'testClient1' => new TestClient(), |
||||||
|
'testClient2' => new TestClient(), |
||||||
|
]; |
||||||
|
$collection->setClients($clients); |
||||||
|
$this->assertEquals($clients, $collection->getClients(), 'Unable to setup clients!'); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @depends testSetGet |
||||||
|
*/ |
||||||
|
public function testGetProviderById() |
||||||
|
{ |
||||||
|
$collection = new Collection(); |
||||||
|
|
||||||
|
$clientId = 'testClientId'; |
||||||
|
$client = new TestClient(); |
||||||
|
$clients = [ |
||||||
|
$clientId => $client |
||||||
|
]; |
||||||
|
$collection->setClients($clients); |
||||||
|
|
||||||
|
$this->assertEquals($client, $collection->getClient($clientId), 'Unable to get client by id!'); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @depends testGetProviderById |
||||||
|
*/ |
||||||
|
public function testCreateProvider() |
||||||
|
{ |
||||||
|
$collection = new Collection(); |
||||||
|
|
||||||
|
$clientId = 'testClientId'; |
||||||
|
$clientClassName = TestClient::className(); |
||||||
|
$clients = [ |
||||||
|
$clientId => [ |
||||||
|
'class' => $clientClassName |
||||||
|
] |
||||||
|
]; |
||||||
|
$collection->setClients($clients); |
||||||
|
|
||||||
|
$provider = $collection->getClient($clientId); |
||||||
|
$this->assertTrue(is_object($provider), 'Unable to create client by config!'); |
||||||
|
$this->assertTrue(is_a($provider, $clientClassName), 'Client has wrong class name!'); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @depends testSetGet |
||||||
|
*/ |
||||||
|
public function testHasProvider() |
||||||
|
{ |
||||||
|
$collection = new Collection(); |
||||||
|
|
||||||
|
$clientName = 'testClientName'; |
||||||
|
$clients = [ |
||||||
|
$clientName => [ |
||||||
|
'class' => 'TestClient1' |
||||||
|
], |
||||||
|
]; |
||||||
|
$collection->setClients($clients); |
||||||
|
|
||||||
|
$this->assertTrue($collection->hasClient($clientName), 'Existing client check fails!'); |
||||||
|
$this->assertFalse($collection->hasClient('unExistingClientName'), 'Not existing client check fails!'); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class TestClient extends Object implements ClientInterface |
||||||
|
{ |
||||||
|
use ClientTrait; |
||||||
|
|
||||||
|
public function authenticate() {} |
||||||
|
} |
@ -1,90 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
namespace yiiunit\extensions\authclient\provider; |
|
||||||
|
|
||||||
use yii\authclient\provider\Collection; |
|
||||||
use yii\authclient\provider\ProviderInterface; |
|
||||||
use yii\authclient\provider\ProviderTrait; |
|
||||||
use yii\base\Object; |
|
||||||
use yiiunit\extensions\authclient\TestCase; |
|
||||||
|
|
||||||
class CollectionTest extends TestCase |
|
||||||
{ |
|
||||||
// Tests : |
|
||||||
|
|
||||||
public function testSetGet() |
|
||||||
{ |
|
||||||
$collection = new Collection(); |
|
||||||
|
|
||||||
$providers = [ |
|
||||||
'testProvider1' => new TestProvider(), |
|
||||||
'testProvider2' => new TestProvider(), |
|
||||||
]; |
|
||||||
$collection->setProviders($providers); |
|
||||||
$this->assertEquals($providers, $collection->getProviders(), 'Unable to setup providers!'); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @depends testSetGet |
|
||||||
*/ |
|
||||||
public function testGetProviderById() |
|
||||||
{ |
|
||||||
$collection = new Collection(); |
|
||||||
|
|
||||||
$providerId = 'testProviderId'; |
|
||||||
$provider = new TestProvider(); |
|
||||||
$providers = [ |
|
||||||
$providerId => $provider |
|
||||||
]; |
|
||||||
$collection->setProviders($providers); |
|
||||||
|
|
||||||
$this->assertEquals($provider, $collection->getProvider($providerId), 'Unable to get provider by id!'); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @depends testGetProviderById |
|
||||||
*/ |
|
||||||
public function testCreateProvider() |
|
||||||
{ |
|
||||||
$collection = new Collection(); |
|
||||||
|
|
||||||
$providerId = 'testProviderId'; |
|
||||||
$providerClassName = TestProvider::className(); |
|
||||||
$providers = [ |
|
||||||
$providerId => [ |
|
||||||
'class' => $providerClassName |
|
||||||
] |
|
||||||
]; |
|
||||||
$collection->setProviders($providers); |
|
||||||
|
|
||||||
$provider = $collection->getProvider($providerId); |
|
||||||
$this->assertTrue(is_object($provider), 'Unable to create provider by config!'); |
|
||||||
$this->assertTrue(is_a($provider, $providerClassName), 'Provider has wrong class name!'); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @depends testSetGet |
|
||||||
*/ |
|
||||||
public function testHasProvider() |
|
||||||
{ |
|
||||||
$collection = new Collection(); |
|
||||||
|
|
||||||
$providerName = 'testProviderName'; |
|
||||||
$providers = [ |
|
||||||
$providerName => [ |
|
||||||
'class' => 'TestProvider1' |
|
||||||
], |
|
||||||
]; |
|
||||||
$collection->setProviders($providers); |
|
||||||
|
|
||||||
$this->assertTrue($collection->hasProvider($providerName), 'Existing provider check fails!'); |
|
||||||
$this->assertFalse($collection->hasProvider('unExistingProviderName'), 'Not existing provider check fails!'); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
class TestProvider extends Object implements ProviderInterface |
|
||||||
{ |
|
||||||
use ProviderTrait; |
|
||||||
|
|
||||||
public function authenticate() {} |
|
||||||
} |
|
@ -1,90 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
namespace yiiunit\extensions\authclient\provider; |
|
||||||
|
|
||||||
|
|
||||||
use yii\authclient\provider\ProviderInterface; |
|
||||||
use yii\authclient\provider\ProviderTrait; |
|
||||||
use yii\base\Object; |
|
||||||
use yiiunit\extensions\authclient\TestCase; |
|
||||||
|
|
||||||
class ProviderTraitTest extends TestCase |
|
||||||
{ |
|
||||||
protected function setUp() |
|
||||||
{ |
|
||||||
$config = [ |
|
||||||
'components' => [ |
|
||||||
'user' => [ |
|
||||||
'identityClass' => '\yii\web\IdentityInterface' |
|
||||||
], |
|
||||||
'request' => [ |
|
||||||
'hostInfo' => 'http://testdomain.com', |
|
||||||
'scriptUrl' => '/index.php', |
|
||||||
], |
|
||||||
] |
|
||||||
]; |
|
||||||
$this->mockApplication($config, '\yii\web\Application'); |
|
||||||
} |
|
||||||
|
|
||||||
public function testSetGet() |
|
||||||
{ |
|
||||||
$provider = new Provider(); |
|
||||||
|
|
||||||
$id = 'test_service_id'; |
|
||||||
$provider->setId($id); |
|
||||||
$this->assertEquals($id, $provider->getId(), 'Unable to setup id!'); |
|
||||||
|
|
||||||
$successUrl = 'http://test.success.url'; |
|
||||||
$provider->setSuccessUrl($successUrl); |
|
||||||
$this->assertEquals($successUrl, $provider->getSuccessUrl(), 'Unable to setup success URL!'); |
|
||||||
|
|
||||||
$cancelUrl = 'http://test.cancel.url'; |
|
||||||
$provider->setCancelUrl($cancelUrl); |
|
||||||
$this->assertEquals($cancelUrl, $provider->getCancelUrl(), 'Unable to setup cancel URL!'); |
|
||||||
} |
|
||||||
|
|
||||||
public function testGetDescriptiveData() |
|
||||||
{ |
|
||||||
$provider = new Provider(); |
|
||||||
|
|
||||||
$this->assertNotEmpty($provider->getName(), 'Unable to get name!'); |
|
||||||
$this->assertNotEmpty($provider->getTitle(), 'Unable to get title!'); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @depends testSetGet |
|
||||||
*/ |
|
||||||
public function testGetDefaultSuccessUrl() |
|
||||||
{ |
|
||||||
$provider = new Provider(); |
|
||||||
|
|
||||||
$this->assertNotEmpty($provider->getSuccessUrl(), 'Unable to get default success URL!'); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @depends testSetGet |
|
||||||
*/ |
|
||||||
public function testGetDefaultCancelUrl() |
|
||||||
{ |
|
||||||
$provider = new Provider(); |
|
||||||
|
|
||||||
$this->assertNotEmpty($provider->getSuccessUrl(), 'Unable to get default cancel URL!'); |
|
||||||
} |
|
||||||
|
|
||||||
public function testRedirect() |
|
||||||
{ |
|
||||||
$provider = new Provider(); |
|
||||||
|
|
||||||
$url = 'http://test.url'; |
|
||||||
$response = $provider->redirect($url, true); |
|
||||||
|
|
||||||
$this->assertContains($url, $response->content); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
class Provider extends Object implements ProviderInterface |
|
||||||
{ |
|
||||||
use ProviderTrait; |
|
||||||
|
|
||||||
public function authenticate() {} |
|
||||||
} |
|
Loading…
Reference in new issue