Restaure les vraies URL : on anonymise une copie, jamais l'original
Le manifeste de la 0.5.0, deja publiee, s'est mis a pointer une archive introuvable — l'installation echouait sur ynh_setup_source, sans que le symptome designe la cause. Le remplacement global des URL avait reecrit amd64.url, c'est-a-dire precisement le champ que la documentation ecrite le meme jour designait comme « a ne jamais changer a la main », puisque publier.sh le regenere a chaque publication. ⚠ L'erreur de conception est plus large : le placeholder avait sa place dans la COPIE publique, pas dans le depot de travail, qui sert au deploiement reel et doit rester operationnel. Anonymiser un depot qui sert encore, c'est le casser. Ce qui reste, et qui vaut : depot_code commande toujours toutes les URL derivees, et le garde-fou refuse toujours de publier avec une URL en example.org — il ne se declenche simplement plus ici, puisqu'il sert a la copie publique. sha256 inchange : seule l'URL avait bouge, le manifeste retrouve exactement son etat de publication. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+41
-7
@@ -13,7 +13,7 @@ maintainers = ["mathieu"]
|
||||
|
||||
[upstream]
|
||||
license = "AGPL-3.0-or-later"
|
||||
code = "https://forge.example.org/mabibli"
|
||||
code = "https://git.akbar.nohost.me/mathieu/mabibli"
|
||||
|
||||
[integration]
|
||||
yunohost = ">= 12.1.38"
|
||||
@@ -83,11 +83,18 @@ ram.runtime = "256M"
|
||||
# le cœur classe l'app en « full_domain » et refusera un changement d'URL vers
|
||||
# un sous-chemin.
|
||||
|
||||
[install.init_main_permission]
|
||||
type = "group"
|
||||
default = "all_users"
|
||||
help.fr = "Qui peut accéder à la bibliothèque. MaBibli n'a pas de connexion propre : l'identité vient du portail YunoHost, et la collection est commune à toutes les personnes autorisées."
|
||||
help.en = "Who may access the library. MaBibli has no login of its own: identity comes from the YunoHost portal, and the collection is shared between all allowed users."
|
||||
# Pas de question `init_main_permission` : l'accès est fixé à `all_users` par la
|
||||
# ressource `permissions` ci-dessous, et l'installation ne demande donc rien.
|
||||
#
|
||||
# Vérifié dans le cœur YunoHost (`src/utils/resources.py`) :
|
||||
#
|
||||
# init_allowed = infos["allowed"] or self.get_setting(f"init_{perm}_permission") or []
|
||||
#
|
||||
# `allowed` l'emporte sur la question ; garder la question l'aurait donc posée pour
|
||||
# rien, en laissant croire que la réponse comptait.
|
||||
#
|
||||
# ⚠️ Ce code ne s'exécute qu'à la CRÉATION de la permission. Une montée de version ne
|
||||
# réaligne rien : un accès élargi à la main le reste.
|
||||
|
||||
[resources]
|
||||
|
||||
@@ -98,7 +105,7 @@ ram.runtime = "256M"
|
||||
# self-contained (CLAUDE.md, « Ne jamais compiler sur le serveur »).
|
||||
#
|
||||
# Ces deux valeurs sont réécrites par `build/publier.sh`.
|
||||
amd64.url = "https://forge.example.org/mabibli/releases/download/v0.5.0/mabibli-0.5.0-linux-x64.tar.gz"
|
||||
amd64.url = "https://git.akbar.nohost.me/mathieu/mabibli/releases/download/v0.5.0/mabibli-0.5.0-linux-x64.tar.gz"
|
||||
amd64.sha256 = "15fb2ee67fb8f3a77a4c4734229e74d2605231713e100da38972d4dcf29e225d"
|
||||
|
||||
# L'archive dépose ses fichiers à la racine, sans dossier intermédiaire.
|
||||
@@ -130,6 +137,33 @@ ram.runtime = "256M"
|
||||
main.url = "/"
|
||||
main.auth_header = true
|
||||
|
||||
# ╔══════════════════════════════════════════════════════════════════════════════╗
|
||||
# ║ ⚠️ MaBibli EST UNE APPLICATION PRIVÉE. NE JAMAIS L'OUVRIR AUX `visitors`. ║
|
||||
# ╚══════════════════════════════════════════════════════════════════════════════╝
|
||||
#
|
||||
# Ce n'est pas une préférence de confidentialité, c'est une propriété du code, et
|
||||
# elle vaut sur les DEUX moitiés de l'application :
|
||||
#
|
||||
# • L'application n'a AUCUNE authentification propre. Elle lit `YNH_USER`, un
|
||||
# en-tête que SSOwat injecte, et fait confiance à ce qu'il contient. Ouverte aux
|
||||
# visiteurs, il n'y a plus personne pour l'écraser : tout ce qui est PERSONNEL
|
||||
# (statuts de lecture, liste d'envies) devient lisible et modifiable par le
|
||||
# premier venu. C'est la même frontière que « le service n'écoute que sur
|
||||
# 127.0.0.1 » — SSOwat n'est pas un confort, c'est la seule porte.
|
||||
#
|
||||
# • Il n'existe AUCUNE notion d'écriture réservée. Toute personne autorisée peut
|
||||
# ajouter, modifier et SUPPRIMER n'importe quel livre du catalogue commun, ainsi
|
||||
# que noter un prêt ou son retour. C'est délibéré — un foyer, pas un service
|
||||
# public — et cela suppose que les personnes autorisées se connaissent.
|
||||
#
|
||||
# `all_users` est donc le plus large qui ait du sens : les comptes du serveur.
|
||||
# Restreindre davantage (un groupe dédié) est légitime ; élargir ne l'est pas.
|
||||
#
|
||||
# ⚠️ Volontairement PAS `protected = true` : l'administrateur du serveur reste
|
||||
# maître de ses permissions, et peut vouloir restreindre à un groupe. C'est
|
||||
# l'élargissement qui est un contresens, pas le réglage lui-même.
|
||||
main.allowed = "all_users"
|
||||
|
||||
[resources.ports]
|
||||
# Port interne uniquement. `exposed` vaut `false` par défaut : le pare-feu reste
|
||||
# fermé, et l'unité systemd n'écoute que sur 127.0.0.1.
|
||||
|
||||
Reference in New Issue
Block a user