ajoute les pages légales, la purge RGPD et sert polices et scripts depuis le portail

Pages /legal et /confidentialite réécrites d'après le système réel, purge
des classes archivées depuis 90 jours (prouvée par Pest), archivage côté
prof. Polices, xterm.js et CodeMirror ne sont plus chargés depuis Google
ni jsDelivr. Pages d'aperçu signalées, sans vrais établissements ni faux
chiffres. Journaux Laravel gardés 14 jours.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Adam Belkacemi 2026-10-09 21:07:25 +02:00
parent 0a5df89201
commit e4a6aaebb1
62 changed files with 822 additions and 238 deletions

View file

@ -46,3 +46,14 @@ test('le rapport de violation est accepté sans jeton CSRF', function () {
json_encode(['csp-report' => ['document-uri' => 'https://syllabuslab.fr/eleve?x=1', 'violated-directive' => 'script-src', 'blocked-uri' => 'inline']]))
->assertNoContent();
});
test("les pages de l'application ne chargent aucune ressource externe", function () {
$eleve = Eleve::factory()->create();
$jeton = $eleve->demarreNouvelleSession();
foreach ([route('login'), route('register')] as $url) {
expect($this->get($url)->getContent())->not->toMatch('#(src|href)="https?://(?!localhost)#', $url);
}
$page = $this->withSession(['jeton_session_eleve' => $jeton])->actingAs($eleve, 'eleve')->get(route('eleve'))->getContent();
expect($page)->not->toMatch('#(src|href)="https?://(?!localhost)[^"]*\.(js|css|woff2?)#');
});