Skip to main content

NextCloud — détails techniques

Fiche fonctionnelle

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, port 8060, adresse /nextcloud.
  • Schéma SQL dédié nextcloud (sql: true) : table nextcloud.user = mapping ENT ↔ NextCloud (le compte NextCloud est provisionné à la volée, identifiant = userId ENT).
  • 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.

Fonctionnalité activable

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.

Briques à héberger

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.

Identité (SSO)

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 :

SurfaceFrontRouteRôle
Console du client de synchroReact (frontend/)GET /nextcloud/desktop (droit ADMIN_DESKTOP)Dossier synchronisé, bande passante, extensions exclues
Explorateur « Documents synchronisés »AngularJS (angularjs/)sniplet chargé par le module workspaceLister / 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_url vers 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/search et 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.
Dépendance à la configuration de l'établissement de test

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 attenduesfiche fonctionnelle
🧪 Tests réalisésà venir (e2e + unitaires)
✅ Tests de conformitétableau de conformité