|  |  |  | @ -19,7 +19,6 @@ use Yii; | 
			
		
	
		
			
				
					|  |  |  |  |  * @property string $returnUrl authentication return URL. | 
			
		
	
		
			
				
					|  |  |  |  |  * @property mixed $identity ??? | 
			
		
	
		
			
				
					|  |  |  |  |  * @property string $trustRoot client trust root (realm), by default [[\yii\web\Request::hostInfo]] value will be used. | 
			
		
	
		
			
				
					|  |  |  |  |  * @property mixed $mode ??? This property is read-only. | 
			
		
	
		
			
				
					|  |  |  |  |  * | 
			
		
	
		
			
				
					|  |  |  |  |  * @author Paul Klimov <klimov.paul@gmail.com> | 
			
		
	
		
			
				
					|  |  |  |  |  * @since 2.0 | 
			
		
	
	
		
			
				
					|  |  |  | @ -54,8 +53,10 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @var string authentication return URL. | 
			
		
	
		
			
				
					|  |  |  |  | 	 */ | 
			
		
	
		
			
				
					|  |  |  |  | 	private $_returnUrl; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	private $_identity; | 
			
		
	
		
			
				
					|  |  |  |  | 	private $claimed_id; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	private $_claimedId; | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @var string client trust root (realm), by default [[\yii\web\Request::hostInfo]] value will be used. | 
			
		
	
		
			
				
					|  |  |  |  | 	 */ | 
			
		
	
	
		
			
				
					|  |  |  | @ -103,7 +104,7 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->_identity = $value; | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->claimed_id = $value; | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->_claimedId = $value; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	public function getIdentity() | 
			
		
	
	
		
			
				
					|  |  |  | @ -111,7 +112,7 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 		/* We return claimed_id instead of identity, | 
			
		
	
		
			
				
					|  |  |  |  | 		because the developer should see the claimed identifier, | 
			
		
	
		
			
				
					|  |  |  |  | 		i.e. what he set as identity, not the op-local identifier (which is what we verify)*/ | 
			
		
	
		
			
				
					|  |  |  |  | 		return $this->claimed_id; | 
			
		
	
		
			
				
					|  |  |  |  | 		return $this->_claimedId; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
	
		
			
				
					|  |  |  | @ -152,11 +153,6 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 		return $this->_trustRoot; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	public function getMode() | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		return empty($this->data['openid_mode']) ? null : $this->data['openid_mode']; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
		
			
				
					|  |  |  |  | 	 * Generates default [[returnUrl]] value. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @return string default authentication return URL. | 
			
		
	
	
		
			
				
					|  |  |  | @ -234,15 +230,15 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($method == 'HEAD') { | 
			
		
	
		
			
				
					|  |  |  |  | 			$headers = []; | 
			
		
	
		
			
				
					|  |  |  |  | 			foreach (explode("\n", $response) as $header) { | 
			
		
	
		
			
				
					|  |  |  |  | 				$pos = strpos($header,':'); | 
			
		
	
		
			
				
					|  |  |  |  | 				$pos = strpos($header, ':'); | 
			
		
	
		
			
				
					|  |  |  |  | 				$name = strtolower(trim(substr($header, 0, $pos))); | 
			
		
	
		
			
				
					|  |  |  |  | 				$headers[$name] = trim(substr($header, $pos+1)); | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 			# Updating claimed_id in case of redirections. | 
			
		
	
		
			
				
					|  |  |  |  | 			$effective_url = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL); | 
			
		
	
		
			
				
					|  |  |  |  | 			if ($effective_url != $url) { | 
			
		
	
		
			
				
					|  |  |  |  | 				$this->identity = $this->claimed_id = $effective_url; | 
			
		
	
		
			
				
					|  |  |  |  | 			// Updating claimed_id in case of redirections. | 
			
		
	
		
			
				
					|  |  |  |  | 			$effectiveUrl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL); | 
			
		
	
		
			
				
					|  |  |  |  | 			if ($effectiveUrl != $url) { | 
			
		
	
		
			
				
					|  |  |  |  | 				$this->_identity = $this->_claimedId = $effectiveUrl; | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 			return $headers; | 
			
		
	
	
		
			
				
					|  |  |  | @ -306,17 +302,17 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 				]); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 				$url = $url . ($params ? '?' . $params : ''); | 
			
		
	
		
			
				
					|  |  |  |  | 				$headers_tmp = get_headers($url); | 
			
		
	
		
			
				
					|  |  |  |  | 				if (!$headers_tmp) { | 
			
		
	
		
			
				
					|  |  |  |  | 				$headersTmp = get_headers($url); | 
			
		
	
		
			
				
					|  |  |  |  | 				if (empty($headersTmp)) { | 
			
		
	
		
			
				
					|  |  |  |  | 					return []; | 
			
		
	
		
			
				
					|  |  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 				// Parsing headers. | 
			
		
	
		
			
				
					|  |  |  |  | 				$headers = []; | 
			
		
	
		
			
				
					|  |  |  |  | 				foreach ($headers_tmp as $header) { | 
			
		
	
		
			
				
					|  |  |  |  | 				foreach ($headersTmp as $header) { | 
			
		
	
		
			
				
					|  |  |  |  | 					$pos = strpos($header, ':'); | 
			
		
	
		
			
				
					|  |  |  |  | 					$name = strtolower(trim(substr($header, 0, $pos))); | 
			
		
	
		
			
				
					|  |  |  |  | 					$headers[$name] = trim(substr($header, $pos+1)); | 
			
		
	
		
			
				
					|  |  |  |  | 					$headers[$name] = trim(substr($header, $pos + 1)); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 					/* Following possible redirections. The point is just to have | 
			
		
	
		
			
				
					|  |  |  |  | 					claimed_id change with them, because get_headers() will | 
			
		
	
	
		
			
				
					|  |  |  | @ -325,12 +321,12 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 					If any known provider uses them, file a bug report.*/ | 
			
		
	
		
			
				
					|  |  |  |  | 					if ($name == 'location') { | 
			
		
	
		
			
				
					|  |  |  |  | 						if (strpos($headers[$name], 'http') === 0) { | 
			
		
	
		
			
				
					|  |  |  |  | 							$this->identity = $this->claimed_id = $headers[$name]; | 
			
		
	
		
			
				
					|  |  |  |  | 							$this->_identity = $this->_claimedId = $headers[$name]; | 
			
		
	
		
			
				
					|  |  |  |  | 						} elseif($headers[$name][0] == '/') { | 
			
		
	
		
			
				
					|  |  |  |  | 							$parsed_url = parse_url($this->claimed_id); | 
			
		
	
		
			
				
					|  |  |  |  | 							$this->identity = | 
			
		
	
		
			
				
					|  |  |  |  | 							$this->claimed_id = $parsed_url['scheme'] . '://' | 
			
		
	
		
			
				
					|  |  |  |  | 								. $parsed_url['host'] | 
			
		
	
		
			
				
					|  |  |  |  | 							$parsedUrl = parse_url($this->_claimedId); | 
			
		
	
		
			
				
					|  |  |  |  | 							$this->_identity = | 
			
		
	
		
			
				
					|  |  |  |  | 							$this->_claimedId = $parsedUrl['scheme'] . '://' | 
			
		
	
		
			
				
					|  |  |  |  | 								. $parsedUrl['host'] | 
			
		
	
		
			
				
					|  |  |  |  | 								. $headers[$name]; | 
			
		
	
		
			
				
					|  |  |  |  | 						} | 
			
		
	
		
			
				
					|  |  |  |  | 					} | 
			
		
	
	
		
			
				
					|  |  |  | @ -487,7 +483,7 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 							$server = $server[1]; | 
			
		
	
		
			
				
					|  |  |  |  | 							if (isset($delegate[2])) { | 
			
		
	
		
			
				
					|  |  |  |  | 								$this->identity = trim($delegate[2]); | 
			
		
	
		
			
				
					|  |  |  |  | 								$this->_identity = trim($delegate[2]); | 
			
		
	
		
			
				
					|  |  |  |  | 							} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 							$result['url'] = $server; | 
			
		
	
	
		
			
				
					|  |  |  | @ -508,7 +504,7 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 							$server = $server[1]; | 
			
		
	
		
			
				
					|  |  |  |  | 							if (isset($delegate[1])) { | 
			
		
	
		
			
				
					|  |  |  |  | 								$this->identity = $delegate[1]; | 
			
		
	
		
			
				
					|  |  |  |  | 								$this->_identity = $delegate[1]; | 
			
		
	
		
			
				
					|  |  |  |  | 							} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 							$result['url'] = $server; | 
			
		
	
	
		
			
				
					|  |  |  | @ -556,7 +552,7 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 				// We found an OpenID2 OP Endpoint | 
			
		
	
		
			
				
					|  |  |  |  | 				if ($delegate) { | 
			
		
	
		
			
				
					|  |  |  |  | 					// We have also found an OP-Local ID. | 
			
		
	
		
			
				
					|  |  |  |  | 					$this->identity = $delegate; | 
			
		
	
		
			
				
					|  |  |  |  | 					$this->_identity = $delegate; | 
			
		
	
		
			
				
					|  |  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  |  | 				$result['url'] = $server; | 
			
		
	
		
			
				
					|  |  |  |  | 				$result['version'] = $version; | 
			
		
	
	
		
			
				
					|  |  |  | @ -662,8 +658,8 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 		/* If we have an openid.delegate that is different from our claimed id, | 
			
		
	
		
			
				
					|  |  |  |  | 		we need to somehow preserve the claimed id between requests. | 
			
		
	
		
			
				
					|  |  |  |  | 		The simplest way is to just send it along with the return_to url.*/ | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($this->identity != $this->claimed_id) { | 
			
		
	
		
			
				
					|  |  |  |  | 			$returnUrl .= (strpos($returnUrl, '?') ? '&' : '?') . 'openid.claimed_id=' . $this->claimed_id; | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($this->_identity != $this->_claimedId) { | 
			
		
	
		
			
				
					|  |  |  |  | 			$returnUrl .= (strpos($returnUrl, '?') ? '&' : '?') . 'openid.claimed_id=' . $this->_claimedId; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		$params = array_merge( | 
			
		
	
	
		
			
				
					|  |  |  | @ -671,7 +667,7 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 			[ | 
			
		
	
		
			
				
					|  |  |  |  | 				'openid.return_to' => $returnUrl, | 
			
		
	
		
			
				
					|  |  |  |  | 				'openid.mode' => 'checkid_setup', | 
			
		
	
		
			
				
					|  |  |  |  | 				'openid.identity' => $this->identity, | 
			
		
	
		
			
				
					|  |  |  |  | 				'openid.identity' => $this->_identity, | 
			
		
	
		
			
				
					|  |  |  |  | 				'openid.trust_root' => $this->trustRoot, | 
			
		
	
		
			
				
					|  |  |  |  | 			] | 
			
		
	
		
			
				
					|  |  |  |  | 		); | 
			
		
	
	
		
			
				
					|  |  |  | @ -708,21 +704,21 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 			$params['openid.identity'] = $url; | 
			
		
	
		
			
				
					|  |  |  |  | 			$params['openid.claimed_id']= $url; | 
			
		
	
		
			
				
					|  |  |  |  | 		} else { | 
			
		
	
		
			
				
					|  |  |  |  | 			$params['openid.identity'] = $this->identity; | 
			
		
	
		
			
				
					|  |  |  |  | 			$params['openid.claimed_id'] = $this->claimed_id; | 
			
		
	
		
			
				
					|  |  |  |  | 			$params['openid.identity'] = $this->_identity; | 
			
		
	
		
			
				
					|  |  |  |  | 			$params['openid.claimed_id'] = $this->_claimedId; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		return $this->buildUrl(parse_url($serverInfo['url']), ['query' => http_build_query($params, '', '&')]); | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
		
			
				
					|  |  |  |  | 	 * Returns authentication URL. Usually, you want to redirect your user to it. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param boolean $identifierSelect whether to request OP to select identity for an user in OpenID 2. Does not affect OpenID 1. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param boolean $identifierSelect whether to request OP to select identity for an user in OpenID 2, does not affect OpenID 1. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @return string the authentication URL. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @throws Exception on failure. | 
			
		
	
		
			
				
					|  |  |  |  | 	 */ | 
			
		
	
		
			
				
					|  |  |  |  | 	public function buildAuthUrl($identifierSelect = null) | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		$serverInfo = $this->discover($this->identity); | 
			
		
	
		
			
				
					|  |  |  |  | 		$serverInfo = $this->discover($this->_identity); | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($serverInfo['version'] == 2) { | 
			
		
	
		
			
				
					|  |  |  |  | 			if ($identifierSelect !== null) { | 
			
		
	
		
			
				
					|  |  |  |  | 				$serverInfo['identifierSelect'] = $identifierSelect; | 
			
		
	
	
		
			
				
					|  |  |  | @ -739,7 +735,7 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 	 */ | 
			
		
	
		
			
				
					|  |  |  |  | 	public function validate() | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->claimed_id = isset($this->data['openid_claimed_id']) ? $this->data['openid_claimed_id'] : $this->data['openid_identity']; | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->_claimedId = isset($this->data['openid_claimed_id']) ? $this->data['openid_claimed_id'] : $this->data['openid_identity']; | 
			
		
	
		
			
				
					|  |  |  |  | 		$params = [ | 
			
		
	
		
			
				
					|  |  |  |  | 			'openid.assoc_handle' => $this->data['openid_assoc_handle'], | 
			
		
	
		
			
				
					|  |  |  |  | 			'openid.signed' => $this->data['openid_signed'], | 
			
		
	
	
		
			
				
					|  |  |  | @ -754,7 +750,7 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 		} elseif (isset($this->data['openid_claimed_id']) && $this->data['openid_claimed_id'] != $this->data['openid_identity']) { | 
			
		
	
		
			
				
					|  |  |  |  | 			// If it's an OpenID 1 provider, and we've got claimed_id, | 
			
		
	
		
			
				
					|  |  |  |  | 			// we have to append it to the returnUrl, like authUrl_v1 does. | 
			
		
	
		
			
				
					|  |  |  |  | 			$this->returnUrl .= (strpos($this->returnUrl, '?') ? '&' : '?') . 'openid.claimed_id=' . $this->claimed_id; | 
			
		
	
		
			
				
					|  |  |  |  | 			$this->returnUrl .= (strpos($this->returnUrl, '?') ? '&' : '?') . 'openid.claimed_id=' . $this->_claimedId; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($this->data['openid_return_to'] != $this->returnUrl) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -763,7 +759,7 @@ class OpenId extends BaseClient implements ClientInterface | 
			
		
	
		
			
				
					|  |  |  |  | 			return false; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		$serverInfo = $this->discover($this->claimed_id); | 
			
		
	
		
			
				
					|  |  |  |  | 		$serverInfo = $this->discover($this->_claimedId); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		foreach (explode(',', $this->data['openid_signed']) as $item) { | 
			
		
	
		
			
				
					|  |  |  |  | 			/* Checking whether magic_quotes_gpc is turned on, because | 
			
		
	
	
		
			
				
					|  |  |  | 
 |