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