Working state but no uploads

This commit is contained in:
julien
2026-03-16 11:48:26 +01:00
parent e24ee5d622
commit 8e59daa4cd
21 changed files with 353 additions and 119 deletions

View File

@@ -4,7 +4,8 @@ declare(strict_types=1);
namespace App\Shared;
use App\Post\PostExtension;
use App\Shared\Database\Provisioner;
use App\Shared\Database\DatabaseNotProvisionedException;
use App\Shared\Database\DatabaseReadiness;
use App\Shared\Extension\AppExtension;
use App\Shared\Extension\CsrfExtension;
use App\Shared\Extension\SessionExtension;
@@ -14,6 +15,7 @@ use PDO;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Psr\Log\LoggerInterface;
use Slim\App;
use Slim\Csrf\Guard;
@@ -40,7 +42,6 @@ final class Bootstrap
public function initialize(): App
{
$this->initializeInfrastructure();
$this->runAutoProvisioningIfEnabled();
return $this->createHttpApp();
}
@@ -138,21 +139,6 @@ final class Bootstrap
}
}
private function runAutoProvisioningIfEnabled(): void
{
$flag = strtolower(trim((string) ($_ENV['APP_AUTO_PROVISION'] ?? '')));
$isDev = strtolower($_ENV['APP_ENV'] ?? 'production') === 'development';
$enabled = $flag !== ''
? in_array($flag, ['1', 'true', 'yes', 'on'], true)
: $isDev;
if (!$enabled) {
return;
}
Provisioner::run($this->container->get(PDO::class));
}
private function registerMiddlewares(): void
{
$this->app->addBodyParsingMiddleware();
@@ -168,6 +154,17 @@ final class Bootstrap
$guard->setPersistentTokenMode(true);
$twig->addExtension(new CsrfExtension($guard));
$this->app->add($guard);
$container = $this->container;
$this->app->add(function (
ServerRequestInterface $request,
RequestHandlerInterface $handler,
) use ($container): ResponseInterface {
DatabaseReadiness::assertProvisioned($container->get(PDO::class));
return $handler->handle($request);
});
}
private function registerRoutes(): void
@@ -180,6 +177,8 @@ final class Bootstrap
$isDev = strtolower($_ENV['APP_ENV'] ?? 'production') === 'development';
$logger = $this->container->get(LoggerInterface::class);
$errorHandler = $this->app->addErrorMiddleware($isDev, true, true, $logger);
$app = $this->app;
$container = $this->container;
$errorHandler->setDefaultErrorHandler(
function (
@@ -188,24 +187,30 @@ final class Bootstrap
bool $displayErrorDetails,
bool $logErrors,
bool $logErrorDetails,
) use ($isDev): ResponseInterface {
if ($isDev) {
) use ($isDev, $app, $container): ResponseInterface {
if ($isDev && !$exception instanceof DatabaseNotProvisionedException) {
throw $exception;
}
$statusCode = 500;
if ($exception instanceof HttpException) {
$message = 'Une erreur inattendue s\'est produite.';
if ($exception instanceof DatabaseNotProvisionedException) {
$statusCode = 503;
$message = $exception->getMessage();
} elseif ($exception instanceof HttpException) {
$statusCode = $exception->getCode() ?: 500;
$message = $statusCode === 404
? 'La page demandée est introuvable.'
: $message;
}
$response = $this->app->getResponseFactory()->createResponse($statusCode);
$twig = $this->container->get(Twig::class);
$response = $app->getResponseFactory()->createResponse($statusCode);
$twig = $container->get(Twig::class);
return $twig->render($response, 'pages/error.twig', [
'status' => $statusCode,
'message' => $statusCode === 404
? 'La page demandée est introuvable.'
: 'Une erreur inattendue s\'est produite.',
'message' => $message,
]);
}
);