<?php
use Slim\{
App,
Container
};
use ParagonIE\AntiCSRF\AntiCSRF;
use ParagonIE\CSPBuilder\CSPBuilder;
use ParagonIE\Discretion\Discretion;
// DIC configuration
/** @var App $app */
if (!isset($app)) {
$app = new App();
}
if (!($app instanceof App)) {
throw new TypeError('$app must be an instance of \\Slim\\App.');
}
/** @var Container $container */
$container = $app->getContainer();
/** @var array $settings */
$settings = $container->get('settings');
try {
$antiCsrf = new AntiCSRF();
} catch (\Error $ex) {
$session = [];
$antiCsrf = new AntiCSRF($_POST, $session);
}
\ParagonIE\Discretion\Discretion::setAntiCSRF($antiCsrf);
$cspBuilder = CSPBuilder::fromData((string) $settings['csp-builder']);
Discretion::setCSPBuilder($cspBuilder);
/** @var array<string, array<string, string>> $twigSettings */
$twigSettings = $settings['twig'];
$twigLoader = new \Twig_Loader_Filesystem((array) $twigSettings['paths']);
Discretion::setTwig(new \Twig_Environment($twigLoader, (array) $twigSettings['settings']));
$container['view'] =
/**
* @param Container $c
* @return Twig_Environment
*/
function (\Slim\Container $c) {
return Discretion::getTwig();
};
$container['anticsrf'] =
/**
* @param Container $c
* @return AntiCSRF
*/
function (Container $c): AntiCSRF {
return Discretion::getAntiCSRF();
};
$container['csp'] =
/**
* @param Container $c
* @return CSPBuilder
*/
function (Container $c) {
return Discretion::getCSPBuilder();
};
$container['logger'] =
/**
* @param Container $c
* @return \Monolog\Logger
*/
function (\Slim\Container $c): \Monolog\Logger
{
/** @var array<string, array<string, string>> $set */
$set = $c->get('settings');
/** @var array<string, string> $settings */
$settings = $set['logger'];
$logger = new Monolog\Logger($settings['name']);
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
$logger->pushHandler(
new Monolog\Handler\StreamHandler(
(string) $settings['path'],
(int) $settings['level']
)
);
return $logger;
};
$container['view'] =
/**
* @param Container $c
* @return Twig_Environment
*/
function (\Slim\Container $c) {
return Discretion::getTwig();
};
require_once 'twig.php';
|