nastoletni /
code
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 | declare(strict_types=1); |
||
| 4 | |||
| 5 | namespace Nastoletni\Code; |
||
| 6 | |||
| 7 | use Doctrine\DBAL\Configuration; |
||
| 8 | use Doctrine\DBAL\DriverManager; |
||
| 9 | use Monolog\Handler\StreamHandler; |
||
| 10 | use Monolog\Logger; |
||
| 11 | use Nastoletni\Code\Infrastructure\AES256Crypter; |
||
| 12 | use Nastoletni\Code\Infrastructure\Dbal\DbalPasteMapper; |
||
| 13 | use Nastoletni\Code\Infrastructure\Dbal\DbalPasteRepository; |
||
| 14 | use Nastoletni\Code\Infrastructure\HttpsXkcdRepository; |
||
| 15 | use Nastoletni\Code\Slim\DecoratingCallableResolver; |
||
| 16 | use Nastoletni\Code\Slim\Middleware\SymfonySessionMiddleware; |
||
| 17 | use Nastoletni\Code\Twig\SymfonyValidatorExtension; |
||
| 18 | use Nastoletni\Code\Twig\TransExtension; |
||
| 19 | use Nastoletni\Code\UserInterface\Controller\ControllerDecorator; |
||
| 20 | use Nastoletni\Code\UserInterface\Web\Controller\ErrorController; |
||
| 21 | use Nastoletni\Code\UserInterface\Web\Controller\PasteController; |
||
| 22 | use Slim\App; |
||
| 23 | use Slim\Container; |
||
| 24 | use Slim\Handlers\Error; |
||
| 25 | use Slim\Handlers\PhpError; |
||
| 26 | use Slim\Handlers\Strategies\RequestResponseArgs; |
||
| 27 | use Slim\Views\Twig; |
||
| 28 | use Slim\Views\TwigExtension; |
||
| 29 | use Symfony\Component\HttpFoundation\Session\Session; |
||
| 30 | use Symfony\Component\Translation\Loader\PhpFileLoader; |
||
| 31 | use Symfony\Component\Translation\Translator; |
||
| 32 | use Symfony\Component\Yaml\Yaml; |
||
| 33 | |||
| 34 | class AppKernel |
||
| 35 | { |
||
| 36 | /** |
||
| 37 | * @var App |
||
| 38 | */ |
||
| 39 | private $slim; |
||
| 40 | |||
| 41 | /** |
||
| 42 | * AppKernel constructor. |
||
| 43 | */ |
||
| 44 | public function __construct() |
||
| 45 | { |
||
| 46 | $this->slim = new App(); |
||
| 47 | |||
| 48 | $this->setupConfig(); |
||
| 49 | $this->setupServices(); |
||
|
0 ignored issues
–
show
|
|||
| 50 | $this->setupRoutes(); |
||
| 51 | |||
| 52 | // Middlewares |
||
| 53 | $this->slim->add(new SymfonySessionMiddleware($this->slim->getContainer()['session'])); |
||
| 54 | } |
||
| 55 | |||
| 56 | /** |
||
| 57 | * Sets up config in container. |
||
| 58 | */ |
||
| 59 | private function setupConfig(): void |
||
| 60 | { |
||
| 61 | $config = Yaml::parse(file_get_contents(__DIR__.'/config.yml')); |
||
| 62 | |||
| 63 | $this->slim->getContainer()['config'] = $config; |
||
| 64 | } |
||
| 65 | |||
| 66 | /** |
||
| 67 | * Sets up dependencies in container. |
||
| 68 | */ |
||
| 69 | private function setupServices(): void |
||
| 70 | { |
||
| 71 | $container = $this->slim->getContainer(); |
||
| 72 | $container['settings']['displayErrorDetails'] = $container['config']['debug']; |
||
| 73 | $container['logger'] = function () { |
||
| 74 | return new Logger('application', [ |
||
| 75 | new StreamHandler(__DIR__.'/../logs/logs.log'), |
||
| 76 | ]); |
||
| 77 | }; |
||
| 78 | $container['foundHandler'] = function () { |
||
| 79 | return new RequestResponseArgs(); |
||
| 80 | }; |
||
| 81 | $container['notFoundHandler'] = function (Container $container) { |
||
| 82 | return [$container[ErrorController::class], 'notFound']; |
||
| 83 | }; |
||
| 84 | View Code Duplication | $container['errorHandler'] = function (Container $container) { |
|
| 85 | // Show pretty error page on production and Slim debug info on development. |
||
| 86 | $next = $container['config']['debug'] ? |
||
| 87 | new Error($container['config']['debug']) : |
||
| 88 | [$container[ErrorController::class], 'error']; |
||
| 89 | |||
| 90 | return new Slim\Handler\LoggingErrorHandler( |
||
| 91 | $container->get('logger'), |
||
| 92 | $next |
||
| 93 | ); |
||
| 94 | }; |
||
| 95 | View Code Duplication | $container['phpErrorHandler'] = function (Container $container) { |
|
| 96 | // Show pretty error page on production and Slim debug info on development. |
||
| 97 | $next = $container['config']['debug'] ? |
||
| 98 | new PhpError($container['config']['debug']) : |
||
| 99 | [$container[ErrorController::class], 'error']; |
||
| 100 | |||
| 101 | return new Slim\Handler\LoggingErrorHandler( |
||
| 102 | $container->get('logger'), |
||
| 103 | $next |
||
| 104 | ); |
||
| 105 | }; |
||
| 106 | $container['translator'] = function (Container $container) { |
||
| 107 | $translator = new Translator($container['config']['locale']); |
||
| 108 | $translator->setFallbackLocales(['en']); |
||
| 109 | |||
| 110 | $translator->addLoader('php', new PhpFileLoader()); |
||
| 111 | $translator->addResource('php', __DIR__.'/../resources/translations/messages.php', 'en'); |
||
| 112 | $translator->addResource('php', __DIR__.'/../resources/translations/messages.pl.php', 'pl'); |
||
| 113 | |||
| 114 | return $translator; |
||
| 115 | }; |
||
| 116 | $container['twig'] = function (Container $container) { |
||
| 117 | $twig = new Twig(__DIR__.'/../resources/views/', [ |
||
| 118 | 'debug' => $container['config']['debug'], |
||
| 119 | ]); |
||
| 120 | $twig->addExtension(new TwigExtension($container['router'], $container['config']['base_url'])); |
||
| 121 | $twig->addExtension(new SymfonyValidatorExtension()); |
||
| 122 | $twig->addExtension(new TransExtension($container['translator'])); |
||
| 123 | |||
| 124 | return $twig; |
||
| 125 | }; |
||
| 126 | $container['session'] = function () { |
||
| 127 | return new Session(); |
||
| 128 | }; |
||
| 129 | $container['controllerDecorator'] = function (Container $container) { |
||
| 130 | return new ControllerDecorator( |
||
| 131 | $container['twig'], |
||
| 132 | $container['router'], |
||
| 133 | $container['session'] |
||
| 134 | ); |
||
| 135 | }; |
||
| 136 | $container['callableResolver'] = function (Container $container) { |
||
| 137 | return new DecoratingCallableResolver( |
||
| 138 | $container, |
||
| 139 | $container['controllerDecorator'] |
||
| 140 | ); |
||
| 141 | }; |
||
| 142 | $container['dbal'] = function (Container $container) { |
||
| 143 | $config = new Configuration(); |
||
| 144 | |||
| 145 | return DriverManager::getConnection([ |
||
| 146 | 'driver' => 'pdo_mysql', |
||
| 147 | 'host' => $container['config']['database']['host'], |
||
| 148 | 'port' => $container['config']['database']['port'], |
||
| 149 | 'dbname' => $container['config']['database']['name'], |
||
| 150 | 'user' => $container['config']['database']['user'], |
||
| 151 | 'password' => $container['config']['database']['password'], |
||
| 152 | 'charset' => $container['config']['database']['charset'], |
||
| 153 | ], $config); |
||
| 154 | }; |
||
| 155 | |||
| 156 | // Controllers |
||
| 157 | $container[PasteController::class] = function (Container $container) { |
||
| 158 | $pasteRepository = new DbalPasteRepository($container['dbal'], new DbalPasteMapper()); |
||
| 159 | |||
| 160 | return new PasteController($pasteRepository, new AES256Crypter()); |
||
| 161 | }; |
||
| 162 | $container[ErrorController::class] = function (Container $container) { |
||
| 163 | /** @var ControllerDecorator $controllerDecorator */ |
||
| 164 | $controllerDecorator = $container['controllerDecorator']; |
||
| 165 | |||
| 166 | $errorController = new ErrorController( |
||
| 167 | new HttpsXkcdRepository() |
||
| 168 | ); |
||
| 169 | $controllerDecorator->decorate($errorController); |
||
| 170 | |||
| 171 | return $errorController; |
||
| 172 | }; |
||
| 173 | } |
||
| 174 | |||
| 175 | /** |
||
| 176 | * Sets up routes. |
||
| 177 | */ |
||
| 178 | private function setupRoutes(): void |
||
| 179 | { |
||
| 180 | $routes = Yaml::parse(file_get_contents(__DIR__.'/routes.yml')); |
||
| 181 | |||
| 182 | foreach ($routes as $routeName => $route) { |
||
| 183 | $this->slim->map([$route['method']], $route['path'], $route['controller'])->setName($routeName); |
||
| 184 | } |
||
| 185 | } |
||
| 186 | |||
| 187 | /** |
||
| 188 | * Sends response to the client. |
||
| 189 | */ |
||
| 190 | public function handle(): void |
||
| 191 | { |
||
| 192 | $this->slim->run(); |
||
| 193 | } |
||
| 194 | } |
||
| 195 |
PHP Analyzer performs a side-effects analysis of your code. A side-effect is basically anything that might be visible after the scope of the method is left.
Let’s take a look at an example:
If we look at the
getEmail()method, we can see that it has no side-effect. Whether you call this method or not, no future calls to other methods are affected by this. As such code as the following is useless:On the hand, if we look at the
setEmail(), this method _has_ side-effects. In the following case, we could not remove the method call: