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.
		
		
		
		
		
			
		
			
				
					
					
						
							107 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							107 lines
						
					
					
						
							2.5 KiB
						
					
					
				| <?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); | |
| 	} | |
| } |