radarrplexorganizrnginxsonarrdashboardsabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepage
		
		
		
		
			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.
		
		
		
		
		
			
		
			
				
					
					
						
							85 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							85 lines
						
					
					
						
							2.5 KiB
						
					
					
				| <?php | |
| 
 | |
| namespace Github\HttpClient\Plugin; | |
| 
 | |
| use Github\Client; | |
| use Github\Exception\RuntimeException; | |
| use Http\Client\Common\Plugin; | |
| use Psr\Http\Message\RequestInterface; | |
| 
 | |
| /** | |
|  * Add authentication to the request. | |
|  * | |
|  * @author Tobias Nyholm <tobias.nyholm@gmail.com> | |
|  */ | |
| class Authentication implements Plugin | |
| { | |
|     private $tokenOrLogin; | |
|     private $password; | |
|     private $method; | |
| 
 | |
|     public function __construct($tokenOrLogin, $password, $method) | |
|     { | |
|         $this->tokenOrLogin = $tokenOrLogin; | |
|         $this->password = $password; | |
|         $this->method = $method; | |
|     } | |
| 
 | |
|     /** | |
|      * {@inheritdoc} | |
|      */ | |
|     public function handleRequest(RequestInterface $request, callable $next, callable $first) | |
|     { | |
|         switch ($this->method) { | |
|             case Client::AUTH_HTTP_PASSWORD: | |
|                 $request = $request->withHeader( | |
|                     'Authorization', | |
|                     sprintf('Basic %s', base64_encode($this->tokenOrLogin.':'.$this->password)) | |
|                 ); | |
|                 break; | |
| 
 | |
|             case Client::AUTH_HTTP_TOKEN: | |
|                 $request = $request->withHeader('Authorization', sprintf('token %s', $this->tokenOrLogin)); | |
|                 break; | |
| 
 | |
|             case Client::AUTH_URL_CLIENT_ID: | |
|                 $uri = $request->getUri(); | |
|                 $query = $uri->getQuery(); | |
| 
 | |
|                 $parameters = [ | |
|                     'client_id' => $this->tokenOrLogin, | |
|                     'client_secret' => $this->password, | |
|                 ]; | |
| 
 | |
|                 $query .= empty($query) ? '' : '&'; | |
|                 $query .= utf8_encode(http_build_query($parameters, '', '&')); | |
| 
 | |
|                 $uri = $uri->withQuery($query); | |
|                 $request = $request->withUri($uri); | |
|                 break; | |
| 
 | |
|             case Client::AUTH_URL_TOKEN: | |
|                 $uri = $request->getUri(); | |
|                 $query = $uri->getQuery(); | |
| 
 | |
|                 $parameters = ['access_token' => $this->tokenOrLogin]; | |
| 
 | |
|                 $query .= empty($query) ? '' : '&'; | |
|                 $query .= utf8_encode(http_build_query($parameters, '', '&')); | |
| 
 | |
|                 $uri = $uri->withQuery($query); | |
|                 $request = $request->withUri($uri); | |
|                 break; | |
| 
 | |
|             case Client::AUTH_JWT: | |
|                 $request = $request->withHeader('Authorization', sprintf('Bearer %s', $this->tokenOrLogin)); | |
|                 break; | |
| 
 | |
|             default: | |
|                 throw new RuntimeException(sprintf('%s not yet implemented', $this->method)); | |
|                 break; | |
|         } | |
| 
 | |
|         return $next($request); | |
|     } | |
| }
 | |
| 
 |