1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Honeybadger\HoneybadgerLaravel\Middleware; |
4
|
|
|
|
5
|
|
|
use Closure; |
6
|
|
|
use Illuminate\Http\Request; |
7
|
|
|
use Honeybadger\Contracts\Reporter; |
8
|
|
|
use Illuminate\Support\Facades\Route; |
9
|
|
|
|
10
|
|
|
class HoneybadgerContext |
11
|
|
|
{ |
12
|
|
|
/** |
13
|
|
|
* @var \Honeybadger\Honeybadger; |
14
|
|
|
*/ |
15
|
|
|
protected $honeybadger; |
16
|
|
|
|
17
|
|
|
/** |
18
|
|
|
* @param \Honeybadger\Contracts\Reporter $honeybadger |
19
|
|
|
*/ |
20
|
|
|
public function __construct(Reporter $honeybadger) |
21
|
|
|
{ |
22
|
|
|
$this->honeybadger = $honeybadger; |
23
|
|
|
} |
24
|
|
|
|
25
|
|
|
/** |
26
|
|
|
* Handle an incoming request. |
27
|
|
|
* |
28
|
|
|
* @param \Illuminate\Http\Request $request |
29
|
|
|
* @param \Closure $next |
30
|
|
|
* @return mixed |
31
|
|
|
*/ |
32
|
|
|
public function handle($request, Closure $next) |
33
|
|
|
{ |
34
|
|
|
if (app()->bound('honeybadger')) { |
35
|
|
|
$this->setUserContext($request); |
36
|
|
|
|
37
|
|
|
if (app('honeybadger.isLumen')) { |
38
|
|
|
$this->setLumenRouteActionContext($request); |
39
|
|
|
} else { |
40
|
|
|
$this->setRouteActionContext(); |
41
|
|
|
} |
42
|
|
|
} |
43
|
|
|
|
44
|
|
|
return $next($request); |
45
|
|
|
} |
46
|
|
|
|
47
|
|
|
private function setLumenRouteActionContext($request) |
48
|
|
|
{ |
49
|
|
|
$routeDetails = app()->router->getRoutes()[$request->method().$request->getPathInfo()]['action']; |
50
|
|
|
|
51
|
|
|
if (! isset($routeDetails['uses']) && ! empty($routeAction[0])) { |
|
|
|
|
52
|
|
|
$this->honeybadger->setComponent(get_class($routeDetails[0])); |
53
|
|
|
return; |
54
|
|
|
} |
55
|
|
|
|
56
|
|
|
$routeAction = explode('@', $routeDetails['uses']); |
57
|
|
|
|
58
|
|
|
if (! empty($routeAction[0])) { |
59
|
|
|
$this->honeybadger->setComponent($routeAction[0] ?? ''); |
60
|
|
|
} |
61
|
|
|
|
62
|
|
|
if (! empty($routeAction[1])) { |
63
|
|
|
$this->honeybadger->setAction($routeAction[1] ?? ''); |
64
|
|
|
} |
65
|
|
|
} |
66
|
|
|
|
67
|
|
|
private function setRouteActionContext() |
68
|
|
|
{ |
69
|
|
|
if (Route::getCurrentRoute()) { |
|
|
|
|
70
|
|
|
$routeAction = explode('@', Route::getCurrentRoute()->getActionName()); |
|
|
|
|
71
|
|
|
|
72
|
|
|
if (! empty($routeAction[0])) { |
73
|
|
|
$this->honeybadger->setComponent($routeAction[0] ?? ''); |
74
|
|
|
} |
75
|
|
|
|
76
|
|
|
if (! empty($routeAction[1])) { |
77
|
|
|
$this->honeybadger->setAction($routeAction[1] ?? ''); |
78
|
|
|
} |
79
|
|
|
} |
80
|
|
|
} |
81
|
|
|
|
82
|
|
|
private function setUserContext($request) |
83
|
|
|
{ |
84
|
|
|
try { |
85
|
|
|
if ($request->user()) { |
86
|
|
|
$this->honeybadger->context( |
87
|
|
|
'user_id', |
88
|
|
|
$request->user()->getAuthIdentifier() |
89
|
|
|
); |
90
|
|
|
} |
91
|
|
|
} catch (\InvalidArgumentException $e) { |
92
|
|
|
// Swallow |
93
|
|
|
} |
94
|
|
|
} |
95
|
|
|
} |
96
|
|
|
|
This check marks calls to
isset(...)
orempty(...)
that are found before the variable itself is defined. These will always have the same result.This is likely the result of code being shifted around. Consider removing these calls.