18 KiB
18 KiB
Liste des tâches pour le module d'intégration UniFi
Ce document détaille les tâches à accomplir pour atteindre les objectifs définis dans le fichier objectifs.md, en commençant par le refactoring des modèles.
1. Refactoring des modèles (udm_ → unifi_)
1.1 Modèle principal : Site
- Créer le nouveau modèle
unifi.sitebasé surudm.site - Ajouter le champ
api_typepour distinguer Site Manager et Controller - Ajouter les champs spécifiques à l'API Site Manager (api_key, mfa_enabled, etc.)
- Ajouter les champs spécifiques à l'API Controller (host, port, controller_type, etc.)
- Implémenter les méthodes abstraites d'authentification pour les deux types d'API
- Mettre à jour les relations avec les autres modèles
- Créer des vues adaptées au nouveau modèle
- Refactoriser le modèle
unifi.siteen trois fichiers distincts :unifi_site.py: code commun aux deux types d'APIunifi_site_controller.py: code spécifique à l'API Controllerunifi_site_manager.py: code spécifique à l'API Site Manager
- Implémenter les méthodes de délégation dans le modèle principal pour la validation et le nettoyage des champs
- Implémenter les méthodes
_check_required_fieldset_clear_irrelevant_fieldsdans les modèles spécifiques
1.2 Modèle : Authentification et Session
- Créer le modèle
unifi.auth.sessionpour gérer les sessions d'authentification - Implémenter les méthodes de validation et rafraîchissement des sessions
- Corriger les erreurs de lint (imports inutilisés, méthodes abstraites)
- Créer le modèle transitoire
unifi.mfapour l'authentification à deux facteurs - Intégrer le modèle MFA avec le flux d'authentification
1.2.1 Modèles de support
- Créer le modèle
unifi.api.logpour journaliser les appels API - Créer le modèle
unifi.sync.jobpour gérer les tâches de synchronisation - Créer les vues pour ces modèles de support
- Corriger les erreurs de lint (champs manquants, méthodes référencées dans les vues)
- Ajouter les champs
start_timeetend_timeau modèleunifi.api.log - Ajouter les champs
api_type,statusetmessageau modèleunifi.sync.job - Ajouter les attributs
verify_sslet_nameaux classesUnifiSiteControlleretUnifiSiteManager - Corriger l'erreur "Statement seems to have no effect" dans le fichier
__manifest__.py - Améliorer la gestion des exceptions dans la méthode de test de connexion
- Corriger les erreurs de lint restantes concernant les attributs
verify_ssletapi_type - Corriger les erreurs de lint dans le modèle
unifi.api.log(imports inutilisés, méthodes abstraites) - Remplacer l'exception générale
Exceptionpar des types d'exceptions spécifiques - Corriger les erreurs de lint concernant l'accès aux méthodes
get_network_dataetget_vlan_data - Corriger les erreurs "Could not find model" pour les modèles
unifi.site.controlleretunifi.site.manager - Résoudre le problème de duplication de la méthode
get_vlan_datadans le modèleunifi.site
- Ajouter les champs
1.3 Modèle : Device (Appareil)
- Créer le nouveau modèle
unifi.devicebasé surudm.device - Ajouter les champs spécifiques (mac_address, ip_address, model, device_type, etc.)
- Implémenter les méthodes de base pour la création et mise à jour des appareils
- Créer des vues adaptées au nouveau modèle (tree, form, search)
- Implémenter la méthode
get_device_datadans les modèlesunifi.site.controlleretunifi.site.manager - Ajouter la relation
device_idsau modèleunifi.site
1.4 Modèle : Network (Réseau)
- Créer le nouveau modèle
unifi.networkbasé surudm.network - Ajouter les champs spécifiques à chaque type d'API
- Implémenter les méthodes de synchronisation pour les deux types d'API
- Mettre à jour les relations avec les autres modèles
- Créer des vues adaptées au nouveau modèle
- Implémenter la méthode
get_network_datadans les modèlesunifi.site.controlleretunifi.site.manager
1.5 Modèle : VLAN
- Créer le nouveau modèle
unifi.vlanbasé surudm.vlan - Ajouter les champs spécifiques à chaque type d'API
- Implémenter les méthodes de synchronisation pour les deux types d'API
- Mettre à jour les relations avec les autres modèles
- Créer des vues adaptées au nouveau modèle
- Implémenter la méthode
get_vlan_datadans les modèlesunifi.site.controlleretunifi.site.manager
1.6 Modèle : User (Utilisateur)
- Créer le nouveau modèle
unifi.userbasé surudm.user - Ajouter les champs spécifiques à chaque type d'API
- Implémenter les méthodes de synchronisation pour les deux types d'API
- Mettre à jour les relations avec les autres modèles
- Créer des vues adaptées au nouveau modèle
- Implémenter la méthode
get_user_datadans les modèlesunifi.site.controlleretunifi.site.manager
1.7 Modèle : Firewall (Pare-feu)
- Créer le nouveau modèle
unifi.firewall.rulebasé surudm.firewall.rule - Ajouter les champs spécifiques à chaque type d'API
- Implémenter les méthodes de synchronisation pour les deux types d'API
- Mettre à jour les relations avec les autres modèles
- Créer des vues adaptées au nouveau modèle
- Implémenter la méthode
get_firewall_datadans les modèlesunifi.site.controlleretunifi.site.manager
1.8 Modèle : Port Forward (Redirection de port)
- Créer le nouveau modèle
unifi.port_forwardbasé surudm.port_forward - Ajouter les champs spécifiques à chaque type d'API
- Implémenter les méthodes de synchronisation pour les deux types d'API
- Améliorer l'interface utilisateur pour la gestion des redirections
- Ajouter des validations pour éviter les configurations incorrectes
- Mettre à jour les relations avec les autres modèles
- Créer des vues adaptées au nouveau modèle
- Implémenter la méthode
get_port_forward_datadans les modèlesunifi.site.controlleretunifi.site.manager
1.9 Modèles de configuration et système
- Créer le nouveau modèle
unifi.system_infobasé surudm.system_info - Implémenter la méthode
get_system_info_datadans les modèlesunifi.site.controlleretunifi.site.manager - Créer le nouveau modèle
unifi.dnsbasé surudm.dns - Créer le nouveau modèle
unifi.dns_configbasé surudm.dns_config - Créer le nouveau modèle
unifi.routingbasé surudm.routing - Créer le nouveau modèle
unifi.routing_configbasé surudm.routing_config
1.10 Modèles de support
- Créer le modèle
unifi.api.configpour stocker les configurations API - Créer le modèle
unifi.api.logpour la journalisation des appels API - Créer le modèle
unifi.sync.jobpour gérer les tâches de synchronisation - Résoudre les problèmes d'accès aux attributs dans les classes héritées (verify_ssl, api_type, name, etc.)
2. Amélioration de l'assistant d'ajout de site
2.1 Refactorisation de l'assistant existant
- Créer le nouveau modèle
unifi.site.import.wizardbasé surudm.site.import.wizard - Restructurer l'assistant pour supporter plusieurs étapes
- Implémenter un système de navigation entre les étapes (précédent/suivant)
- Ajouter un état pour suivre la progression dans l'assistant
2.2 Ajout du choix du type d'API
- Créer une vue pour le choix du type d'API (Site Manager ou Controller)
- Implémenter la logique de branchement en fonction du choix de l'API
- Ajouter des descriptions et aides contextuelles pour guider l'utilisateur
2.3 Modèle de découverte de sites
- Créer le modèle transitoire
unifi.site.discoverypour la découverte de sites - Implémenter les méthodes de découverte pour les deux types d'API
- Créer une interface pour afficher et sélectionner les sites disponibles
3. Implémentation des API
3.1 API Controller (locale)
- Implémenter la logique d'authentification pour les contrôleurs UniFi
- Adapter les endpoints API en fonction du type de contrôleur sélectionné
- Implémenter la logique de validation spécifique à chaque type de contrôleur
- Créer des classes utilitaires pour les appels API communs
- Implémenter la gestion des erreurs et des timeouts
- Intégrer la logique API directement dans le modèle unifi.site.controller
- Ajouter la journalisation des appels API dans unifi.api.log
- Implémenter la gestion des cookies de session et des tokens CSRF
- Implémenter les méthodes de synchronisation des données dans unifi.site
- Corriger les erreurs de lint dans les méthodes de synchronisation
- Implémenter la gestion des certificats auto-signés
- Ajouter des tests unitaires pour les méthodes API
3.2 API Site Manager (distante)
- Implémenter l'interface d'authentification à l'API Site Manager
- Développer le processus d'obtention et de validation d'une clé API
- Implémenter la gestion de l'authentification à deux facteurs
- Créer des classes utilitaires pour les appels API communs
- Implémenter la gestion des erreurs et des limites de taux
- Implémenter la méthode test_connection pour vérifier la connexion à l'API Site Manager
- Implémenter la méthode _make_request pour effectuer des requêtes HTTP vers l'API Site Manager
4. Synchronisation et gestion des données
4.1 Synchronisation automatique
- Implémenter un mécanisme de synchronisation périodique (cron)
- Ajouter des options de configuration pour la fréquence de synchronisation
- Développer une logique de synchronisation incrémentielle pour optimiser les performances
- Créer des journaux détaillés des opérations de synchronisation
- Implémenter les méthodes _sync_controller et _sync_site_manager dans le modèle unifi.site
4.2 Gestion des erreurs et notifications
- Implémenter un système robuste de gestion des erreurs
- Créer des notifications pour les événements importants (déconnexion, échec de synchronisation)
- Ajouter des alertes configurables basées sur les données UniFi
- Développer un tableau de bord pour visualiser l'état des connexions
4.3 Historique et comparaison des configurations
- Implémenter un système de versionnement des configurations
- Créer une interface pour comparer les configurations dans le temps
- Ajouter la possibilité de restaurer
5. Nettoyage du code
5.1 Suppression des anciens modèles
- Supprimer les importations des modèles
udm_*dans le fichier__init__.py - Supprimer le champ
settings_iddu modèleunifi.site - Supprimer les fichiers de vues
udm_*.xml - Renommer le fichier de sécurité
udm_pro_security.xmlenunifi_security.xml - Mettre à jour le fichier
__manifest__.pypour refléter ces changements - Supprimer les fichiers des modèles
udm_*.py
5.2 À nettoyer
- Mettre à jour le contrôleur principal (
controllers/main.py) qui fait encore référence aux anciens modèles- Corriger les références à
host,username,passwordetportpour les récupérer depuis le modèleunifi.site.controllerau lieu deunifi.site - Remplacer la méthode
import_configurationqui n'existe plus par une création directe d'enregistrementsunifi.siteetunifi.site.controller
- Corriger les références à
- Renommer les groupes de sécurité qui conservent encore les anciens noms (
group_udm_pro_useretgroup_udm_pro_manager)- Mise à jour des références dans le fichier
unifi_menu_views.xml - Mise à jour des références dans le fichier
ir.model.access.csv - Vérification que le contrôleur principal utilise déjà les nouveaux noms de groupes
- Mise à jour des références dans le fichier
- Corriger l'erreur de lint dans le fichier
unifi_site_manager.pyconcernant la variableapi_logqui est peut-être indépendante - Corriger les erreurs de lint dans le fichier
unifi_site_controller.pyconcernant les variablesauth_api_logetlogout_api_logqui sont peut-être indépendantes - Vérifier et corriger les autres références aux anciens modèles dans d'autres parties du code
- Mettre à jour les références textuelles à "UDM Pro" par "UniFi" dans les templates pour maintenir la cohérence avec les autres changements
6. Interface utilisateur et expérience utilisateur
6.1 Implémentation de boutons d'action OWL dans les vues liste (Odoo 18.0)
Odoo 18.0 a introduit plusieurs changements dans la façon dont les composants OWL et les vues personnalisées sont implémentés. Voici les étapes à suivre pour ajouter un bouton d'action personnalisé dans une vue liste :
6.1.1 Structure de fichiers
- Créer un répertoire pour le composant dans
static/src/components/ - Créer un fichier JavaScript pour le composant du bouton
- Créer un fichier XML pour le template du bouton
6.1.2 Implémentation du composant
- Créer un composant OWL qui utilise le hook
useServicepour accéder au service d'action - Implémenter la méthode pour déclencher l'action d'importation
- Enregistrer le composant dans le registre des composants avec
registry.category("components").add()
6.1.3 Définition du template XML
- Créer un template pour le bouton avec les attributs appropriés
- Lier le bouton à la méthode du composant avec
t-on-click
6.1.4 Configuration dans le manifeste
- Déclarer les assets dans la section
'assets'du fichier__manifest__.py - Spécifier les fichiers JavaScript et XML dans la clé
'web.assets_backend'
6.1.5 Configuration de la vue XML
- Ajouter le composant directement dans la vue liste en utilisant la balise appropriée
- S'assurer que le composant est correctement référencé dans la vue
6.2 Amélioration des vues
- Optimiser les vues existantes pour une meilleure ergonomie
- Créer des vues spécifiques pour les différents types de contrôleurs
- Ajouter des filtres et regroupements pertinents pour faciliter la navigation
- Implémenter des actions contextuelles pour les opérations courantes
6.2 Tableau de bord
- Développer un tableau de bord complet avec les métriques importantes
- Implémenter des graphiques pour visualiser les tendances
- Ajouter des indicateurs de performance et d'état
- Créer des vues personnalisables selon les besoins de l'utilisateur
7. Documentation et tests
7.1 Documentation utilisateur
- Créer un guide d'installation détaillé
- Rédiger un manuel utilisateur complet
- Ajouter des tutoriels pour les cas d'utilisation courants
- Documenter les API et les modèles pour les développeurs
7.2 Tests automatisés
- Développer des tests unitaires pour les fonctionnalités clés
- Implémenter des tests d'intégration pour les flux complets
- Créer des scénarios de test pour les différentes configurations
- Mettre en place un système d'intégration continue
- Tester les méthodes de synchronisation avec des données réelles
8. Nettoyage et finalisation
8.1 Nettoyage du code
- Supprimer les anciens modèles udm_* une fois la migration terminée
- Nettoyer les imports inutilisés et optimiser les dépendances
- Standardiser les noms de variables et les commentaires
- Corriger les erreurs de lint dans les méthodes de synchronisation
- Corriger les erreurs de lint concernant les modèles unifi.dashboard.metric et unifi.dashboard.stat
- Remplacer l'utilisation de
datetime.now()parfields.Datetime.now()dans unifi_dashboard_stat.py - Supprimer les méthodes
createetwritequi n'implémentent pas de logique spécifique
- Remplacer l'utilisation de
- Mettre à jour le contrôleur principal (controllers/main.py) qui fait encore référence aux anciens modèles
- Corriger les références à
host,username,passwordetportpour les récupérer depuis le modèleunifi.site.controller - Remplacer la méthode
import_configurationqui n'existe plus par une création directe d'enregistrements
- Corriger les références à
- Renommer les groupes de sécurité (group_udm_pro_user et group_udm_pro_manager)
- Mise à jour des références dans le fichier
unifi_menu_views.xml
- Mise à jour des références dans le fichier
- Corriger l'erreur de lint dans unifi_site_manager.py concernant la variable api_log
- Corriger les erreurs dans le fichier ir.model.access.csv
- Mettre à jour les vues XML pour refléter la nouvelle structure des modèles
- Commenter temporairement les sections des vues qui font référence aux champs déplacés
- Créer de nouvelles vues pour les modèles unifi.site.controller et unifi.site.manager
- Mettre à jour les vues existantes pour utiliser les nouveaux modèles
- Corriger l'action action_import_unifi_site
- Modifier la référence dans le bouton pour utiliser l'ID externe complet
- Commenter temporairement le bouton d'importation pour permettre l'installation du module
- Créer une nouvelle action pour l'importation de sites qui utilise le wizard unifi.site.import.wizard
- Mise à jour des références dans le fichier
ir.model.access.csv
- Nettoyer complètement le fichier
ir.model.access.csv- Supprimer toutes les références aux anciens modèles
udm_* - Ajouter les droits d'accès pour les modèles
unifi.dashboard.metricetunifi.dashboard.stat
- Supprimer toutes les références aux anciens modèles
- Mettre à jour les références textuelles à "UDM Pro" par "UniFi" dans les templates
8.2 Tests et validation
- Créer des tests unitaires pour tous les modèles
- Implémenter des tests d'intégration pour les flux principaux
- Valider la compatibilité avec différentes versions d'Odoo
- Tester avec différentes versions de contrôleurs UniFi
9. Déploiement et maintenance
9.1 Préparation pour la production
- Optimiser les performances pour les environnements de production
- Sécuriser toutes les communications et le stockage des données sensibles
- Implémenter des mécanismes de sauvegarde et restauration
- Créer des scripts de migration pour les mises à jour futures
9.2 Support et maintenance
- Établir un processus de suivi des problèmes
- Créer un système de mise à jour pour suivre les évolutions des API UniFi
- Documenter les procédures de dépannage courants
- Préparer des plans de maintenance préventive