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 | } |