Files
Enclume/docs/COMPTES-ET-MODERATION.md
T
hcornet b063d59525
build / Garde-fou (pull_request) Failing after 7s
build / Images Harbor (catalog-sync, Dockerfile.catalog-sync) (pull_request) Skipped
build / Images Harbor (web, Dockerfile) (pull_request) Skipped
build / Garde-fou (push) Failing after 8s
build / Images Harbor (catalog-sync, Dockerfile.catalog-sync) (push) Skipped
build / Images Harbor (web, Dockerfile) (push) Skipped
Partage par lien, comptes Authentik, soumission et moderation de packs, prerequis des sondes ; corrige le lien casse vers le script de l'editeur
2026-09-10 16:28:26 +02:00

4.0 KiB

Comptes, partage et modération

Trois fonctionnalités s'activent indépendamment. Aucune n'est obligatoire : sans base de données, sans OIDC et sans jeton Gitea, Enclume reste l'éditeur qui génère du CLAPI. C'est ce qui permet à n'importe qui de l'auto-héberger sans rien configurer.

Fonction Ce qu'il faut Sans ça
Partage par lien ENCLUME_DATABASE_URL bouton absent
Comptes et projets enregistrés base + OIDC site utilisable, sans connexion
Soumission de packs base + OIDC contributions par pull request uniquement
Publication des packs acceptés jeton Gitea modération possible, publication non

/sante annonce l'état réel de chacune.

Authentik

Un seul fournisseur est déclaré côté Enclume. C'est Authentik qui fédère GitHub, Google ou tout autre fournisseur social : en ajouter un plus tard ne demande aucun redéploiement.

Créer le fournisseur — Applications → Fournisseurs → Créer → OAuth2/OpenID.

  • Type de client : Confidentiel
  • URI de redirection, en correspondance stricte : https://<domaine>/connexion/retour
  • Portées : openid, email, profile
  • Noter l'identifiant client et le secret

Créer l'application — Applications → Applications → Créer. Le slug compte : c'est lui qui apparaît dans l'URL de découverte.

ENCLUME_OIDC_METADATA=https://authentik.<domaine>/application/o/<slug>/.well-known/openid-configuration
ENCLUME_OIDC_CLIENT_ID=...
ENCLUME_OIDC_CLIENT_SECRET=...

Le groupe de modération. Enclume lit la revendication groups du jeton, qu'Authentik n'envoie pas par défaut. Créer une correspondance de portée (Personnalisation → Property Mappings → Scope Mapping), nom de portée groups, expression :

return {"groups": [group.name for group in request.user.ak_groups.all()]}

Puis ajouter cette portée au fournisseur, et créer un groupe enclume-admins dont tu es membre.

Le temps de mettre ça en place, [email protected] donne l'accès à la modération sur la seule foi de l'adresse. À vider ensuite.

Le jeton Gitea

Un jeton d'accès personnel sur le compte qui ouvrira les demandes de fusion, avec la portée write:repository sur le dépôt du catalogue. Publier un pack accepté crée une branche, y dépose le fichier YAML et ouvre une pull request — jamais un push sur la branche principale. Tu relis dans Gitea avant de fusionner.

Ce qui n'est jamais stocké

Les macros marquées « mot de passe » sont vidées avant toute écriture en base : partage, projet enregistré, soumission. Un site public n'a aucune raison de détenir le mot de passe MySQL de quelqu'un. L'avertissement affiché au partage le rappelle à l'utilisateur.

Migrations

Le conteneur web exécute alembic upgrade head à son démarrage, puis lance gunicorn. Un échec de migration arrête le conteneur : une base à moitié migrée derrière une application qui répond serait pire qu'une indisponibilité visible.

Règle d'écriture des migrations : on ajoute, on ne retire jamais dans la même version que le code qui cesse d'utiliser une colonne. La suppression arrive une version plus tard. Sans cette discipline, revenir à l'image précédente casse l'application — et tout l'intérêt des tags immuables disparaît.

Sauvegarde avant une montée de version qui touche au schéma :

docker compose exec -T db pg_dump -U enclume enclume | zstd > enclume-$(date +%F).sql.zst

Les limites en place

Réglage Défaut Rôle
ENCLUME_PARTAGE_JOURS 90 expiration des liens
ENCLUME_PROJETS_PAR_COMPTE 50 projets enregistrés par compte
ENCLUME_SOUMISSIONS_PAR_JOUR 10 soumissions par compte et par jour
ENCLUME_TAILLE_MAX_PACK 256 ko taille d'un YAML soumis
ENCLUME_TAILLE_MAX_PROJET 2 Mo taille d'un projet

Les identifiants de partage font 12 caractères tirés au hasard, soit 72 bits : ils ne s'énumèrent pas. Les liens expirés sont purgés à chaque nouveau partage.