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 Facade\Ignition; |
||
4 | |||
5 | use Facade\FlareClient\Flare; |
||
6 | use Facade\FlareClient\Http\Client; |
||
7 | use Facade\Ignition\Commands\SolutionMakeCommand; |
||
8 | use Facade\Ignition\Commands\TestCommand; |
||
9 | use Facade\Ignition\Context\LaravelContextDetector; |
||
10 | use Facade\Ignition\DumpRecorder\DumpRecorder; |
||
11 | use Facade\Ignition\ErrorPage\IgnitionWhoopsHandler; |
||
12 | use Facade\Ignition\ErrorPage\Renderer; |
||
13 | use Facade\Ignition\Exceptions\InvalidConfig; |
||
14 | use Facade\Ignition\Http\Controllers\ExecuteSolutionController; |
||
15 | use Facade\Ignition\Http\Controllers\HealthCheckController; |
||
16 | use Facade\Ignition\Http\Controllers\ScriptController; |
||
17 | use Facade\Ignition\Http\Controllers\ShareReportController; |
||
18 | use Facade\Ignition\Http\Controllers\StyleController; |
||
19 | use Facade\Ignition\Http\Middleware\IgnitionConfigValueEnabled; |
||
20 | use Facade\Ignition\Http\Middleware\IgnitionEnabled; |
||
21 | use Facade\Ignition\Logger\FlareHandler; |
||
22 | use Facade\Ignition\LogRecorder\LogRecorder; |
||
23 | use Facade\Ignition\Middleware\AddDumps; |
||
24 | use Facade\Ignition\Middleware\AddEnvironmentInformation; |
||
25 | use Facade\Ignition\Middleware\AddGitInformation; |
||
26 | use Facade\Ignition\Middleware\AddLogs; |
||
27 | use Facade\Ignition\Middleware\AddQueries; |
||
28 | use Facade\Ignition\Middleware\AddSolutions; |
||
29 | use Facade\Ignition\Middleware\CustomizeGrouping; |
||
30 | use Facade\Ignition\Middleware\SetNotifierName; |
||
31 | use Facade\Ignition\QueryRecorder\QueryRecorder; |
||
32 | use Facade\Ignition\SolutionProviders\BadMethodCallSolutionProvider; |
||
33 | use Facade\Ignition\SolutionProviders\DefaultDbNameSolutionProvider; |
||
34 | use Facade\Ignition\SolutionProviders\IncorrectValetDbCredentialsSolutionProvider; |
||
35 | use Facade\Ignition\SolutionProviders\InvalidRouteActionSolutionProvider; |
||
36 | use Facade\Ignition\SolutionProviders\MergeConflictSolutionProvider; |
||
37 | use Facade\Ignition\SolutionProviders\MissingAppKeySolutionProvider; |
||
38 | use Facade\Ignition\SolutionProviders\MissingColumnSolutionProvider; |
||
39 | use Facade\Ignition\SolutionProviders\MissingImportSolutionProvider; |
||
40 | use Facade\Ignition\SolutionProviders\MissingPackageSolutionProvider; |
||
41 | use Facade\Ignition\SolutionProviders\RunningLaravelDuskInProductionProvider; |
||
42 | use Facade\Ignition\SolutionProviders\SolutionProviderRepository; |
||
43 | use Facade\Ignition\SolutionProviders\TableNotFoundSolutionProvider; |
||
44 | use Facade\Ignition\SolutionProviders\UndefinedVariableSolutionProvider; |
||
45 | use Facade\Ignition\SolutionProviders\UnknownValidationSolutionProvider; |
||
46 | use Facade\Ignition\SolutionProviders\ViewNotFoundSolutionProvider; |
||
47 | use Facade\Ignition\Views\Engines\CompilerEngine; |
||
48 | use Facade\Ignition\Views\Engines\PhpEngine; |
||
49 | use Facade\IgnitionContracts\SolutionProviderRepository as SolutionProviderRepositoryContract; |
||
50 | use Illuminate\Foundation\Application; |
||
51 | use Illuminate\Log\Events\MessageLogged; |
||
52 | use Illuminate\Log\LogManager; |
||
53 | use Illuminate\Queue\QueueManager; |
||
54 | use Illuminate\Support\Arr; |
||
55 | use Illuminate\Support\Facades\Log; |
||
56 | use Illuminate\Support\Facades\Route; |
||
57 | use Illuminate\Support\ServiceProvider; |
||
58 | use Illuminate\View\Engines\CompilerEngine as LaravelCompilerEngine; |
||
59 | use Illuminate\View\Engines\PhpEngine as LaravelPhpEngine; |
||
60 | use Monolog\Logger; |
||
61 | use Throwable; |
||
62 | use Whoops\Handler\HandlerInterface; |
||
63 | |||
64 | class IgnitionServiceProvider extends ServiceProvider |
||
65 | { |
||
66 | public function boot() |
||
67 | { |
||
68 | if ($this->app->runningInConsole()) { |
||
69 | $this->publishes([ |
||
70 | __DIR__.'/../config/flare.php' => config_path('flare.php'), |
||
71 | ], 'flare-config'); |
||
72 | |||
73 | $this->publishes([ |
||
74 | __DIR__.'/../config/ignition.php' => config_path('ignition.php'), |
||
75 | ], 'ignition-config'); |
||
76 | } |
||
77 | |||
78 | $this |
||
79 | ->registerViewEngines() |
||
80 | ->registerHousekeepingRoutes() |
||
81 | ->registerLogHandler() |
||
82 | ->registerCommands() |
||
83 | ->setupQueue($this->app->queue); |
||
84 | |||
85 | $this->app->make(QueryRecorder::class)->register(); |
||
86 | $this->app->make(LogRecorder::class)->register(); |
||
87 | $this->app->make(DumpRecorder::class)->register(); |
||
88 | } |
||
89 | |||
90 | public function register() |
||
91 | { |
||
92 | $this->mergeConfigFrom(__DIR__.'/../config/flare.php', 'flare'); |
||
93 | $this->mergeConfigFrom(__DIR__.'/../config/ignition.php', 'ignition'); |
||
94 | |||
95 | $this |
||
96 | ->registerSolutionProviderRepository() |
||
97 | ->registerExceptionRenderer() |
||
98 | ->registerWhoopsHandler() |
||
99 | ->registerIgnitionConfig() |
||
100 | ->registerFlare() |
||
101 | ->registerLogRecorder() |
||
102 | ->registerDumpCollector(); |
||
103 | |||
104 | if (config('flare.reporting.report_queries')) { |
||
105 | $this->registerQueryRecorder(); |
||
106 | } |
||
107 | |||
108 | if (config('flare.reporting.anonymize_ips')) { |
||
109 | $this->app->get('flare.client')->anonymizeIp(); |
||
110 | } |
||
111 | |||
112 | $this->registerBuiltInMiddleware(); |
||
113 | } |
||
114 | |||
115 | protected function registerViewEngines() |
||
116 | { |
||
117 | if (! $this->hasCustomViewEnginesRegistered()) { |
||
118 | return $this; |
||
119 | } |
||
120 | |||
121 | $this->app->make('view.engine.resolver')->register('php', function () { |
||
122 | return new PhpEngine(); |
||
123 | }); |
||
124 | |||
125 | $this->app->make('view.engine.resolver')->register('blade', function () { |
||
126 | return new CompilerEngine($this->app['blade.compiler']); |
||
127 | }); |
||
128 | |||
129 | return $this; |
||
130 | } |
||
131 | |||
132 | protected function registerHousekeepingRoutes() |
||
133 | { |
||
134 | if ($this->app->runningInConsole()) { |
||
135 | return $this; |
||
136 | } |
||
137 | |||
138 | Route::group([ |
||
139 | 'as' => 'ignition.', |
||
140 | 'prefix' => config('ignition.housekeeping_endpoint_prefix', '_ignition'), |
||
141 | 'middleware' => [IgnitionEnabled::class], |
||
142 | ], function () { |
||
143 | Route::get('health-check', HealthCheckController::class)->name('healthCheck'); |
||
144 | |||
145 | Route::post('execute-solution', ExecuteSolutionController::class) |
||
146 | ->middleware(IgnitionConfigValueEnabled::class.':enableRunnableSolutions') |
||
147 | ->name('executeSolution'); |
||
148 | |||
149 | Route::post('share-report', ShareReportController::class) |
||
150 | ->middleware(IgnitionConfigValueEnabled::class.':enableShareButton') |
||
151 | ->name('shareReport'); |
||
152 | |||
153 | Route::get('scripts/{script}', ScriptController::class)->name('scripts'); |
||
154 | Route::get('styles/{style}', StyleController::class)->name('styles'); |
||
155 | }); |
||
156 | |||
157 | return $this; |
||
158 | } |
||
159 | |||
160 | protected function registerSolutionProviderRepository() |
||
161 | { |
||
162 | $this->app->singleton(SolutionProviderRepositoryContract::class, function () { |
||
163 | $defaultSolutions = $this->getDefaultSolutions(); |
||
164 | |||
165 | return new SolutionProviderRepository($defaultSolutions); |
||
166 | }); |
||
167 | |||
168 | return $this; |
||
169 | } |
||
170 | |||
171 | protected function registerExceptionRenderer() |
||
172 | { |
||
173 | $this->app->bind(Renderer::class, function () { |
||
174 | return new Renderer(__DIR__.'/../resources/views/'); |
||
175 | }); |
||
176 | |||
177 | return $this; |
||
178 | } |
||
179 | |||
180 | protected function registerWhoopsHandler() |
||
181 | { |
||
182 | $this->app->bind(HandlerInterface::class, function (Application $app) { |
||
183 | return $app->make(IgnitionWhoopsHandler::class); |
||
184 | }); |
||
185 | |||
186 | return $this; |
||
187 | } |
||
188 | |||
189 | protected function registerIgnitionConfig() |
||
190 | { |
||
191 | $this->app->singleton(IgnitionConfig::class, function () { |
||
192 | $options = []; |
||
193 | |||
194 | try { |
||
195 | if ($configPath = $this->getConfigFileLocation()) { |
||
196 | $options = require $configPath; |
||
197 | } |
||
198 | } catch (Throwable $e) { |
||
199 | // possible open_basedir restriction |
||
200 | } |
||
201 | |||
202 | return new IgnitionConfig($options); |
||
203 | }); |
||
204 | |||
205 | return $this; |
||
206 | } |
||
207 | |||
208 | protected function registerFlare() |
||
209 | { |
||
210 | $this->app->singleton('flare.http', function () { |
||
211 | return new Client( |
||
212 | config('flare.key'), |
||
213 | config('flare.secret'), |
||
214 | config('flare.base_url', 'https://flareapp.io/api') |
||
215 | ); |
||
216 | }); |
||
217 | |||
218 | $this->app->alias('flare.http', Client::class); |
||
219 | |||
220 | $this->app->singleton('flare.client', function () { |
||
221 | $client = new Flare($this->app->get('flare.http'), new LaravelContextDetector, $this->app); |
||
222 | $client->applicationPath(base_path()); |
||
223 | $client->stage(config('app.env')); |
||
224 | |||
225 | return $client; |
||
226 | }); |
||
227 | |||
228 | $this->app->alias('flare.client', Flare::class); |
||
229 | |||
230 | return $this; |
||
231 | } |
||
232 | |||
233 | protected function registerLogHandler() |
||
234 | { |
||
235 | $this->app->singleton('flare.logger', function ($app) { |
||
236 | $handler = new FlareHandler($app->make('flare.client')); |
||
237 | |||
238 | $logLevelString = config('logging.channels.flare.level', 'error'); |
||
239 | |||
240 | $logLevel = $this->getLogLevel($logLevelString); |
||
241 | |||
242 | $handler->setMinimumReportLogLevel($logLevel); |
||
243 | |||
244 | $logger = new Logger('Flare'); |
||
245 | $logger->pushHandler($handler); |
||
246 | |||
247 | return $logger; |
||
248 | }); |
||
249 | |||
250 | if ($this->app['log'] instanceof LogManager) { |
||
251 | Log::extend('flare', function ($app) { |
||
252 | return $app['flare.logger']; |
||
253 | }); |
||
254 | } else { |
||
255 | $this->bindLogListener(); |
||
256 | } |
||
257 | |||
258 | return $this; |
||
259 | } |
||
260 | |||
261 | protected function getLogLevel(string $logLevelString): int |
||
262 | { |
||
263 | $logLevel = Logger::getLevels()[strtoupper($logLevelString)] ?? null; |
||
264 | |||
265 | if (! $logLevel) { |
||
266 | throw InvalidConfig::invalidLogLevel($logLevelString); |
||
267 | } |
||
268 | |||
269 | return $logLevel; |
||
270 | } |
||
271 | |||
272 | protected function registerLogRecorder() |
||
273 | { |
||
274 | $logCollector = $this->app->make(LogRecorder::class); |
||
275 | |||
276 | $this->app->singleton(LogRecorder::class); |
||
277 | |||
278 | $this->app->instance(LogRecorder::class, $logCollector); |
||
279 | |||
280 | return $this; |
||
281 | } |
||
282 | |||
283 | protected function registerDumpCollector() |
||
284 | { |
||
285 | $dumpCollector = $this->app->make(DumpRecorder::class); |
||
286 | |||
287 | $this->app->singleton(DumpRecorder::class); |
||
288 | |||
289 | $this->app->instance(DumpRecorder::class, $dumpCollector); |
||
290 | |||
291 | return $this; |
||
292 | } |
||
293 | |||
294 | protected function registerCommands() |
||
295 | { |
||
296 | $this->app->bind('command.flare:test', TestCommand::class); |
||
297 | $this->app->bind('command.make:solution', SolutionMakeCommand::class); |
||
298 | |||
299 | if ($this->app['config']->get('flare.key')) { |
||
300 | $this->commands(['command.flare:test']); |
||
301 | } |
||
302 | |||
303 | if ($this->app['config']->get('ignition.register_commands', false)) { |
||
304 | $this->commands(['command.make:solution']); |
||
305 | } |
||
306 | |||
307 | return $this; |
||
308 | } |
||
309 | |||
310 | protected function registerQueryRecorder() |
||
311 | { |
||
312 | $queryCollector = $this->app->make(QueryRecorder::class); |
||
313 | |||
314 | $this->app->singleton(QueryRecorder::class); |
||
315 | |||
316 | $this->app->instance(QueryRecorder::class, $queryCollector); |
||
317 | |||
318 | return $this; |
||
319 | } |
||
320 | |||
321 | protected function registerBuiltInMiddleware() |
||
322 | { |
||
323 | $middleware = collect([ |
||
324 | SetNotifierName::class, |
||
325 | AddEnvironmentInformation::class, |
||
326 | AddLogs::class, |
||
327 | AddDumps::class, |
||
328 | AddQueries::class, |
||
329 | AddSolutions::class, |
||
330 | ]) |
||
331 | ->map(function (string $middlewareClass) { |
||
332 | return $this->app->make($middlewareClass); |
||
333 | }); |
||
334 | |||
335 | if (config('flare.reporting.collect_git_information')) { |
||
336 | $middleware[] = (new AddGitInformation()); |
||
337 | } |
||
338 | |||
339 | if (! is_null(config('flare.reporting.grouping_type'))) { |
||
340 | $middleware[] = new CustomizeGrouping(config('flare.reporting.grouping_type')); |
||
341 | } |
||
342 | |||
343 | foreach ($middleware as $singleMiddleware) { |
||
344 | $this->app->get('flare.client')->registerMiddleware($singleMiddleware); |
||
345 | } |
||
346 | |||
347 | return $this; |
||
348 | } |
||
349 | |||
350 | protected function getDefaultSolutions(): array |
||
351 | { |
||
352 | return [ |
||
353 | IncorrectValetDbCredentialsSolutionProvider::class, |
||
354 | MissingAppKeySolutionProvider::class, |
||
355 | DefaultDbNameSolutionProvider::class, |
||
356 | BadMethodCallSolutionProvider::class, |
||
357 | TableNotFoundSolutionProvider::class, |
||
358 | MissingImportSolutionProvider::class, |
||
359 | MissingPackageSolutionProvider::class, |
||
360 | InvalidRouteActionSolutionProvider::class, |
||
361 | ViewNotFoundSolutionProvider::class, |
||
362 | UndefinedVariableSolutionProvider::class, |
||
363 | MergeConflictSolutionProvider::class, |
||
364 | RunningLaravelDuskInProductionProvider::class, |
||
365 | MissingColumnSolutionProvider::class, |
||
366 | UnknownValidationSolutionProvider::class, |
||
367 | ]; |
||
368 | } |
||
369 | |||
370 | protected function hasCustomViewEnginesRegistered() |
||
371 | { |
||
372 | $resolver = $this->app->make('view.engine.resolver'); |
||
373 | |||
374 | if (! $resolver->resolve('php') instanceof LaravelPhpEngine) { |
||
375 | return false; |
||
376 | } |
||
377 | |||
378 | if (! $resolver->resolve('blade') instanceof LaravelCompilerEngine) { |
||
379 | return false; |
||
380 | } |
||
381 | |||
382 | return true; |
||
383 | } |
||
384 | |||
385 | protected function bindLogListener() |
||
386 | { |
||
387 | $this->app['log']->listen(function (MessageLogged $messageLogged) { |
||
388 | if (config('flare.key')) { |
||
389 | try { |
||
390 | $this->app['flare.logger']->log( |
||
391 | $messageLogged->level, |
||
392 | $messageLogged->message, |
||
393 | $messageLogged->context |
||
394 | ); |
||
395 | } catch (Exception $exception) { |
||
0 ignored issues
–
show
|
|||
396 | return; |
||
397 | } |
||
398 | } |
||
399 | }); |
||
400 | } |
||
401 | |||
402 | protected function getConfigFileLocation(): ?string |
||
403 | { |
||
404 | $configFullPath = base_path().DIRECTORY_SEPARATOR.'.ignition'; |
||
405 | |||
406 | if (file_exists($configFullPath)) { |
||
407 | return $configFullPath; |
||
408 | } |
||
409 | |||
410 | $configFullPath = Arr::get($_SERVER, 'HOME', '').DIRECTORY_SEPARATOR.'.ignition'; |
||
411 | |||
412 | if (file_exists($configFullPath)) { |
||
413 | return $configFullPath; |
||
414 | } |
||
415 | |||
416 | return null; |
||
417 | } |
||
418 | |||
419 | protected function setupQueue(QueueManager $queue) |
||
420 | { |
||
421 | $queue->looping(function () { |
||
422 | $this->app->get('flare.client')->reset(); |
||
423 | |||
424 | if (config('flare.reporting.report_queries')) { |
||
425 | $this->app->make(QueryRecorder::class)->reset(); |
||
426 | } |
||
427 | |||
428 | $this->app->make(LogRecorder::class)->reset(); |
||
429 | |||
430 | $this->app->make(DumpRecorder::class)->reset(); |
||
431 | }); |
||
432 | } |
||
433 | } |
||
434 |
Scrutinizer analyzes your
composer.json
/composer.lock
file if available to determine the classes, and functions that are defined by your dependencies.It seems like the listed class was neither found in your dependencies, nor was it found in the analyzed files in your repository. If you are using some other form of dependency management, you might want to disable this analysis.