Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
0.00% |
0 / 35 |
|
0.00% |
0 / 1 |
CRAP | |
0.00% |
0 / 1 |
| ErrorHandler | |
0.00% |
0 / 35 |
|
0.00% |
0 / 1 |
132 | |
0.00% |
0 / 1 |
| __invoke | |
0.00% |
0 / 35 |
|
0.00% |
0 / 1 |
132 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace BO\Zmsapi\Helper; |
| 4 | |
| 5 | use BO\Slim\Render; |
| 6 | use BO\Slim\Helper\Sanitizer; |
| 7 | use Psr\Http\Message\ResponseInterface; |
| 8 | use Psr\Http\Message\ServerRequestInterface; |
| 9 | use Slim\Interfaces\ErrorHandlerInterface; |
| 10 | |
| 11 | /** |
| 12 | * |
| 13 | * @SuppressWarnings(CouplingBetweenObjects) |
| 14 | */ |
| 15 | class ErrorHandler implements ErrorHandlerInterface |
| 16 | { |
| 17 | /** |
| 18 | * @SuppressWarnings("PMD.UnusedFormalParameter") |
| 19 | * @SuppressWarnings(Complexity) |
| 20 | * @param ServerRequestInterface $request |
| 21 | * @param \Throwable $exception |
| 22 | * @param bool $displayErrorDetails |
| 23 | * @param bool $logErrors |
| 24 | * @param bool $logErrorDetails |
| 25 | * @return ResponseInterface |
| 26 | */ |
| 27 | public function __invoke( |
| 28 | ServerRequestInterface $request, |
| 29 | \Throwable $exception, |
| 30 | bool $displayErrorDetails, |
| 31 | bool $logErrors, |
| 32 | bool $logErrorDetails |
| 33 | ): ResponseInterface { |
| 34 | $response = \App::$slim->getResponseFactory()->createResponse(); |
| 35 | if ($exception instanceof \Slim\Exception\HttpNotFoundException) { |
| 36 | $message = \BO\Zmsapi\Response\Message::create($request); |
| 37 | $message->meta->error = true; |
| 38 | $message->meta->message = "Could not find a resource with the given URL " . $request->getUri()->getPath(); |
| 39 | $response = \BO\Slim\Render::withLastModified($response, time(), '0'); |
| 40 | return Render::withJson($response, $message, 404); |
| 41 | } |
| 42 | |
| 43 | $message = \BO\Zmsapi\Response\Message::create($request); |
| 44 | $message->meta->error = true; |
| 45 | $message->meta->message = $exception->getMessage(); |
| 46 | $message->meta->exception = get_class($exception); |
| 47 | $message->meta->trace = ''; |
| 48 | foreach (array_slice($exception->getTrace(), 0, 10) as $call) { |
| 49 | $message->meta->trace .= "\\"; |
| 50 | $message->meta->trace .= isset($call['class']) ? $call['class'] : ''; |
| 51 | $message->meta->trace .= "::"; |
| 52 | $message->meta->trace .= isset($call['function']) ? $call['function'] : ''; |
| 53 | $message->meta->trace .= " +"; |
| 54 | $message->meta->trace .= isset($call['line']) ? $call['line'] : ''; |
| 55 | $message->meta->trace .= "\n"; |
| 56 | } |
| 57 | $message->meta->trace = Sanitizer::sanitizeStackTrace($message->meta->trace); |
| 58 | |
| 59 | if (isset($exception->data)) { |
| 60 | $message->data = $exception->data; |
| 61 | } |
| 62 | $response = \BO\Slim\Render::withLastModified($response, time(), '0'); |
| 63 | $status = 500; |
| 64 | if ($exception->getCode() >= 200 && $exception->getCode() <= 599) { |
| 65 | $status = $exception->getcode(); |
| 66 | } |
| 67 | if ($exception->getCode() >= 500 || !$exception->getCode()) { |
| 68 | \App::$log->critical( |
| 69 | "[API] Fatal Exception: " |
| 70 | . " in " . $exception->getFile() . " +" . $exception->getLine() |
| 71 | . " -> " . $exception->getMessage() |
| 72 | . " | Trace: " . Sanitizer::sanitizeStackTrace(preg_replace("#(\s)+#", ' ', str_replace('\\', ':', $message->meta->trace))) |
| 73 | ); |
| 74 | } |
| 75 | return Render::withJson($response, $message, $status); |
| 76 | } |
| 77 | } |