Branche :
technical_upgradeDate : 2026-04-21. Contrainte produit : rester sur AngularJS (pas de migration Angular 2+). Objectif : monter AngularJS de 1.7.x → 1.8.3 (dernière release), stabiliser la toolchain, éliminer les vulnérabilités critiques.
Statut au 2026-05-04 : F1 → F5 ci-dessous tous réalisés. AngularJS bumpé à 1.8.3, deps runtime nettoyées, toolchain modernisée (Node 22 + Gulp 5 + dart-sass + Chromium headless), Bower complètement retiré (24 deps migrées vers
client/package.json,wiredep+main-bower-filesremplacés pargulp-inject+ une liste explicite dansclient/gulp/conf.js). L'audit ci-dessous conserve l'état d'origine pour traçabilité ; voir le tableau §4 pour le suivi par sous-PR.
| Composant | Version utilisée | Source | Dernière version stable |
|---|---|---|---|
| AngularJS | ~1.7.8 (résolution Bower) |
client/bower.json resolutions.angular |
1.8.3 (dernière release, support LTS terminé chez Google, maintenance communautaire) |
angular-* (animate, cookies, touch, sanitize, messages, aria, resource, route, i18n) |
~1.8.2 (demandé) mais alignés sur 1.7.8 par resolutions |
client/bower.json |
1.8.3 |
angular-bootstrap (ui.bootstrap) |
^2.5.0 |
client/bower.json |
2.5.6 |
bootstrap-sass |
3.4.1 |
client/bower.json |
3.4.3 |
jquery |
~2.2.4 |
client/bower.json |
3.7.1 (jQuery 2 fin de support) |
moment |
~2.29.1 |
client/bower.json |
2.30.1 (projet en maintenance) |
angular-jwt |
^0.1.11 |
client/bower.json |
0.1.11 (abandonné, passer à auth0-angular-jwt si besoin) |
angular-toastr |
~2.1.1 |
client/bower.json |
3.1.1 |
ngstorage, angular-local-storage |
^0.3.11 / ^0.7.1 |
stables, peu maintenus |
Entrypoint module client/src/app/index.module.js — déclare redCrossQuestClient avec les modules standards 1.7/1.8 + qrScannerU, ngAudio, ja.qr, ngMap, ngStorage, angular-jwt.
| Composant | Version | Notes |
|---|---|---|
| Node | 10.24.1 (pinné dans client/package.json engines et docker/node/Dockerfile) |
Node 10 EOL depuis 2021-04 ; image node:10-buster encore pullable, Buster Debian archivé. |
| Gulp | 3.9.1 | Gulp 3 EOL depuis avril 2022. Incompatible Node 12+. |
| gulp-sass | ~3.2.1 |
Dépend de node-sass (libsass) lui-même EOL depuis 2022-10. |
| Bower | 1.8.14 (installé globalement) | Déprécié officiellement par son équipe depuis 2017. |
| phantomjs | ~2.1.7 |
Archivé depuis 2018 ; Karma tourne encore grâce à karma-phantomjs-launcher. |
| Protractor | via gulp-protractor@^4.1.1 |
Abandonné par Angular en 2022. |
| Karma | ~6.3.16 |
Karma 6 encore maintenu (v6 dernière branche). |
client/app.yaml:runtime: python312(✅ à jour depuis PR technical_upgrade précédente), servicefront, static serving du dossierdist/. Aucune action nécessaire côté GAE runtime.- Pipeline :
GCP/deploy_front.shconstruit via gulp puis publiedist/en static files.
Résultat npm audit (2026-04-21, Node 10 / npm 6 via le container) :
| Sévérité | Count |
|---|---|
| critical | 9 |
| high | 83 |
| moderate | 35 |
| low | 11 |
| Total | 138 |
Exemples : extract-zip, form-data, gulp-ng-annotate, lodash, minimist, mkdirp.
Toutes sont dans la chaîne de build (devDependencies), pas dans le bundle livré au navigateur. Donc :
- Pas d'exposition directe en prod (ni XSS ni RCE côté utilisateur).
- Risque supply-chain : un contributeur qui lance
npm installpeut subir une exploitation (extract-zippath traversal,minimistprototype pollution, etc.).
Dominées par le sous-arbre gulp-3 + @npmcli/* (tiré par npm@^8.19.3 listé en dep dependencies – voir §4.1).
- dependencies runtime (listées dans
package.json>dependencies) :bl,latest-version,natives,npm. Aucune n'est importée par le bundle AngularJS livré — elles sont là uniquement pour des outils de build (nativespour Node 10,npmpour des scripts). - devDependencies : porte la quasi-totalité du poids. Remédiation = migrer la toolchain.
- Bump Bower resolutions vers AngularJS 1.8.3 (effort : faible, risque : faible).
client/bower.jsonresolutions.angular:~1.7.8→~1.8.3.- Toutes les
angular-*sont déjà demandées en~1.8.2; la résolution force aujourd'hui 1.7.8 — incohérence à résoudre. - Relancer
bower installdans le containernode-client, tester tous les écrans.
- Nettoyer
dependenciesdepackage.json: retirerbl,latest-version,natives,npm(elles n'ont aucune raison d'êtredependenciesruntime d'un front statique) → réduit la surface audit sans casser le build. - Figer la toolchain dans Docker — déjà fait dans
docker/node/Dockerfile(Node 10.24.1 + Gulp 3.9.1 + Bower 1.8.14). Vérifier querun_local.mdetdocker.mddocumentent bien que personne ne doitnpm installhors container.
- Migrer Gulp 3 → Gulp 4 (effort : moyen). Gulp 4 fonctionne sur Node 12+. Nécessite de réécrire les fichiers
client/gulp/*.jspour passer degulp.task(name, [deps], fn)àgulp.series/gulp.parallel. Débloque la sortie de Node 10. - Remplacer
gulp-sass@3+node-sasspargulp-sass@5+sass(dart-sass). Tester quebootstrap-sass@3.4.1compile toujours (peut nécessiter des ajustements de@import). - Remplacer Bower par
npm+main-bower-filesou migrer les assets vers un bundler moderne. Bower est déprécié depuis 2017, chaque nouvelle dépendance frontend devient un casse-tête. - Retirer PhantomJS au profit de
karma-chrome-launcheren mode headless. PhantomJS est archivé, Chrome headless est plus stable et plus rapide. - Retirer Protractor (tests E2E) au profit de Playwright ou Cypress. Protractor est officiellement déprécié par l'équipe Angular.
- Compatibilité navigateur : AngularJS 1.8 supporte IE11+, Edge Chromium, Chrome/Firefox/Safari récents. Aucun breaking côté navigateur entre 1.7.8 et 1.8.3.
angular-jwt@0.1.xest très ancien mais la surface utilisée par RCQ est minime (intercepteur + helper decode). Peut rester en l'état ou être réécrit en ~20 lignes maison si besoin.jquery@2.2.4: utilisé parbootstrap 3+ngMap. Upgrader à jQuery 3 cassebootstrap 3(nécessitebootstrap-migrateet tests UI exhaustifs). Ne pas toucher sauf si on migre Bootstrap 3 → 5 (hors scope).- Breaking 1.7 → 1.8 : principalement
$location.hashPrefix('')par défaut (déjà géré par RCQ) +ngPatternqui compile les strings en regex sans flags. À re-tester sur les formulaires (login, register UL, save tronc).
| # | Action | Impact | Effort | Statut |
|---|---|---|---|---|
| F1 | bower.json : resolutions.angular → ~1.8.3 + bower install |
runtime ✅ | 1h | ✅ done (PR technical_upgrade) |
| F2 | Nettoyer package.json.dependencies (retirer bl, npm, latest-version, natives) |
audit -20% | 30 min | ✅ done (PR technical_upgrade) |
| F3 | Documenter dans run_local.md que npm install doit être fait uniquement via le conteneur node-client |
sécurité supply-chain | 15 min | ✅ done (PR technical_upgrade) |
| F4 | Smoke tests E2E manuels (Login, Export, TroncQueteur prepare+save, UL registration) après F1 | validation | 1-2h | ✅ done (manuel, post-F1) |
| F5 | Gulp 3 → 5, Node 10 → 22, Bower → npm + gulp-inject |
debt | 3-5 j | ✅ done (PR fix_gulp_replace + PR bower_to_npm) |
Toutes les étapes F1 → F5 sont livrées. Détails :
- F5a — toolchain (
fix_gulp_replace) : Node 10 → 22, Gulp 3 → 5,gulp-sass@3+node-sass→gulp-sass@5+sass, PhantomJS →karma-chrome-launcher+ Chromium headless, conversion de l'API gulp aux signaturesgulp.series/gulp.parallel. - F5b — bower → npm (
bower_to_npm) : 24 deps front migrées versclient/package.json(dont 2 forks GitHubangular-qr-*-updated),wiredep+main-bower-filesretirés, vendor list explicite dansclient/gulp/conf.js,gulp-injectinjecte directement depuisnode_modules/.bower.json/.bowerrcsupprimés, plomberie Docker / Makefile /deploy_front.shnettoyée.
- AngularJS 1.8 release notes : https://github.com/angular/angular.js/blob/master/CHANGELOG.md
- Gulp 3 → 4 migration guide : https://gulpjs.com/docs/en/getting-started/migration-guide
- npm advisories liés à
gulp-ng-annotate,minimist,lodash: voirnpm audit(JSON complet régénérable viadocker compose run --rm node-client npm audit --json). - Commit précédent de bump GAE frontend vers
python312:client/app.yaml.