This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | namespace Tylercd100\LERN; |
||
4 | |||
5 | use Throwable; |
||
6 | use Monolog\Handler\HandlerInterface; |
||
7 | use Tylercd100\LERN\Components\Notifier; |
||
8 | use Tylercd100\LERN\Components\Recorder; |
||
9 | use Tylercd100\LERN\Exceptions\NotifierFailedException; |
||
10 | use Tylercd100\LERN\Exceptions\RecorderFailedException; |
||
11 | |||
12 | /** |
||
13 | * The master class |
||
14 | */ |
||
15 | class LERN |
||
16 | { |
||
17 | /** |
||
18 | * @var Throwable |
||
19 | */ |
||
20 | private $exception; |
||
21 | |||
22 | /** |
||
23 | * @var Notifier |
||
24 | */ |
||
25 | private $notifier; |
||
26 | |||
27 | /** |
||
28 | * @var Recorder |
||
29 | */ |
||
30 | private $recorder; |
||
31 | |||
32 | /** |
||
33 | * @param Notifier|null $notifier Notifier instance |
||
34 | * @param Recorder|null $recorder Recorder instance |
||
35 | */ |
||
36 | 36 | public function __construct(Notifier $notifier = null, Recorder $recorder = null) |
|
37 | { |
||
38 | 36 | $this->notifier = $this->buildNotifier($notifier); |
|
39 | 36 | $this->recorder = $this->buildRecorder($recorder); |
|
40 | 36 | } |
|
41 | |||
42 | /** |
||
43 | * Will execute record and notify methods |
||
44 | * @param Throwable $e The exception to use |
||
45 | * @return ExceptionModel the recorded Eloquent Model |
||
46 | */ |
||
47 | 6 | public function handle(Throwable $e) |
|
48 | { |
||
49 | 6 | $this->exception = $e; |
|
50 | 6 | $this->notify($e); |
|
51 | 6 | return $this->record($e); |
|
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
![]() |
|||
52 | } |
||
53 | |||
54 | /** |
||
55 | * Stores the exception in the database |
||
56 | * @param Throwable $e The exception to use |
||
57 | * @return \Tylercd100\LERN\Models\ExceptionModel|false The recorded Exception as an Eloquent Model |
||
58 | */ |
||
59 | 6 | public function record(Throwable $e) |
|
60 | { |
||
61 | 6 | $this->exception = $e; |
|
62 | 6 | return $this->recorder->record($e); |
|
63 | } |
||
64 | |||
65 | /** |
||
66 | * Will send the exception to all monolog handlers |
||
67 | * @param Throwable $e The exception to use |
||
68 | * @return void |
||
69 | */ |
||
70 | 6 | public function notify(Throwable $e) |
|
71 | { |
||
72 | 6 | $this->exception = $e; |
|
73 | 6 | $this->notifier->send($e); |
|
74 | 6 | } |
|
75 | |||
76 | /** |
||
77 | * Pushes on another Monolog Handler |
||
78 | * @param HandlerInterface $handler The handler instance to add on |
||
79 | * @return $this |
||
80 | */ |
||
81 | 3 | public function pushHandler(HandlerInterface $handler) { |
|
82 | 3 | $this->notifier->pushHandler($handler); |
|
83 | 3 | return $this; |
|
84 | } |
||
85 | |||
86 | /** |
||
87 | * Get Notifier |
||
88 | * @return \Tylercd100\LERN\Components\Notifier |
||
89 | */ |
||
90 | 3 | public function getNotifier() |
|
91 | { |
||
92 | 3 | return $this->notifier; |
|
93 | } |
||
94 | |||
95 | /** |
||
96 | * Set Notifier |
||
97 | * @param \Tylercd100\LERN\Components\Notifier $notifier A Notifier instance to use |
||
98 | * @return \Tylercd100\LERN\LERN |
||
99 | */ |
||
100 | 3 | public function setNotifier(Notifier $notifier) |
|
101 | { |
||
102 | 3 | $this->notifier = $notifier; |
|
103 | 3 | return $this; |
|
104 | } |
||
105 | |||
106 | /** |
||
107 | * Get Recorder |
||
108 | * @return \Tylercd100\LERN\Components\Recorder |
||
109 | */ |
||
110 | 3 | public function getRecorder() |
|
111 | { |
||
112 | 3 | return $this->recorder; |
|
113 | } |
||
114 | |||
115 | /** |
||
116 | * Set Recorder |
||
117 | * @param \Tylercd100\LERN\Components\Recorder $recorder A Recorder instance to use |
||
118 | * @return \Tylercd100\LERN\LERN |
||
119 | */ |
||
120 | 3 | public function setRecorder(Recorder $recorder) |
|
121 | { |
||
122 | 3 | $this->recorder = $recorder; |
|
123 | 3 | return $this; |
|
124 | } |
||
125 | |||
126 | /** |
||
127 | * Get the log level |
||
128 | * @return string |
||
129 | */ |
||
130 | 3 | public function getLogLevel() |
|
131 | { |
||
132 | 3 | return $this->notifier->getLogLevel(); |
|
133 | } |
||
134 | |||
135 | /** |
||
136 | * Set the log level |
||
137 | * @param string $level The log level |
||
138 | * @return \Tylercd100\LERN\LERN |
||
139 | */ |
||
140 | 6 | public function setLogLevel($level) |
|
141 | { |
||
142 | 6 | $this->notifier->setLogLevel($level); |
|
143 | 6 | return $this; |
|
144 | } |
||
145 | |||
146 | /** |
||
147 | * Set a string or a closure to be called that will generate the message body for the notification |
||
148 | * @param function|string $cb This closure function will be passed an Throwable and must return a string |
||
149 | * @return $this |
||
150 | */ |
||
151 | 3 | public function setMessage($cb) |
|
152 | { |
||
153 | 3 | $this->notifier->setMessage($cb); |
|
154 | 3 | return $this; |
|
155 | } |
||
156 | |||
157 | /** |
||
158 | * Set a string or a closure to be called that will generate the subject line for the notification |
||
159 | * @param function|string $cb This closure function will be passed an Throwable and must return a string |
||
160 | * @return $this |
||
161 | */ |
||
162 | 3 | public function setSubject($cb) |
|
163 | { |
||
164 | 3 | $this->notifier->setSubject($cb); |
|
165 | 3 | return $this; |
|
166 | } |
||
167 | |||
168 | /** |
||
169 | * Constructs a Notifier |
||
170 | * |
||
171 | * @param Notifier $notifier |
||
172 | * @return Notifier |
||
173 | */ |
||
174 | 36 | View Code Duplication | protected function buildNotifier(Notifier $notifier = null) |
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
175 | { |
||
176 | 36 | $class = config('lern.notify.class'); |
|
177 | 36 | $class = !empty($class) ? $class : Notifier::class; |
|
178 | 36 | if (empty($notifier)) { |
|
179 | 21 | $notifier = new $class(); |
|
180 | } |
||
181 | 36 | if ($notifier instanceof Notifier) { |
|
182 | 36 | return $notifier; |
|
183 | } else { |
||
184 | throw new NotifierFailedException("LERN was expecting an instance of ".Notifier::class); |
||
185 | } |
||
186 | } |
||
187 | |||
188 | /** |
||
189 | * Constructs a Recorder |
||
190 | * |
||
191 | * @param Recorder $recorder |
||
192 | * @return Recorder |
||
193 | */ |
||
194 | 36 | View Code Duplication | protected function buildRecorder(Recorder $recorder = null) |
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
195 | { |
||
196 | 36 | $class = config('lern.record.class'); |
|
197 | 36 | $class = !empty($class) ? $class : Recorder::class; |
|
198 | 36 | if (empty($recorder)) { |
|
199 | 36 | $recorder = new $class(); |
|
200 | } |
||
201 | 36 | if ($recorder instanceof Recorder) { |
|
202 | 36 | return $recorder; |
|
203 | } else { |
||
204 | throw new RecorderFailedException("LERN was expecting an instance of ".Recorder::class); |
||
205 | } |
||
206 | } |
||
207 | } |
||
208 |