From e5c2b7d4282dab7a2f273abe70006ad03f8f5d71 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 28 Apr 2026 00:16:18 +0200 Subject: [PATCH] up --- todo.txt | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 todo.txt diff --git a/todo.txt b/todo.txt new file mode 100644 index 0000000..8e5e1f3 --- /dev/null +++ b/todo.txt @@ -0,0 +1,144 @@ +REVIEW DE CODE — 2026-04-26 +============================================ + +Extension VSCode (TypeScript) qui collecte des metriques sur +l'activite du user dans VSCode : +- ouverture de fichier / changement d'onglet (event 'open') +- sauvegarde de fichier (event 'save') +- focus/blur de la fenetre (event 'focus') + +Envoie un POST JSON a la URL configuree (`vscodestat.url`). +113 lignes TypeScript, version 1.1.159 (vsix 1.1.141 commit). + +NB : extension force-installed dans les containers vscode + vscodeluigi +(cf vscode/todo.txt). C'est l'extension de monitoring activite dev. + +SECURITE +-------- +[ ] vscodestat.url configurable user-side (CRITIQUE pour exfil) + src/extension.ts:14-23 : commande `setUrl` permet au user de + changer l'URL en runtime via `vscode.workspace.getConfiguration + ().update('vscodestat.url', url, ConfigurationTarget.Global)`. + Le user peut donc rediriger ses metriques vers son propre + serveur. Dans le contexte (extension force-installed pour + tracking employe), le user peut bypass le tracking en + pointant sur `https://localhost/dummy` ou similar. Attendu / + pas attendu ? + NB : entrypoint.sh dans vscode/ overwrite la URL a chaque + boot du container. Donc tracking restored. Mais pendant la + session, user peut tweak. A documenter le comportement. + +[ ] makeHttpRequest envoie au serveur l'event sans auth (RGPD) + src/extension.ts:97-118 : `fetch(url, { method: 'POST', + headers: ..., body: JSON.stringify(json) })`. Pas de token. + Cote serveur (cf monitoringserver/todo.txt), `/vscodestat` est + aussi sans auth => tout le monde peut envoyer des metriques. + Mais ici c'est cote client, le code est legitime. Ce qui est + discutable c'est que l'event contient : + - `event: 'open'`, `project: extractProjectName(filePath)` + Ces donnees sont des metadonnees d'activite du salarie. RGPD + : doit etre dans le declaration des traitements RH. + +[ ] extractProjectName fuite des paths potentiellement sensibles + src/extension.ts:73-81 : + const match = path.match(/\/docker\/([^/]+)/); + if (match) return match[1]; + Si un user ouvre un fichier hors `/docker/X/...`, le + `extractProjectName` retourne null, donc `project: null` + envoye. Pas un leak direct, mais combine au tracking precis, + profile complet de l'activite hors-projet. + +[ ] Pas de cap sur la frequence des events + src/extension.ts:39-49 : `onDidChangeActiveTextEditor` => + chaque alt-tab entre fichiers => 1 POST. Si user est tres + actif, 100+ POST par minute. Pas de debounce. Cote + monitoringserver, idem aucun rate-limit (cf monitoringserver/ + todo.txt). Risque d'epuisement bande passante / spam serveur. + +[ ] Le user peut DISABLE l'extension volontairement + Standard VSCode : un user peut desactiver toute extension. + Le force-install au boot du container la re-active, mais + pendant la session, l'employe peut couper le tracking. + Pattern de force-tracking discutable (transparency). + +[ ] Pas de TLS pinning sur fetch + Si l'URL pointe vers HTTPS (probablement), + `monitoringserver.raphaelpiccolo.com`, certificat valide. OK + mais pas de pinning. + +BUGS / FRAGILITE +---------------- +[ ] vscodestat-1.1.141.vsix commit dans le repo mais version 1.1.159 + package.json:4 : "version": "1.1.159" mais le vsix commit est + 1.1.141. Decalage. Si on installe le vsix, c'est l'ancienne + version qui est appliquee (vscode/bin/entrypoint.sh:25 : + `code-server --install-extension /opt/vsix/vscodestat.vsix`). + A rebuild + republier le vsix avec la version courante. + +[ ] /opt/vsix/vscodestat.vsix : binaire du dossier autre + Cf vscode/todo.txt. Le vsix est COPIE dans l'image vscode + (Dockerfile:48). Si le vsix de ce repo est modifie mais pas + rebuild dans vscode/, decalage permanent. + +[ ] event 'open' sur changement d'onglet, pas vraie ouverture + src/extension.ts:39 : `onDidChangeActiveTextEditor`. Fire + aussi sur le simple alt-tab entre 2 fichiers deja ouverts. + Donc l'event 'open' est mal nomme (en realite "focus de tab"). + A renommer 'tab_focus' ou similar. + +[ ] event 'focus' sans event name + src/extension.ts:55 : `await makeHttpRequest({ focus: event. + focused })`. Pas de `event: 'focus'`. Cote serveur, comment + distinguer ? Cf monitoringserver/homeController.js:78 : + `eventName: req.body.name`. Donc le `focus` event ne match + pas la convention serveur. + +[ ] Pas de batching + Chaque event = 1 fetch. Pas de queue + flush periodique. + Si reseau down, perte d'events (pas de retry). A capper. + +[ ] makeHttpRequest catch silencieux + src/extension.ts:114-117 : catch + console.error. Pas de + retry, pas de notification user. Si serveur down, events + perdus. + +[ ] extractProjectName : path Windows hardcode au regex + src/extension.ts:79-80 : replace `\\` -> `/` puis match + `/docker/(...)/`. OK pour les conventions /root/docker, mais + si project hors `docker/`, retourne null. A clarifier. + +[ ] Pas de tests unitaires sur extractProjectName + Function pure, faciles a tester. Pas de tests dans src/test/ + visible. A check. + +CODE MORT / POLLUTION +--------------------- +[ ] vscodestat-1.1.141.vsix commit + Binaire commit dans git. A scrub si rebuild a chaque release. + +[ ] vscodestat.helloWorld command + src/extension.ts:7-10. Demo command standard de yeoman. + Inutile en prod. A delete. + +CONVENTIONS +----------- +[ ] Mauvaise pratique : version vsix decalee + 1.1.141 vs 1.1.159 dans package.json. + +[ ] Pas de README detaille sur l'integration serveur + README mentionne juste "Sample url". A documenter le format + JSON envoye et le comportement. + +DECISION SUGGEREE +----------------- +[ ] Rebuild + republier le vsix a la version courante + Production decalee de 18 versions (1.1.141 vs 1.1.159). + +[ ] Documenter le scope RGPD du tracking + Si l'extension force-installed est obligatoire pour tracker + l'activite des employes (Thomas, Luigi), declaration RGPD + requise (RGPD art 13). + +[ ] Considerer un rate-limit cote client + Debounce sur onDidChangeActiveTextEditor (ex: 1s) pour + eviter le spam.