You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.9 KiB
74 lines
1.9 KiB
<?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; |
|
} |
|
} |