ADR 008 : Réduction du Code dupliqué et Mise à Jour des Bibliothèques dans Open ENT NG
Contexte
Dans le projet Open ENT NG, une quantité significative de code est dupliquée à travers plusieurs projets open source. En particulier, la partie cryptographie est répliquée dans différents modules. De plus, certaines dépendances externes, telles que la bibliothèque jp.eisbahn.oauth2
, ne sont plus maintenues. Cette situation pose des défis en termes de maintenance, de sécurité et d'évolutivité du projet.
Problème
- Code Dupliqué : La duplication du code entraîne une maintenance accrue, avec des risques accrus d'incohérences, de bugs et de difficultés lors des mises à jour.
- Dépendances Non Maintenues : L'utilisation de bibliothèques qui ne sont plus maintenues (comme
jp.eisbahn.oauth2
) expose le projet à des failles de sécurité, des bugs non corrigés, et des incompatibilités avec les versions futures des outils et des frameworks. - Charge de Maintenance : Le maintien d'un code dupliqué et l'utilisation de bibliothèques obsolètes augmentent la charge de maintenance, ralentissent le développement de nouvelles fonctionnalités, et peuvent impacter la stabilité globale du système.
Décision
-
Centraliser et Réutiliser le Code :
- Identifier toutes les parties de code dupliquées dans le projet Open ENT NG, en particulier dans les modules relatifs à la cryptographie.
- Centraliser ce code dans une bibliothèque interne ou en adopter une déjà existante et bien maintenue, éliminant ainsi les duplications.
-
Remplacer les Dépendances Obsolètes :
- Remplacer
jp.eisbahn.oauth2
et toute autre dépendance non maintenue par des alternatives modernes et activement maintenues, commeSpring Security OAuth2
,Nimbus JOSE + JWT
, ouOAuth2-client
de Quarkus selon la compatibilité et les besoins spécifiques. - Vérifier la compatibilité des nouvelles bibliothèques avec le reste du codebase et procéder aux ajustements nécessaires.
- Remplacer
-
Automatiser les Mises à Jour :
- Mettre en place des outils d'intégration continue (CI) pour surveiller les nouvelles versions des bibliothèques utilisées, et faciliter leur mise à jour régulière.
- Utiliser des outils comme
Dependabot
ouRenovate
pour automatiser les mises à jour de dépendances dans les pipelines CI/CD.
-
Audit Régulier de Sécurité :
- Mettre en place des audits de sécurité réguliers pour les dépendances, en utilisant des outils comme
OWASP Dependency-Check
ouSnyk
, pour détecter et remédier rapidement aux vulnérabilités dans les bibliothèques tierces.
- Mettre en place des audits de sécurité réguliers pour les dépendances, en utilisant des outils comme
Conséquences
- Réduction de la Maintenance : En centralisant le code et en supprimant les duplications, la maintenance du code sera simplifiée, réduisant les risques d'incohérence et les efforts de mise à jour.
- Amélioration de la Sécurité : Remplacer les bibliothèques non maintenues par des alternatives modernes et maintenues améliorera la sécurité du projet.
- Facilitation des Mises à Jour : Automatiser les mises à jour des dépendances assurera que le projet reste à jour avec les dernières versions et correctifs de sécurité des bibliothèques utilisées.
- Risques de Régression : Le remplacement des dépendances et la centralisation du code pourraient entraîner des régressions. Il sera nécessaire de mettre en place des tests approfondis pour minimiser ces risques.
Étapes Suivantes
- Cartographie du Code Dupliqué : Faire un audit complet pour identifier toutes les instances de code dupliqué.
- Sélection de Nouvelles Bibliothèques : Comparer les alternatives modernes aux bibliothèques obsolètes et choisir celles qui s'intègrent le mieux avec la pile technologique actuelle.
- Refactorisation du Code : Commencer le processus de refactorisation pour remplacer le code dupliqué et les dépendances obsolètes.
- Tests et Validation : Tester les changements de manière exhaustive pour s'assurer qu'il n'y a pas de régressions.
- Déploiement Progressif : Mettre en œuvre les changements de manière incrémentale pour minimiser l'impact sur les utilisateurs finaux.
Conclusion
Cette décision vise à réduire la dette technique, améliorer la sécurité, et faciliter la maintenance du projet Open ENT NG en éliminant le code dupliqué et en remplaçant les dépendances obsolètes par des alternatives modernes et maintenues.