fix(dof): l import par clé API existe enfin — le helper n avait jamais été écrit - #286
Merged
Merged
Conversation
…s été écrit
La page DOF appelle /usr/local/sbin/pincabos-dof-online-api-import depuis
toujours. Ce programme n'a JAMAIS existé : ni dans le dépôt, ni dans
l'historique git, ni dans le master. La page affichait donc « Import DOF
via API indisponible » sur tous les cabinets PinCabOS, et seul l'import
ZIP manuel fonctionnait.
Trouvé en cherchant pourquoi un testeur n'avait aucune LED en table :
sans les directoutputconfig*.ini de SON cabinet, DOF n'a rien à jouer. Le
seul chemin automatique pour les récupérer n'était pas là.
Le contrat de l'API vient du client de référence de Michael Kalkbrenner
(github.com/mkalkbrenner/dof_configtool_client, DownloadController.php) :
GET configtool.vpuniverse.com/api.php?query=getconfig&apikey=<clé>
-> une archive ZIP de *.ini, *.xml, *.png
Trois choses que le client de référence ne fait pas et qu'on fait ici :
- Quand la clé est refusée, l'API répond du TEXTE et non un ZIP. C'est ce
texte qui explique l'erreur : on le montre, plutôt qu'un « échec » muet.
- L'archive vient du réseau : on n'en extrait jamais un chemin. Seul le
nom de base est retenu, et seulement en .ini/.xml/.png — « ../../etc/
passwd.ini » devient « passwd.ini » et reste dans le dossier cible.
- VPX (PrefPath) et VPinFE lisent chacun LEUR directoutputconfig : les
deux sont servis. Un seul donnerait un cabinet à moitié muet.
Sauvegarde horodatée avant écrasement. « noforce » garde ce que
l'utilisateur a déjà et le dit.
778 tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
La page DOF appelle
/usr/local/sbin/pincabos-dof-online-api-importdepuis toujours. Ce programme n'a jamais existé :La page affichait donc « Import DOF via API indisponible — le helper API PinCabOS est absent » sur tous les cabinets PinCabOS, et seul l'import ZIP manuel fonctionnait.
Trouvé en cherchant pourquoi un testeur n'avait aucune LED en table : sans les
directoutputconfig*.inide son cabinet, DOF n'a rien à jouer. Le seul chemin automatique pour les récupérer n'était pas là.Le contrat
Il vient du client de référence de Michael Kalkbrenner (
mkalkbrenner/dof_configtool_client,DownloadController.php:65) :Un GET, une clé, une archive ZIP de
*.ini,*.xml,*.png.Trois choses que le client de référence ne fait pas
Le message de l'API est rendu à l'utilisateur. Quand la clé est refusée, l'API répond du texte et non un ZIP — le client de référence l'avale dans un
catch. Ici :On n'extrait jamais un chemin venu du réseau. Le client de référence fait un
extractTonu. Ici, seul le nom de base est retenu, et seulement en.ini/.xml/.png:../../etc/passwd.inidevientpasswd.iniet reste dans le dossier cible. Un test le vérifie.Les deux dossiers sont servis. VPX (PrefPath) et VPinFE lisent chacun leur
directoutputconfig— n'en servir qu'un donne un cabinet à moitié muet.Le reste
Sauvegarde horodatée sous
/opt/pincabos/backups/dof-configtool/avant tout écrasement.noforcegarde ce que l'utilisateur a déjà, et le dit plutôt que de l'écraser en silence.Tests
test_dof_import_api.py, 13 tests : le programme existe au chemin exact que la WebApp appelle, l'URL est celle du client de référence, une réponse texte donne le code 2 avec le message de l'API, une clé vide est refusée avant tout appel réseau, le filtrage ne laisse passer ni.txtni.sh, la traversée de chemin est neutralisée, un fichier identique n'est pas réécrit, etnoforcepréserve l'existant.Tout est testable sans clé : seul l'appel réseau réel ne l'est pas — il faudra une vraie clé pour valider de bout en bout.
778 tests.
🤖 Generated with Claude Code