permet aux élèves de rejoindre leur classe avec son code, et les fiches en lot
L'élève saisit le code de classe et son prénom, le prof accepte, l'élève voit une seule fois son identifiant et son code. Aucun e-mail. Le prof peut aussi régénérer les fiches de plusieurs élèves d'un coup. Procédure pour prouver la copie de la clé des sauvegardes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
1ac8d4773a
commit
dd4f9c3c55
21 changed files with 573 additions and 26 deletions
|
|
@ -25,3 +25,5 @@ retirer la ligne (et le noter dans le journal) quand c'est fait.
|
|||
| Slogans « du lycée au master » | Le catalogue va aujourd'hui du lycée au BUT. Positionnement laissé tel quel : décision éditoriale d'Adam. | À décider | Étape 14 |
|
||||
| Ancien `storage/logs/laravel.log` | Fichier unique d'avant la rotation quotidienne (étape 14) : jamais purgé, à supprimer ou archiver (accord d'Adam). | Dès que possible | Étape 14 |
|
||||
| Pages d'aperçu publiques (32) | Signalées comme aperçus avec données fictives ; à retirer ou remplacer au fur et à mesure que les fonctions réelles arrivent. | Au fil du bloc B | Étape 14 |
|
||||
| Invitation des élèves majeurs par e-mail (V2 du CLAUDE.md) | Demande un service d'envoi d'e-mails (compte ouvert par Adam, DNS SPF/DKIM). Jamais pour les mineurs. | V2 | 2026-10-09 |
|
||||
| Code de classe : caractères ambigus | Généré avec `Str::random` (0/O, 1/I/l possibles), contrairement aux codes élèves. Utiliser le même alphabet sans ambiguïté. | Bloc B | 2026-10-09 |
|
||||
|
|
|
|||
|
|
@ -612,3 +612,16 @@ Adam a ouvert `/ide` et transmis la console du navigateur, plus sa fiche INPI.
|
|||
- **Mentions légales complétées** d'après la fiche INPI : Adam Belkacemi, entrepreneur individuel (EI), nom commercial Esquisse Formation, SIREN 838 093 268, SIRET 838 093 268 00087, 30 rue Lorenzaccio, 38100 Grenoble. La date de naissance de la fiche n'est pas reprise. Restent à compléter : l'article « Disponibilité et responsabilité » des CGU, et un éventuel délégué à la protection des données.
|
||||
|
||||
Vérifié en production : `/ide` 1 script en ligne, 0 erreur de syntaxe, `sandbox="allow-scripts"` ; Mulish déclarée par le portail ; aucun `@import` vers Google ; `/vendor/xterm/xterm.js` et `/vendor/codemirror/codemirror.js` en 200. 35 tests Pest.
|
||||
|
||||
## 2026-10-09 — Accès des élèves : rejoindre la classe avec son code, fiches en lot
|
||||
|
||||
**Question d'Adam** : comment l'élève obtient-il un accès après sa création ? Faut-il un e-mail automatique pour créer un mot de passe ?
|
||||
|
||||
**Réponse et décision** : pas d'e-mail. Le CLAUDE.md l'interdit pour les mineurs (minimisation) et range l'invitation par e-mail en V2 (pour les majeurs) ; le serveur n'a pas non plus de service d'envoi (il faudrait un compte chez un prestataire, ouvert par Adam). Le parcours existant (identifiant + code secret + QR à usage unique, sur une fiche imprimable) restait valable, avec deux défauts : la fiche ne s'affichait qu'une fois, et le code de classe affiché ne servait à rien. Adam n'ayant pas répondu au choix proposé, j'ai construit les deux options sans dépendance extérieure :
|
||||
|
||||
- **Rejoindre avec le code de classe** (façon n°1 du CLAUDE.md) : `/rejoindre` (code + prénom + nom facultatif, limité à 10 envois par minute) → demande visible sur la page de la classe (rafraîchie toute seule quand une demande arrive) → le prof accepte → le navigateur de l'élève affiche **une seule fois** son identifiant et son code, et le connecte. Le code en clair n'existe que dans la demande (chiffré par `APP_KEY`), supprimée à l'affichage ; une demande non traitée est supprimée au bout d'une heure (`model:prune`, tous les quarts d'heure). Seul le navigateur qui a envoyé la demande peut la suivre (jeton en session, empreinte SHA-256 en base). Classe archivée ou code faux : refus. Le prof projette le code ou un QR qui pré-remplit le code.
|
||||
- **Fiches en lot** : cases à cocher dans la liste des élèves, « Nouvelles fiches pour la sélection » (nouveaux codes et QR, anciens codes invalidés).
|
||||
- Lien « Rejoins ta classe avec son code » sur la page de connexion ; politique de confidentialité mise à jour (nouvelle donnée : la demande, au plus une heure).
|
||||
- 6 tests Pest (41 au total) ; vérifié en production : `/rejoindre` 200 avec CSP stricte, code faux refusé avec message, table créée, nettoyage planifié.
|
||||
|
||||
**Clé des sauvegardes** : je ne peux ni ne dois voir la copie d'Adam. Procédure de preuve ajoutée au runbook des sauvegardes : un message chiffré sur le serveur avec la clé publique, que la copie doit déchiffrer sur le Mac. Fichier de test déposé sur le Bureau d'Adam. Corrigé aussi la commande de copie du runbook (un `scp` d'un fichier de root échouait).
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ révèle rien.
|
|||
|
||||
## Où est la clé de déchiffrement
|
||||
|
||||
- Clé privée age : `/root/.age/cle-sauvegardes.txt`, permissions `600`, **ne quitte jamais le serveur**.
|
||||
- Clé privée age : `/root/.age/cle-sauvegardes.txt`, permissions `600`. Elle ne quitte le serveur que pour la copie de secours d'Adam (ci-dessous), jamais vers Git ni ailleurs.
|
||||
- Clé publique (sans risque à diffuser) : voir la sortie de `age-keygen` lors du déploiement, ou :
|
||||
```
|
||||
sudo grep 'public key' /root/.age/cle-sauvegardes.txt
|
||||
|
|
@ -34,9 +34,23 @@ façon de déchiffrer les sauvegardes existantes. Exemple pour la récupérer (
|
|||
lancer depuis le Mac, le fichier arrive en clair sur le Mac donc à stocker
|
||||
immédiatement dans un endroit sûr puis à effacer du téléchargement) :
|
||||
```
|
||||
scp paillasse:/root/.age/cle-sauvegardes.txt ~/Desktop/
|
||||
# puis la mettre immédiatement dans un gestionnaire de mots de passe,
|
||||
# et supprimer la copie en clair sur le Desktop.
|
||||
# La clé appartient à root : un simple scp échouerait. La redirection écrit
|
||||
# le fichier sur le Mac sans jamais l'afficher.
|
||||
ssh paillasse 'sudo cat /root/.age/cle-sauvegardes.txt' > ~/Desktop/cle-sauvegardes-syllabus.txt
|
||||
```
|
||||
|
||||
Puis la ranger dans le gestionnaire de mots de passe (pièce jointe d'une
|
||||
fiche « Syllabus — clé des sauvegardes ») ou sur une clé USB chiffrée, et
|
||||
**supprimer la copie du Bureau**.
|
||||
|
||||
### Prouver que la copie fonctionne (sans montrer la clé)
|
||||
|
||||
Sur le serveur, chiffrer un message de test avec la clé **publique** ; sur le
|
||||
Mac, le déchiffrer avec la **copie** (installer `age` : `brew install age`) :
|
||||
|
||||
```
|
||||
ssh paillasse 'sudo bash -c "PUB=\$(grep -oP \"(?<=public key: )age1\\S+\" /root/.age/cle-sauvegardes.txt); echo \"copie OK \$(date +%F)\" | age -r \$PUB"' > ~/Desktop/test-cle.age
|
||||
age -d -i <chemin de la copie> ~/Desktop/test-cle.age # doit afficher « copie OK … »
|
||||
```
|
||||
|
||||
## Identifiants Dedibackup
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue