Marketplace
Le marketplace
Le marketplace sert à mettre à jour tes addons et à ajouter des addons tiers non livrés dans le paquet. NeoFrag Reborn s'installe déjà complet (tous les modules/widgets/thèmes du paquet, modèle « tout bundlé ») ; le marketplace intervient après l'installation, depuis l'administration.
Le catalogue et les archives sont servis depuis neofrag-reborn.xyz. Chaque archive est vérifiée par empreinte SHA-256 au téléchargement (intégrité), via HTTPS.
Installer un addon tiers
Deux chemins :
1. En un clic depuis l'administration
Admin → Thèmes & Addons → Marketplace. La fenêtre liste les addons disponibles non installés ; coche-les et clique Installer — NeoFrag télécharge, vérifie l'empreinte SHA-256, extrait et enregistre l'addon (ainsi que son widget apparié, le cas échéant).
2. Manuellement (archive ZIP)
La page Marketplace (front) présente chaque addon en fiche avec un bouton Télécharger. Tu peux
aussi : télécharger le .zip, puis Admin → Thèmes & Addons → Ajouter et envoyer l'archive (l'upload
est validé : les archives au contenu non sûr sont refusées).
Mettre à jour ou retirer
- Mettre à jour : Admin → Thèmes & Addons → Mises à jour compare la version installée de chaque
addon à celle du catalogue et liste celles à mettre à jour ; applique-les en un clic (téléchargement +
SHA-256, fichiers remplacés, migrations de schéma en attente appliquées). Sinon, envoyer un nouveau
.zipvia Ajouter met aussi à jour (une version supérieure remplace l'ancienne). - Retirer : depuis la fiche de l'addon dans Thèmes & Addons, Supprimer (l'addon doit être désactivé). Ses tables et données sont retirées.
Les connecteurs d'authentification (Discord, GitHub, Google) font partie du cœur : ils sont déjà présents, à configurer dans les réglages — ils ne passent pas par le marketplace.
Marketplace injoignable ? Si l'écran « Mises à jour » affiche « Marketplace injoignable », vérifie que ton serveur peut sortir en HTTPS vers
neofrag-reborn.xyz. Le catalogue est fixé à cette origine ; un administrateur peut la surcharger (vers un hôte autorisé, en HTTPS) via le réglagenf_marketplace_url.
Sécurité
Le marketplace ne télécharge que depuis une origine fixe en HTTPS (jamais une URL saisie par
l'utilisateur), vérifie le SHA-256 de chaque archive contre le catalogue, et refuse toute archive
piégée (anti-zip-slip : chemins absolus, .., symlinks). Aucun code distant n'est exécuté lors de
l'ajout/mise à jour d'un addon (extraction + install.sql/migrations SQL idempotents uniquement).
Pour les auteurs d'addons
Le catalogue est généré depuis le dépôt par tools/package-addons.php, qui zippe chaque addon
(dossier <name>/ à la racine de l'archive) et produit marketplace/catalog.json :
{
"schema": 1, "base_version": "1.0.0",
"addons": [{
"type": "module", "name": "wiki", "tier": 2, "category": "contenu",
"title": "Wiki", "version": "1.0", "file": "modules/wiki.zip",
"size": 15114, "sha256": "…", "provides_widgets": []
}]
}
catalog.json et les .zip doivent être publiés ensemble (jeu cohérent du même run : les empreintes
SHA-256 dépendent du run). Pour proposer ton addon, suis les guides
créer un module, un widget ou
un thème, puis zippe son dossier.
Héberger le catalogue (opérateur)
Le marketplace est un jeu de fichiers statiques servi sur le domaine de la marketplace : catalog.json
- les
.zip(rangés sousmodules/,widgets/,themes/).
php tools/package-addons.php→ (re)génèremarketplace/catalog.json+ les zips à jour.- Uploade le contenu de
marketplace/à la racine du site →https://<host>/marketplace/catalog.json. - Le CMS pointe vers ce catalogue via
nf_marketplace_url(défaut :https://neofrag-reborn.xyz/marketplace, sanswww). Origines autorisées (anti-SSRF, HTTPS:443) :neofrag-reborn.xyzetwww.neofrag-reborn.xyz; pour un autre domaine, adaptenf_marketplace_urletMARKETPLACE_HOSTSdansneofrag/installer.php.
À refaire à chaque changement d'addon (version ou fichiers) : les SHA-256 du catalogue doivent correspondre aux zips publiés (même run).
Mise à jour du cœur (NeoFrag lui-même)
Le catalogue porte base_version (la version du CMS pour laquelle il a été bâti). Admin → Thèmes & Addons
→ Mises à jour la compare à la version installée et signale une nouvelle version du cœur le cas échéant.
Deux chemins pour l'appliquer.
En un clic depuis le Monitoring
Admin → Monitoring → Mettre à jour. Le site prend d'abord une sauvegarde, puis télécharge le paquet de mise à jour, vérifie son empreinte, superpose les fichiers, applique les migrations en attente et recompile les feuilles de style.
Ce bouton était désactivé sur ce fork (NEOFRAG_ALLOW_AUTOUPDATE) parce que l'ancien mécanisme téléchargeait
la release upstream (neofrag.download) et l'étalait par-dessus, ce qui aurait écrasé le code Reborn
divergé. Un interrupteur global empêchait toutefois aussi les mises à jour légitimes. Il est remplacé par
quatre garanties de nature :
- l'origine vient de la même allow-list que le marketplace —
neofrag.downloadn'y est pas, et une valeur injectée en base ne peut pas l'y faire entrer ; version.jsonne fournit qu'un nom de fichier, jamais une URL : ni hôte, ni chemin, donc ni redirection ni remontée de répertoire ;- l'empreinte SHA-256 est vérifiée avant qu'un seul fichier du site ne soit touché ;
- l'archive est contrôlée entrée par entrée (anti-zip-slip, symlinks refusés).
Les fichiers de config/ déjà présents et le verrou install/db.txt ne sont jamais réécrits : la
configuration d'un site en service est préservée. Le reste d'install/ est du code du produit, et suit
les versions.
À la main
Télécharge neofrag-reborn-public-<version>.zip et remplace les fichiers (hors config/, upload/,
backups/), puis visite le site — les migrations s'appliquent (guide de déploiement).
Publier une mise à jour (opérateur)
php tools/build-release.php produit, en plus des paquets d'installation, trois fichiers à publier
ensemble sur l'origine de mise à jour (https://neofrag-reborn.xyz/update/ par défaut, surchargeable
via nf_monitoring_check_url vers un hôte autorisé) :
| Fichier | Rôle |
|---|---|
neofrag-reborn-update-<v>.zip |
le paquet, à plat (aucun dossier racine) |
version.json |
version publiée, nom du zip, son SHA-256, sa taille |
checksum.json |
une empreinte MD5 par fichier livré, pour le contrôle d'intégrité du Monitoring |
Le paquet de mise à jour est plat, contrairement aux paquets d'installation qui rangent tout sous
neofrag-reborn/. C'est essentiel : l'updater écrit chaque entrée à son propre chemin, donc un paquet à dossier racine créerait un sous-dossierneofrag-reborn/au lieu de remplacer quoi que ce soit — la mise à jour « réussirait » sans rien mettre à jour.
Les trois fichiers forment un jeu cohérent d'un même run : le SHA-256 de
version.jsonet les empreintes dechecksum.jsonne valent que pour ce zip précis. Publier l'un sans les autres fait échouer la vérification côté site.