NextCloud — détails techniques
Description et fonctionnalités de ce module : NextCloud.
Nature et rôle
Module ENT à part entière (fr.openent~nextcloud) dont la fonction est d'être un connecteur :
il relie l'ENT à un serveur NextCloud externe et n'héberge aucune donnée lui-même. Rangé dans
connectors/ (même logique que moodle-connector).
- Verticle backend :
fr.openent.nextcloud.Nextcloud, port8060, adresse/nextcloud. - Schéma SQL dédié
nextcloud(sql: true) : tablenextcloud.user= mapping ENT ↔ NextCloud (le compte NextCloud est provisionné à la volée, identifiant =userIdENT). - Protocoles vers le serveur NextCloud : API OCS (
/ocs/v1.php) et WebDAV (/remote.php/dav/files).
Accès et intégration
Le module fr.openent~nextcloud dialogue avec le serveur NextCloud via son API OCS
(/ocs/v1.php) et WebDAV (/remote.php/dav/files). À la première utilisation, le compte
NextCloud de l'utilisateur est provisionné automatiquement (l'identifiant NextCloud = le
userId ENT), ce qui aligne l'identité entre l'ENT et NextCloud.
NextCloud n'est pas actif par défaut : c'est une intégration optionnelle, activée par
établissement/déploiement via la configuration du module workspace (enable-nextcloud), en plus
du serveur NextCloud lui-même à héberger. Tant que ce réglage n'est pas activé, l'entrée
« Documents synchronisés » et le fournisseur NextCloud du sélecteur de fichiers (utilisé pour
joindre une pièce depuis d'autres modules) n'apparaissent pas dans l'interface — l'utilisateur ne
voit ni ne peut deviner l'existence de la fonctionnalité. Détail technique de l'activation :
NextCloud & édition en ligne — Activation / désactivation.
Le serveur NextCloud et la suite bureautique (Collabora Online / OnlyOffice) sont des applications serveur à déployer et héberger (chez le Titulaire pour un ENT). L'édition bureautique n'est native ni dans NextCloud ni dans Open ENT : c'est un ajout commun aux deux, via le protocole WOPI.
Pour une connexion sans couture (pas de second mot de passe), NextCloud se branche comme client
SSO de l'ENT, qui est son propre fournisseur d'identité (OIDC / CAS). Le sujet d'identité
correspond au userId ENT — la même clé que le provisionnement automatique.
Double front (pas de bascule ?ui=)
Contrairement à des modules comme edt/rbs, les deux fronts servent des surfaces disjointes :
| Surface | Front | Route | Rôle |
|---|---|---|---|
| Console du client de synchro | React (frontend/) | GET /nextcloud/desktop (droit ADMIN_DESKTOP) | Dossier synchronisé, bande passante, extensions exclues |
| Explorateur « Documents synchronisés » | AngularJS (angularjs/) | sniplet chargé par le module workspace | Lister / déposer / télécharger / déplacer / corbeille |
La route vide GET /nextcloud renvoie volontairement un 404 (le connecteur est workspace-only).
Bureautique en ligne (MOD3)
L'édition des documents .docx / .xlsx / .pptx n'est native ni dans NextCloud ni dans Open ENT :
elle est fournie par une suite bureautique branchée sur NextCloud via WOPI. Le stack de
développement (open-ent-mods/dev/nextcloud/) inclut les deux, pour comparaison :
- Collabora Online (CODE) — app NextCloud
richdocuments(« Nextcloud Office »),wopi_urlvers le serveur Collabora. - OnlyOffice Document Server — app NextCloud
onlyoffice, échanges sécurisés par JWT.
En production, ces serveurs sont à héberger chez le Titulaire (souveraineté / RGPD).
Le choix entre Collabora et OnlyOffice n'est pas un réglage du connecteur : le connecteur
appelle l'API « Direct Editing » du cœur de NextCloud (POST /ocs/v2.php/apps/files/api/v1/directEditing/open)
sans imposer d'editorId, ce qui laisse NextCloud sélectionner automatiquement l'éditeur
activé pour le type de fichier concerné. Le changement d'éditeur se fait donc côté admin
NextCloud, dans Applications : activer l'app richdocuments (Collabora) ou onlyoffice, pas
les deux en même temps pour éviter une sélection ambiguë entre les deux éditeurs.
Partage nominatif et inter-établissements
Le partage d'un fichier NextCloud vers un autre utilisateur de l'ENT s'appuie sur l'API de
partage OCS de NextCloud (POST/DELETE /ocs/v2.php/apps/files_sharing/api/v1/shares[/:id],
shareType=0 = utilisateur). Le picker de sélection de destinataire (AngularJS) interroge
GET /communication/visible/search (même mécanisme de visibilité que la messagerie) : par défaut,
seuls les utilisateurs du même établissement (ou déjà liés par une règle de communication)
apparaissent.
Le partage inter-établissements est géré par un mécanisme propre au connecteur, indépendant
du modèle COMMUNIQUE générique d'entcore (pour ne pas affecter la messagerie ni les autres usages
de la visibilité) :
- Stockage : collection MongoDB
nextcloud_share_structures, une paire de structures autorisées par document (structureId,targetStructureId). - Backend (
NextcloudShareStructureController) :GET/POST/DELETE /nextcloud/admin/share-structures— administration de la liste des paires (un admin global voit/gère tout ; un admin d'établissement est restreint à ses propres structures). La résolution d'une structure cible se fait par code UAI (GET /nextcloud/admin/share-structures/resolve?UAI=...), pas par id neo4j.GET /nextcloud/share/search-users?query=...— recherche, parmi les établissements autorisés, des utilisateurs correspondant à la requête (accessible à tout utilisateur authentifié, pas seulement aux admins).
- Droit : nouveau droit workflow
admin.share.structures, à accorder via un rôle (Gestion des rôles) pour qu'un admin global ou d'établissement puisse configurer les paires. - Frontend : le picker de partage AngularJS fusionne les résultats de
/communication/visible/searchet de/nextcloud/share/search-users(dédoublonnés) ; la console d'administration React (/nextcloud/desktop) expose un écran « Partage inter-établissements » (saisie du code UAI cible, liste des paires existantes avec suppression).
Validé manuellement en développement : création d'une paire de structures via l'API admin, recherche cross-établissement retournant bien un utilisateur d'un établissement distinct, partage effectif du fichier vers ce destinataire.
Déploiement
Fat-mod fr.openent~nextcloud (version 2.4.2-patched) publié sur GitHub Packages et
rct-nexus, téléchargé par le launcher via ent-core.yaml. La CI construit les deux fronts
(React via pnpm, AngularJS via gulp) puis le backend Maven (Java 8).
Couverture de tests
Tests e2e Playwright, dans open-ent/frontend/apps/open-ent-e2e/src/modules/12_espace_documentaire/ :
06_documents_synchronises_acces.spec.ts— présence et dépliage par défaut du nœud « Documents synchronisés » dans l'arbre de gauche de l'espace documentaire.07_partage_nominatif.spec.ts— partage d'un document depuis « Documents synchronisés » vers un second compte ENT (session distincte dans le même test), vérification de la visibilité côté destinataire.08_edition_en_ligne.spec.ts— ouverture d'un document bureautique depuis « Documents synchronisés », vérification de l'absence d'erreur d'ouverture de l'éditeur en ligne.
Ces tests se dégradent en skip (pas en échec) si le connecteur NextCloud n'est pas activé sur
l'établissement du compte de test utilisé — c'est le cas de certains comptes/thèmes (ex. « ENT
PRIMAIRE ») qui n'exposent pas le sniplet « Documents synchronisés ». Utiliser un compte dont
l'établissement a le connecteur configuré pour obtenir une exécution complète (pas seulement un
skip).
Vérifications manuelles déjà effectuées en développement : serveur NextCloud joignable,
provisionnement automatique d'un compte, listing WebDAV réel dans l'espace documentaire,
dépôt de fichiers, traitement d'un .docx par le moteur Collabora (convert-to), partage
nominatif entre deux comptes ENT (même établissement et inter-établissements après autorisation
admin), et coédition OnlyOffice démarrant dès l'ouverture du fichier partagé.
Conformité
Le connecteur contribue aux exigences MOD9 / SOC9 (stockage-partage : synchronisation de bureau) et MOD3 / SOC3 (outils bureautiques : édition en ligne via Collabora / OnlyOffice).
| Maillon de la chaîne qualité | Référence |
|---|---|
| 🎯 Fonctionnalités attendues | fiche fonctionnelle |
| 🧪 Tests réalisés | à venir (e2e + unitaires) |
| ✅ Tests de conformité | tableau de conformité |