Fix : require Crypto.php pour la route manifest + accepter id v8hex pour releasenotes

Deux bugs introduits par v0.27.x dans api/index.php :

1. La route /api/manifest ne require pas lib/Crypto.php → erreur 500
   « Class PSLauncher\Crypto not found » dès qu'on tente la re-signature
   du manifest filtré (depuis v0.27.0). Conséquence : le client voit
   tout cassé, pas seulement les versions filtrées.

2. La regex de route /api/releasenotes/X.Y.Z n'accepte que les versions
   au format SemVer. Avec v0.27.1, les release notes sont addressables
   par id stable (v + 8 hex chars), donc le manifest pointe vers
   /api/releasenotes/va3f2c891 qui matchait pas la regex → 404.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-05 09:12:55 +02:00
parent 72f99e0c56
commit 38194c6f0c

View File

@@ -41,12 +41,16 @@ $route = trim((string)($_GET['route'] ?? ''), '/');
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET'; $method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
if ($method === 'GET' && ($route === '' || $route === 'manifest')) { if ($method === 'GET' && ($route === '' || $route === 'manifest')) {
// Crypto requis : depuis v0.27.0 le manifest est re-signé à la volée
// selon le channel demandé (filtrage server-side).
require __DIR__ . '/lib/Crypto.php';
require __DIR__ . '/routes/Manifest.php'; require __DIR__ . '/routes/Manifest.php';
\PSLauncher\Routes\Manifest::handle($config); \PSLauncher\Routes\Manifest::handle($config);
return; return;
} }
if ($method === 'GET' && preg_match('#^releasenotes/([0-9]+\.[0-9]+\.[0-9]+)$#', $route, $m)) { // Release notes : accepte 'X.Y.Z' (legacy) ou id stable 'v' + 8 hex (v0.27.1+)
if ($method === 'GET' && preg_match('#^releasenotes/(v[0-9a-f]{8}|[0-9]+\.[0-9]+\.[0-9]+)$#', $route, $m)) {
require __DIR__ . '/routes/Releasenotes.php'; require __DIR__ . '/routes/Releasenotes.php';
\PSLauncher\Routes\Releasenotes::handle($m[1]); \PSLauncher\Routes\Releasenotes::handle($m[1]);
return; return;