Paul Klimov
11 years ago
8 changed files with 336 additions and 13 deletions
@ -0,0 +1,51 @@
|
||||
<?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; |
||||
} |
||||
} |
@ -0,0 +1,58 @@
|
||||
<?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; |
||||
} |
||||
} |
@ -0,0 +1,38 @@
|
||||
<?php |
||||
use yii\helpers\Html; |
||||
use yii\helpers\Json; |
||||
|
||||
/* @var $this \yii\base\View */ |
||||
/* @var $url string */ |
||||
/* @var $enforceRedirect boolean */ |
||||
|
||||
$redirectJavaScript = <<<EOL |
||||
function popupWindowRedirect(url, enforceRedirect = true) { |
||||
if (window.opener) { |
||||
window.close(); |
||||
if (enforceRedirect) { |
||||
window.opener.location = url; |
||||
} |
||||
} else { |
||||
window.location = url; |
||||
} |
||||
} |
||||
EOL; |
||||
|
||||
$redirectJavaScript .= 'popupWindowRedirect(' . Json::encode($url) . ', ' . Json::encode($enforceRedirect) . ');'; |
||||
|
||||
?> |
||||
<!DOCTYPE html> |
||||
<html> |
||||
<head> |
||||
<?= Html::script($redirectJavaScript); ?> |
||||
</head> |
||||
<body> |
||||
<h2 id="title" style="display:none;">Redirecting back to the "<?= Yii::$app->name; ?>"...</h2>
|
||||
<h3 id="link"><a href="<?= $url; ?>">Click here to return to the "<?= Yii::$app->name; ?>".</a></h3>
|
||||
<script type="text/javascript"> |
||||
document.getElementById('title').style.display = ''; |
||||
document.getElementById('link').style.display = 'none'; |
||||
</script> |
||||
</body> |
||||
</html> |
@ -0,0 +1,90 @@
|
||||
<?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