From 38194c6f0c67311305eb613d6c8f486fd7eabdb4 Mon Sep 17 00:00:00 2001 From: "j.foucher" Date: Tue, 5 May 2026 09:12:55 +0200 Subject: [PATCH] Fix : require Crypto.php pour la route manifest + accepter id v8hex pour releasenotes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- server/api/index.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/api/index.php b/server/api/index.php index cd0b4a6..64c9ceb 100644 --- a/server/api/index.php +++ b/server/api/index.php @@ -41,12 +41,16 @@ $route = trim((string)($_GET['route'] ?? ''), '/'); $method = $_SERVER['REQUEST_METHOD'] ?? 'GET'; 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'; \PSLauncher\Routes\Manifest::handle($config); 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'; \PSLauncher\Routes\Releasenotes::handle($m[1]); return;