66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Pterodactyl\Exceptions\Http\Connection;
 | |
| 
 | |
| use Illuminate\Support\Arr;
 | |
| use Illuminate\Http\Response;
 | |
| use GuzzleHttp\Exception\GuzzleException;
 | |
| use Pterodactyl\Exceptions\DisplayException;
 | |
| 
 | |
| /**
 | |
|  * @method \GuzzleHttp\Exception\GuzzleException getPrevious()
 | |
|  */
 | |
| class DaemonConnectionException extends DisplayException
 | |
| {
 | |
|     /**
 | |
|      * @var int
 | |
|      */
 | |
|     private $statusCode = Response::HTTP_GATEWAY_TIMEOUT;
 | |
| 
 | |
|     /**
 | |
|      * Throw a displayable exception caused by a daemon connection error.
 | |
|      *
 | |
|      * @param \GuzzleHttp\Exception\GuzzleException $previous
 | |
|      * @param bool $useStatusCode
 | |
|      */
 | |
|     public function __construct(GuzzleException $previous, bool $useStatusCode = true)
 | |
|     {
 | |
|         /** @var \GuzzleHttp\Psr7\Response|null $response */
 | |
|         $response = method_exists($previous, 'getResponse') ? $previous->getResponse() : null;
 | |
| 
 | |
|         if ($useStatusCode) {
 | |
|             $this->statusCode = is_null($response) ? $this->statusCode : $response->getStatusCode();
 | |
|         }
 | |
| 
 | |
|         $message = trans('admin/server.exceptions.daemon_exception', [
 | |
|             'code' => is_null($response) ? 'E_CONN_REFUSED' : $response->getStatusCode(),
 | |
|         ]);
 | |
| 
 | |
|         // Attempt to pull the actual error message off the response and return that if it is not
 | |
|         // a 500 level error.
 | |
|         if ($this->statusCode < 500 && ! is_null($response)) {
 | |
|             $body = $response->getBody();
 | |
|             if (is_string($body) || (is_object($body) && method_exists($body, '__toString'))) {
 | |
|                 $body = json_decode(is_string($body) ? $body : $body->__toString(), true);
 | |
|                 $message = "[Wings Error]: " . Arr::get($body, 'error', $message);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         $level = $this->statusCode >= 500 && $this->statusCode !== 504
 | |
|             ? DisplayException::LEVEL_ERROR
 | |
|             : DisplayException::LEVEL_WARNING;
 | |
| 
 | |
|         parent::__construct($message, $previous, $level);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Return the HTTP status code for this exception.
 | |
|      *
 | |
|      * @return int
 | |
|      */
 | |
|     public function getStatusCode()
 | |
|     {
 | |
|         return $this->statusCode;
 | |
|     }
 | |
| }
 | 
