Debug bar
This commit is contained in:
parent
58f79c5012
commit
5c0ed594f3
9 changed files with 149 additions and 11 deletions
|
@ -8,6 +8,7 @@ use Alltube\Controller\JsonController;
|
||||||
use Alltube\Exception\ConfigException;
|
use Alltube\Exception\ConfigException;
|
||||||
use Alltube\Exception\DependencyException;
|
use Alltube\Exception\DependencyException;
|
||||||
use Alltube\Factory\ConfigFactory;
|
use Alltube\Factory\ConfigFactory;
|
||||||
|
use Alltube\Factory\DebugBarFactory;
|
||||||
use Alltube\Factory\LocaleManagerFactory;
|
use Alltube\Factory\LocaleManagerFactory;
|
||||||
use Alltube\Factory\LoggerFactory;
|
use Alltube\Factory\LoggerFactory;
|
||||||
use Alltube\Factory\SessionFactory;
|
use Alltube\Factory\SessionFactory;
|
||||||
|
@ -16,6 +17,7 @@ use Alltube\Middleware\CspMiddleware;
|
||||||
use Alltube\Middleware\LinkHeaderMiddleware;
|
use Alltube\Middleware\LinkHeaderMiddleware;
|
||||||
use Alltube\Middleware\LocaleMiddleware;
|
use Alltube\Middleware\LocaleMiddleware;
|
||||||
use Alltube\Middleware\RouterPathMiddleware;
|
use Alltube\Middleware\RouterPathMiddleware;
|
||||||
|
use DebugBar\DebugBarException;
|
||||||
use Slim\Container;
|
use Slim\Container;
|
||||||
use SmartyException;
|
use SmartyException;
|
||||||
|
|
||||||
|
@ -26,6 +28,7 @@ class App extends \Slim\App
|
||||||
* @throws ConfigException
|
* @throws ConfigException
|
||||||
* @throws DependencyException
|
* @throws DependencyException
|
||||||
* @throws SmartyException
|
* @throws SmartyException
|
||||||
|
* @throws DebugBarException
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
@ -43,12 +46,17 @@ class App extends \Slim\App
|
||||||
// Locales.
|
// Locales.
|
||||||
$container['locale'] = LocaleManagerFactory::create($container);
|
$container['locale'] = LocaleManagerFactory::create($container);
|
||||||
|
|
||||||
// Smarty.
|
|
||||||
$container['view'] = ViewFactory::create($container);
|
|
||||||
|
|
||||||
// Logger.
|
// Logger.
|
||||||
$container['logger'] = LoggerFactory::create($container);
|
$container['logger'] = LoggerFactory::create($container);
|
||||||
|
|
||||||
|
if ($container->get('config')->debug) {
|
||||||
|
// Debug bar.
|
||||||
|
$container['debugbar'] = DebugBarFactory::create($container);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Smarty.
|
||||||
|
$container['view'] = ViewFactory::create($container);
|
||||||
|
|
||||||
// Middlewares.
|
// Middlewares.
|
||||||
$this->add(new LocaleMiddleware($container));
|
$this->add(new LocaleMiddleware($container));
|
||||||
$this->add(new CspMiddleware($container));
|
$this->add(new CspMiddleware($container));
|
||||||
|
|
46
classes/Factory/DebugBarFactory.php
Normal file
46
classes/Factory/DebugBarFactory.php
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Alltube\Factory;
|
||||||
|
|
||||||
|
use DebugBar\DataCollector\ConfigCollector;
|
||||||
|
use DebugBar\DataCollector\MemoryCollector;
|
||||||
|
use DebugBar\DataCollector\MessagesCollector;
|
||||||
|
use DebugBar\DataCollector\PhpInfoCollector;
|
||||||
|
use DebugBar\DataCollector\RequestDataCollector;
|
||||||
|
use DebugBar\DebugBar;
|
||||||
|
use DebugBar\DebugBarException;
|
||||||
|
use Slim\Container;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class DebugBarFactory
|
||||||
|
* @package Alltube\Factory
|
||||||
|
*/
|
||||||
|
class DebugBarFactory
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Container $container
|
||||||
|
* @return DebugBar
|
||||||
|
* @throws DebugBarException
|
||||||
|
*/
|
||||||
|
public static function create(Container $container): DebugBar
|
||||||
|
{
|
||||||
|
$debugBar = new DebugBar();
|
||||||
|
|
||||||
|
$requestCollector = new RequestDataCollector();
|
||||||
|
$configCollector = new ConfigCollector(get_object_vars($container->get('config')));
|
||||||
|
|
||||||
|
$debugBar->addCollector(new PhpInfoCollector())
|
||||||
|
->addCollector(new MessagesCollector())
|
||||||
|
->addCollector($requestCollector)
|
||||||
|
->addCollector(new MemoryCollector())
|
||||||
|
->addCollector($configCollector);
|
||||||
|
|
||||||
|
$container->get('logger')->add('debugbar', $debugBar->getCollector('messages'));
|
||||||
|
|
||||||
|
$requestCollector->useHtmlVarDumper();
|
||||||
|
$configCollector->useHtmlVarDumper();
|
||||||
|
|
||||||
|
return $debugBar;
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,7 @@
|
||||||
namespace Alltube\Factory;
|
namespace Alltube\Factory;
|
||||||
|
|
||||||
use Consolidation\Log\Logger;
|
use Consolidation\Log\Logger;
|
||||||
|
use Consolidation\Log\LoggerManager;
|
||||||
use Consolidation\Log\LogOutputStyler;
|
use Consolidation\Log\LogOutputStyler;
|
||||||
use Slim\Container;
|
use Slim\Container;
|
||||||
use Symfony\Component\Console\Output\ConsoleOutput;
|
use Symfony\Component\Console\Output\ConsoleOutput;
|
||||||
|
@ -16,9 +17,9 @@ class LoggerFactory
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Container $container
|
* @param Container $container
|
||||||
* @return Logger
|
* @return LoggerManager
|
||||||
*/
|
*/
|
||||||
public static function create(Container $container): Logger
|
public static function create(Container $container): LoggerManager
|
||||||
{
|
{
|
||||||
$config = $container->get('config');
|
$config = $container->get('config');
|
||||||
if ($config->debug) {
|
if ($config->debug) {
|
||||||
|
@ -27,9 +28,13 @@ class LoggerFactory
|
||||||
$verbosity = ConsoleOutput::VERBOSITY_NORMAL;
|
$verbosity = ConsoleOutput::VERBOSITY_NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$loggerManager = new LoggerManager();
|
||||||
|
|
||||||
$logger = new Logger(new ConsoleOutput($verbosity));
|
$logger = new Logger(new ConsoleOutput($verbosity));
|
||||||
$logger->setLogOutputStyler(new LogOutputStyler());
|
$logger->setLogOutputStyler(new LogOutputStyler());
|
||||||
|
|
||||||
return $logger;
|
$loggerManager->add('default', $logger);
|
||||||
|
|
||||||
|
return $loggerManager;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,14 @@ class ViewFactory
|
||||||
$view->offsetSet('config', $container->get('config'));
|
$view->offsetSet('config', $container->get('config'));
|
||||||
$view->offsetSet('domain', $uri->withBasePath('')->getBaseUrl());
|
$view->offsetSet('domain', $uri->withBasePath('')->getBaseUrl());
|
||||||
|
|
||||||
|
if ($container->has('debugbar')) {
|
||||||
|
$view->offsetSet(
|
||||||
|
'debug_render',
|
||||||
|
$container->get('debugbar')
|
||||||
|
->getJavascriptRenderer($uri->getBaseUrl() . '/vendor/maximebf/debugbar/src/DebugBar/Resources/')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return $view;
|
return $view;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,8 @@ class CspMiddleware
|
||||||
public function applyHeader(Response $response): MessageInterface
|
public function applyHeader(Response $response): MessageInterface
|
||||||
{
|
{
|
||||||
$csp = new CSPBuilder();
|
$csp = new CSPBuilder();
|
||||||
$csp->addDirective('default-src', [])
|
$csp->disableOldBrowserSupport()
|
||||||
|
->addDirective('default-src', [])
|
||||||
->addDirective('font-src', ['self' => true])
|
->addDirective('font-src', ['self' => true])
|
||||||
->addDirective('style-src', ['self' => true])
|
->addDirective('style-src', ['self' => true])
|
||||||
->addDirective('manifest-src', ['self' => true])
|
->addDirective('manifest-src', ['self' => true])
|
||||||
|
@ -47,9 +48,10 @@ class CspMiddleware
|
||||||
->addSource('img-src', '*');
|
->addSource('img-src', '*');
|
||||||
|
|
||||||
if ($this->config->debug) {
|
if ($this->config->debug) {
|
||||||
// So symfony/debug and symfony/error-handler can work.
|
// So maximebf/debugbar, symfony/debug and symfony/error-handler can work.
|
||||||
$csp->setDirective('script-src', ['unsafe-inline' => true])
|
$csp->setDirective('script-src', ['self' => true, 'unsafe-inline' => true])
|
||||||
->setDirective('style-src', ['self' => true, 'unsafe-inline' => true]);
|
->setDirective('style-src', ['self' => true, 'unsafe-inline' => true])
|
||||||
|
->addSource('img-src', 'data:');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $csp->injectCSPHeader($response);
|
return $csp->injectCSPHeader($response);
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
"enlightn/security-checker": "^1.4",
|
"enlightn/security-checker": "^1.4",
|
||||||
"ergebnis/composer-normalize": "^2.6",
|
"ergebnis/composer-normalize": "^2.6",
|
||||||
"insite/composer-dangling-locked-deps": "^0.2.1",
|
"insite/composer-dangling-locked-deps": "^0.2.1",
|
||||||
|
"maximebf/debugbar": "^1.16",
|
||||||
"php-mock/php-mock-mockery": "^1.3",
|
"php-mock/php-mock-mockery": "^1.3",
|
||||||
"phpro/grumphp": "^1.1",
|
"phpro/grumphp": "^1.1",
|
||||||
"phpstan/phpstan": "^0.12.25",
|
"phpstan/phpstan": "^0.12.25",
|
||||||
|
|
63
composer.lock
generated
63
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "aacbcefea720bab616e7236caa0ae3e7",
|
"content-hash": "8f0982143c6c873f68d41017e195387a",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "aura/session",
|
"name": "aura/session",
|
||||||
|
@ -4181,6 +4181,67 @@
|
||||||
],
|
],
|
||||||
"time": "2019-12-17T07:42:37+00:00"
|
"time": "2019-12-17T07:42:37+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "maximebf/debugbar",
|
||||||
|
"version": "v1.16.5",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/maximebf/php-debugbar.git",
|
||||||
|
"reference": "6d51ee9e94cff14412783785e79a4e7ef97b9d62"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/6d51ee9e94cff14412783785e79a4e7ef97b9d62",
|
||||||
|
"reference": "6d51ee9e94cff14412783785e79a4e7ef97b9d62",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1|^8",
|
||||||
|
"psr/log": "^1.0",
|
||||||
|
"symfony/var-dumper": "^2.6|^3|^4|^5"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^7.5.20 || ^9.4.2"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"kriswallsmith/assetic": "The best way to manage assets",
|
||||||
|
"monolog/monolog": "Log using Monolog",
|
||||||
|
"predis/predis": "Redis storage"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.16-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"DebugBar\\": "src/DebugBar/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Maxime Bouroumeau-Fuseau",
|
||||||
|
"email": "maxime.bouroumeau@gmail.com",
|
||||||
|
"homepage": "http://maximebf.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Barry vd. Heuvel",
|
||||||
|
"email": "barryvdh@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Debug bar in the browser for php application",
|
||||||
|
"homepage": "https://github.com/maximebf/php-debugbar",
|
||||||
|
"keywords": [
|
||||||
|
"debug",
|
||||||
|
"debugbar"
|
||||||
|
],
|
||||||
|
"time": "2020-12-07T11:07:24+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "mockery/mockery",
|
"name": "mockery/mockery",
|
||||||
"version": "1.2.2",
|
"version": "1.2.2",
|
||||||
|
|
|
@ -37,5 +37,8 @@
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
{if isset($debug_render)}
|
||||||
|
{$debug_render->render()}
|
||||||
|
{/if}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -22,6 +22,10 @@
|
||||||
<meta name="theme-color" content="#4F4F4F"/>
|
<meta name="theme-color" content="#4F4F4F"/>
|
||||||
<link rel="manifest" href="{base_url}/resources/manifest.json"/>
|
<link rel="manifest" href="{base_url}/resources/manifest.json"/>
|
||||||
<meta name="generator" content="AllTube Download ({$config->getAppVersion()})"/>
|
<meta name="generator" content="AllTube Download ({$config->getAppVersion()})"/>
|
||||||
|
|
||||||
|
{if isset($debug_render)}
|
||||||
|
{$debug_render->renderHead()}
|
||||||
|
{/if}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="page {$class}">
|
<div class="page {$class}">
|
||||||
|
|
Loading…
Reference in a new issue