Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente | |||
|
dyna:dyna2-specifications [2018/01/15 14:31] terrisse-po effacée |
— (Version actuelle) | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | Spécifications de Dyna2. | ||
| - | | Auteurs | Pierre-Olivier TERRISSE Pierre-Olivier.Terrisse@univ-nantes.fr \\ Laurence GUITTET Laurence.Guittet@univ-nantes.fr \\ Nicolas COSTES Nicolas.Costes@univ-nantes.fr | | ||
| - | ====== 1. Contexte ====== | ||
| - | Entièrement codé en langage Java, Dyna est le méta-annuaire de l' | ||
| - | Techniquement, | ||
| - | Afin de comprendre de manière plus approfondie le fonctionnement de Dyna 1, se reporter au document " | ||
| - | Le projet, démarré fin 2001, avait pour but de mettre en place un annuaire LDAP. A l' | ||
| - | Puis, des besoins liées à l' | ||
| - | Ensuite, le projet Gromel a rendu nécessaire la gestion des attributs spécifiques à la messagerie. Les comptes des utilisateurs sont devenus modulaires, avec des dossiers optionnels. En aval, les réplicateurs se sont multipliés : | ||
| - | * Annuaire LDAP au format SUPANN du CRU (supann.univ-nantes.fr) ; | ||
| - | * Annuaires LDAP de POLYTECH' | ||
| - | * Annuaire de contact sans mot de passe en plus de l' | ||
| - | En 2005, les sources de données se sont diversifiées afin de répondre à des projets nouveaux : | ||
| - | * Gromel des étudiants ; | ||
| - | * Authentification et synchronisation d' | ||
| - | Les projets en cours amèneront de nouvelles fonctionnalités : | ||
| - | * Espace de stockage ; | ||
| - | * Projet lié à UVPL (service d' | ||
| - | * Multiplication des annuaires LDAP de composantes et d' | ||
| - | |||
| - | Dyna gère à présent plus de 400 groupes liés à la messagerie et environ 43000 comptes de personnes (personnels, | ||
| - | Son code source contient 33700 lignes de java directement liées au méta-annuaire et 32200 lignes codant les services génériques (cache, pool de connexions, etc), soit un total de près de 66000 lignes. | ||
| - | Le schéma suivant représente Dyna tel qu'il est paramétré actuellement. | ||
| - | |||
| - | {{ dyna: | ||
| - | |||
| - | ====== 2. Limites de l' | ||
| - | ===== 2.1 La présentation et la logique applicative s' | ||
| - | Les classes de Dyna se répartissent en deux parties : | ||
| - | * les classes " | ||
| - | * les classes " | ||
| - | La principale difficulté rencontrée avec Dyna est que ces deux types de classes s' | ||
| - | Dans ce domaine, il est possible d' | ||
| - | Un autre inconvénient de cette architecture est de nécessiter le déploiement d' | ||
| - | Séparer le serveur web du moteur de méta-annuaire permettrait de clarifier et de sécuriser l' | ||
| - | |||
| - | =====2.2 La réplication est séquentielle | ||
| - | La réplication des entrées ajoutées, modifiée ou supprimée est assurée de manière asynchrone par un ordonnanceur qui traite les demandes de manière séquentielle et par ordre de priorité d' | ||
| - | Afin d' | ||
| - | - paralléliser la réplication en gérant les dépendances et en distribuant la charge sur plusieurs tâches ; | ||
| - | - gérer le réordonnancement des entrées dépendantes, | ||
| - | - améliorer la tolérance aux annuaires LDAP défaillants, | ||
| - | - améliorer la journalisation et mettre en place un mécanisme de remontées d' | ||
| - | |||
| - | ===== 2.3 La reconstruction dynamique des groupes pourrait être optimisée | ||
| - | Dans Dyna 1, lorsqu' | ||
| - | |||
| - | ===== 2.4 La mise en place de nouveaux dossiers associés aux entrées est lourde ===== | ||
| - | Dans Dyna, chaque personne peut optionnellement posséder un ou plusieurs dossiers additionnels tels que la messagerie, les permissions, | ||
| - | |||
| - | ===== 2.5 Les classes de tests unitaires ne sont pas systématiquement développées ===== | ||
| - | Chaque classe, chaque fonctionnalité, | ||
| - | |||
| - | ===== 2.6 Il y a des branches mortes à supprimer ===== | ||
| - | Les fonctionnalités suivantes ne servent plus ou sont trop peu utilisées dans Dyna1 pour que leur reprise dans Dyna2 soit justifiée : | ||
| - | - les annuaires privés servaient de carnet d' | ||
| - | - les dénominations permettaient de classifier les structures avec un niveau minimum et un niveau maximum. | ||
| - | - il était possible d' | ||
| - | |||
| - | ====== 3. Proposition d'une nouvelle architecture ====== | ||
| - | ===== 3.1. Interfaces ===== | ||
| - | Suite aux problèmes évoqués au §2.1, nous proposons une architecture quatre tiers : | ||
| - | - client navigateur (comme actuellement), | ||
| - | - serveur web applicatif : Servlet java mais on pourrait éventuellement utiliser un autre langage comme PHP, | ||
| - | - moteur de méta-annuaire codé en Java s' | ||
| - | - base de donnée s' | ||
| - | |||
| - | Les interfaces sont les suivantes : | ||
| - | - entre 1 et 2 : HTTP/HTTPS, comme actuellement. | ||
| - | - entre 2 et 3 : nouvelle interface ! Le choix est large : on pourrait utiliser RMI, les EJB, Corba, SOAP, ou bien XML-RPC. | ||
| - | - entre 3 et 4 : Mysql sur l'API JDBC, comme actuellement. Voir éventuellement l' | ||
| - | Le choix préconisé est XML-RPC, en utilisant le moteur fourni par Apache. Voir le site http:// | ||
| - | XML-RPC permet d' | ||
| - | |||
| - | Sécurisation des flux XML-RPC : il existe trois possibilités que l'on peut employer de manière indépendante : | ||
| - | * TLS (mais il n'est pas sûr qu'il soit possible de baser l' | ||
| - | * mode " | ||
| - | * authentification par identifiant et mot de passe. | ||
| - | |||
| - | Ceci afin d' | ||
| - | |||
| - | Choix d'une API LDAP. Comme le moteur Dyna est écrit en java, on a le choix entre les trois APIs suivantes : | ||
| - | - LDAPJDK de Netscape. Cette API présente l' | ||
| - | * problème d' | ||
| - | * elle n'est plus maintenue depuis la dispartition de Netscape. | ||
| - | - JLDAP de Novell. Cette API est un peu plus complexe que celle de Netscape, mais elle présente plus de fonctionnalités (LDAP asynchrone, manipulation d' | ||
| - | - JNDI de Sun. Cette API est multi-standard : elle gère aussi bien l' | ||
| - | |||
| - | Le meilleur compromis complexité / fonctionnalités nous semble être l'API JLDAP de Novell. Il faut cependant assumer le coût de la migration. | ||
| - | |||
| - | |||
| - | ===== 3.2. Flux dans Dyna2 ===== | ||
| - | |||
| - | {{dyna: | ||
| - | |||
| - | ===== 3.3 Classes d' | ||
| - | ==== 3.3.1. Un requêteur ==== | ||
| - | Un requêteur est un ensemble d' | ||
| - | |||
| - | ==== 3.3.2. Un annuaire ==== | ||
| - | Un annuaire est un conteneur d' | ||
| - | Un annuaire contenant des entrées ne peut pas être supprimé. | ||
| - | |||
| - | Il faut être administrateur de Dyna pour ajouter ou supprimer un annuaire, ou en modifier la configuration | ||
| - | |||
| - | ==== 3.3.3. Un filtre d' | ||
| - | |||
| - | Un filtre d' | ||
| - | |||
| - | Chaque filtre possède des méthodes à implémenter : | ||
| - | |||
| - | * méthodes exécutées pour initialiser les entrées à leur création, ou avant leur modification ; | ||
| - | * méthodes exécutées afin de contrôler les entrées avant leur création ou leur modification. Ces méthodes peuvent interrompre le processus de mise à jour du référentiel et de propagation dans les réplicateurs si on détecte des valeurs inacceptables ; | ||
| - | * méthodes exécutées après la modification du référentiel (création, modification, | ||
| - | Remarque : dans Dyna1, il n'y a qu'un seul filtre par annuaire. Autoriser le passage successif de plusieurs filtres permettra de rendre ceux-ci plus simples. \\ | ||
| - | Dyna possède des filtres standards qui s' | ||
| - | |||
| - | Les filtres standards actuels ou à développer sont les suivants : | ||
| - | |||
| - | ^ Nom du filtre ^ Description ^ Dans Dyna1 ^ | ||
| - | | FiltreAnnuaireDefaut | ||
| - | | FiltreAuth | Filtre garantissant que toute personne a un dossier d' | ||
| - | |||
| - | Il est possible de développer des filtres spécifiques et de les intégrer dans le moteur de Dyna. Exemple de filtre spécifique : tout étudiant doit dès sa création posséder un dossier de messagerie dont l' | ||
| - | |||
| - | Les filtres spécifiques évitent d' | ||
| - | |||
| - | Les filtres spécifiques actuels ou à développer sont les suivants : | ||
| - | |||
| - | ^ Nom du filtre ^ Description ^ Dans Dyna1 ^ | ||
| - | | FiltreAnnuPublicUnivNantes | Filtre utilisé pour l' | ||
| - | | FiltreAnnuaireEtudiantsUnivNantes | Filtre utilisé pour l' | ||
| - | | FiltreMailPrioritaire | Ce filtre garantit que l' | ||
| - | | FiltreEtatNormal | Ce filtre garantit que les personnes sont à l' | ||
| - | |||
| - | ==== 3.3.4. Une entrée ==== | ||
| - | Une entrée est un objet contenu dans un annuaire. Une entrée appartient à tout moment à un annuaire unique, mais celui-ci peut changer au cours du temps. Dyna doit à tout changement dans son référentiel vérifier l' | ||
| - | Une entrée possède : | ||
| - | * une fiche principale, contenant les informations obligatoirement présentes pour cette entrée. Par exemple, le nom pour une personne. | ||
| - | * optionnellement un ou plusieurs dossiers additionnels, | ||
| - | Une entrée est un objet qui peut éventuellement être répliquée par un réplicateur. Tous les réplicateurs ne savent pas répliquer toutes les entrées mais potentiellement toute entrée peut être répliquée. | ||
| - | |||
| - | Les entrées de Dyna se répartissent en trois catégories : les personnes, les structures et les groupes. | ||
| - | |||
| - | Une entrée se caractérise par un état, parmi les suivants : | ||
| - | * état normal (par défaut) ; | ||
| - | * état logiquement supprimé : l' | ||
| - | * état liste rouge : les conditions de visibilité sont les mêmes que celles de l' | ||
| - | * état en attente de validation : cet état caractérise les entrées importées automatiquement et pour lesquelle il existe un doute sur leur validité. Par exemple, en cas de doublon sur le nom et le prénom. Les conditions de visibilité sont les mêmes que celles de l' | ||
| - | Touts les annuaires n' | ||
| - | |||
| - | Une entrée est un objet contrôlable : elle implémente l' | ||
| - | |||
| - | Une entrée peut de plus détenir une adresse de messagerie, et un dossier de messagerie : auquel cas, elle implémente l' | ||
| - | |||
| - | ==== 3.3.5. Une personne ==== | ||
| - | Une personne représente un compte individuel. | ||
| - | === 3.3.5.1. Personnes physiques, entrées génériques === | ||
| - | Les personnes peuvent être des personnes physiques ou des entrées génériques, | ||
| - | === 3.3.5.2. Identifiant unique des personnes === | ||
| - | Outre son numéro unique qui l' | ||
| - | === 3.3.5.3. Attributs === | ||
| - | Les personnes possèdent des attributs que l'on retrouve dans tous les annuaires, comme le nom et le numéro de téléphone. Ce sont les attributs obligatoires. | ||
| - | Les personnes peuvent en outre posséder des attributs supplémentaires en fonction de leur annuaire d' | ||
| - | Pour chaque attribut, obligatoire ou supplémentaire, | ||
| - | * nom court : utilisé pour les échanges en XML ; | ||
| - | * nom complet : utilisé pour l' | ||
| - | * visibilité : indique si l' | ||
| - | * confidentialité : indique si l' | ||
| - | * modification : indique si l' | ||
| - | * syntaxe : conditionne les valeurs autorisées ; | ||
| - | * valeurs_permises : ensemble des valeurs autorisées suivant la syntaxe (voir le tableau suivant) ; | ||
| - | * types_personnes : indique si l' | ||
| - | * ordre : ordre d' | ||
| - | * alignement : alignement de l' | ||
| - | * limitation_annuaires_supportés (booléen) : si vrai, alors cet attribut n'est supporté que par certains annuaires, si faux, il est supporté par tous les annuaires ; | ||
| - | * listes_annuaires_supportes : liste des annuaires supportés ; | ||
| - | * nom_ldap : nom de l' | ||
| - | * ldap_fige (booléen) : si vrai, alors on ne peut pas changer son nom_ldap. | ||
| - | |||
| - | == 3.3.5.3.1. Tableau des syntaxes des attributs == | ||
| - | Le tableau suivant indique la liste des syntaxes qu'il est possible d' | ||
| - | |||
| - | ^ Syntaxe ^ Signification ^ Contraintes ^ | ||
| - | | Texte | texte libre | nombre minimum et maximum de caractères | | ||
| - | | Téléphone | numéro de téléphone | aucune | | ||
| - | | Mail | adresse de messagerie | aucune | ||
| - | | Date | date du calendrier | dates minimum et maximum | | ||
| - | | Discret | prend une valeur possible parmi un ensemble prédéfini | ensemble fermé de valeurs possibles | | ||
| - | | Organisation | prend une valeur parmi les organisations | annuaires où trouver ces organisations | | ||
| - | | Site | prend une valeur parmi les sites | annuaires où trouver ces sites | | ||
| - | | Activité| prend une valeur parmi les activités | annuaires où trouver ces activités | | ||
| - | | Groupe | prend une valeur parmi les groupes auxquels appartient la personne | aucune | | ||
| - | |||
| - | == 3.3.5.3.2. Les attributs obligatoires == | ||
| - | Les attributs obligatoires que l'on gère pour une personne sont les suivants : | ||
| - | ^ Attribut ^ Nom court ^ Commentaire ^ | ||
| - | | nom | nom | Commun à tous les éléments de Dyna. \\ Toujours stocké en majuscules. | | ||
| - | | nom2 | nom2 | Autre nom sous lequel la personne est connue \\ Toujours stocké en majuscules. | | ||
| - | | prénom | prenom | Toujours stocké avec les initiales en majuscules. \\ Sans objet pour les entrées génériques. | | ||
| - | | prénom2 | prenom2 | Autre prénom sous lequel la personne est connue. \\ Toujours stocké avec les initiales en majuscules. \\ Sans objet pour les entrées génériques. | | ||
| - | | civilité | civilite | Mme, Mlle, ou M. \\ Sans objet pour les entrées génériques. | | ||
| - | | groupe principal | gr_princ | Groupe principal de la personne. \\ Cet attribut peut être vide. | | ||
| - | | mail | mail | Adresse principale de la messagerie. \\ Ce champ peut être éventuellement utilisé pour stocker des e-mails secondaires, | ||
| - | | téléphone | tel | Numéro(s) de téléphone de la personne, séparés par des caractères tiret lorsqu' | ||
| - | | fax | fax | Numéro(s) de télécopie de la personne, séparés par des caractères tiret lorsqu' | ||
| - | | bureau | bureau | Bureau de la personne (texte libre). | | ||
| - | | responsable | resp | Identité du responsable explicite de la personne, en dehors du cas où le responsable est celui de l' | ||
| - | | organisation principale | org_princ | Organisation dans laquelle la personne travaille principalement. | | ||
| - | | organisations secondaires | orgs_secs | Organisations dans laquelle la personne travaille ( ou est administrativement rattachée ) en plus de l' | ||
| - | | site principal | site_princ | Site sur lequel la personne travaille principalement. | | ||
| - | | sites secondaires | sites_secs | Sites sur laquelle la personne travaille en plus du site principal. | | ||
| - | | activité principale | ac_princ | Activité (projets, rôles, missions...) principale de la personne. | | ||
| - | | activités secondaires | acs_secs | Activités dévolues à la personne en plus de l' | ||
| - | | date d' | ||
| - | | date de départ | dte_dep | Date de départ de la personne : celle-ci ne sera pas visible dans l' | ||
| - | | informations complémentaires | infos_cpl | texte libre que les exploitants Dyna peuvent écrire afin de commenter une fiche personne. | | ||
| - | |||
| - | //Remarque concernant le responsable d'une personne// : toute personne doit avoir, pour autant que cela soit possible, un responsable hiérarchique. L' | ||
| - | - on prend le responsable explicite de la personne si celui-ci est positionné dans la fiche ; | ||
| - | - à défaut on prend le responsable de l' | ||
| - | - à defaut on prend le responsable de l' | ||
| - | - à défaut la personne n'a pas de responsable connu. | ||
| - | Cet algorithme est perfectible dans la mesure où le prend pas en compte ni les organisations secondaires, | ||
| - | |||
| - | == 3.3.5.3.3. Les attributs supplémentaires == | ||
| - | Pour chaque annuaire, on peut ajouter jusqu' | ||
| - | |||
| - | ==== 3.3.6. Une structure ==== | ||
| - | Les structures sont représentées chacune par un arbre dont les noeuds et les feuilles contiennent des personnes et des groupes. Il n' | ||
| - | Pour chaque personne et chaque sorte de structure, on définit la structure principale, et éventuellement une ou plusieurs structures secondaires. \\ | ||
| - | Une structure possède les propriétés suivantes : | ||
| - | * comme tout élément de Dyna, un numéro unique ; | ||
| - | * le nom de la structure, en utilisant les acronymes (exemple : le CRI) ; | ||
| - | * le nom de la structure, en développant les acronymes (exemple : le Centre de Ressources Informatiques) ; | ||
| - | * le numéro de la structure mère, avec 0 pour les structures de premier niveau ; | ||
| - | * le nom complet de la structure, qui est calculé automatiquement par Dyna par concaténation des noms des stuctures mères en partant du premier niveau jusqu' | ||
| - | |||
| - | === 3.3.6.1. Une organisation === | ||
| - | Les organisations sont le reflet de l' | ||
| - | Une organisation possède les propriétés suivantes, en plus de celles qui sont communes aux structures : | ||
| - | * un nom court, qui est utilisé dans certaines circonstance comme lors de la génération automatiques d' | ||
| - | * le numéro unique de la personne qui est reponsable de cette organisation ; | ||
| - | * le numéro unique de la personne qui s' | ||
| - | * un nombre quelquonque de secrétaires parmi les personnes de l' | ||
| - | * un responsable unique. En l' | ||
| - | * un nombre quelconque de responsables adjoints. Une organisation ne peut pas avoir de responsables adjoints sans avoir un responsable principal ; | ||
| - | * le numéro de téléphone du standard de l' | ||
| - | * le numéro de télécopie de l' | ||
| - | * l' | ||
| - | * le numéro unique du site par défaut auquel appartiendront les personnes membres de cette organisation. | ||
| - | |||
| - | Les groupes peuvent posséder un organisation. | ||
| - | Les organisations ont éventuellement un dossier externe, dans la mesure où on effectue une synchronisation sur la base Harpege. | ||
| - | Les notions de secrétaire, | ||
| - | * dir.(nom court de l' | ||
| - | * sec.(nom court de l' | ||
| - | |||
| - | === 3.3.6.2. Un site === | ||
| - | Les sites ont une signification géographique : à chaque site on attribue une adresse postale. Les sites de premier niveau sont généralement des campus ; au second niveau, | ||
| - | on peut avoir des bâtiments, et si on le souhaite on peut pousser plus loin cette décomposition, | ||
| - | Un site possède les propriétés suivantes, en plus de celles qui sont communes aux structures : | ||
| - | * un nom court ; | ||
| - | * une adresse postale ; | ||
| - | * un complément d' | ||
| - | * un code postal ; | ||
| - | * une ville ; | ||
| - | * le numéro de téléphone du standard ; | ||
| - | * le numéro de télécopie du site ; | ||
| - | * l' | ||
| - | |||
| - | === 3.3.6.3. Une activité === | ||
| - | Les activités permettent de classer les personnes en fonction de leurs rôles, projets, fonctions, etc. au sein de l' | ||
| - | Une activité ne possède pas de propriétés autres que celles qui sont communes aux structures. | ||
| - | |||
| - | ==== 3.3.7. Un groupe ==== | ||
| - | Les groupes sont des ensembles informels de personnes définis soit explicitement, | ||
| - | Le contenu des groupes est recalculé dynamiquement lors de toute modification d'une entrée risquant de l' | ||
| - | |||
| - | === 3.3.7.1. Interaction entre l' | ||
| - | Directement ou non, un groupe contient toujours in-fine des personnes. Celles-ci peuvent être automatiquement exclues de leurs groupes si leur état de leur permet pas d'y appartenir : | ||
| - | * état en attente de validation ; | ||
| - | * état logiquement supprimé. | ||
| - | Ainsi, lorsqu' | ||
| - | |||
| - | === 3.3.7.2. Les groupes principaux === | ||
| - | On a la possibilité d' | ||
| - | |||
| - | De même, on peut indiquer qu'un groupe ne peut pas être le groupe principal d'une personne. | ||
| - | |||
| - | === 3.3.7.3. Les groupes mono et multi-annuaire === | ||
| - | Un groupe est multi-annuaires s'il peut contenir des entrées appartenant à différents annuaires, mono-annuaire s'il ne peut contenir que des entrées appartenant au même annuaire que lui. | ||
| - | |||
| - | === 3.3.7.4. Autres fonctionnalités === | ||
| - | Idée à creuser (proposée par Nathalie Vincent) : la notion de groupe basé sur des attributs autres que des structures. Par exemple, un groupe basé sur l' | ||
| - | |||
| - | ==== 3.3.8. Un conteneur et un objet contrôlable ==== | ||
| - | On définit comme un conteneur un objet de Dyna qui peut en contenir d' | ||
| - | On définit comme un objet contrôlable un objet de Dyna sur lequel on peut affecter des permissions à des utilisateurs. Le contrôle peut avoir lieu pour visualiser un objet ou pour le modifier. Un objet contrôlable doit également être en mesure d' | ||
| - | |||
| - | Progammatiquement, | ||
| - | |||
| - | ==== 3.3.9. Un dossier additionnel ==== | ||
| - | Un dossier additionnel est un ensemble d' | ||
| - | Une entrée peut ou non posséder un dossier additionnel selon sa catégorie : | ||
| - | |||
| - | ^ Type de dossier additionnel ^ Personnes ^ Structures ^ Groupes ^ | ||
| - | ^ Authentification | X | | | | ||
| - | ^ Permissions | X | | | | ||
| - | ^ Externe | X | organisations seulement | | | ||
| - | ^ Messagerie | X | | X | | ||
| - | ^ Système | ||
| - | |||
| - | Chaque entrée ne peut posséder au maximum qu'un seul dossier additionnel par type différent. Un dossier ne peut pas être partagé par plusieurs entrées. Par contre, au cours de sa vie certains types de dossiers peuvent être transférés d'une entrée à une autre. | ||
| - | C'est à partir de l' | ||
| - | Lorsqu' | ||
| - | |||
| - | === 3.3.9.1. Dossier d' | ||
| - | Seule une personne peut posséder un dossier d' | ||
| - | Le dossier d' | ||
| - | Ce dossier contient le mot de passe chiffré de toutes les manières (SSHA, MD5, Crypt, etc) demandées par les réplicateurs dépendant de l' | ||
| - | Le dossier d' | ||
| - | |||
| - | === 3.3.9.2. Dossier de permissions === | ||
| - | Seule une personne peut posséder un dossier de permissions. Dans Dyna2, le dossier de permissions est séparé du dossier d' | ||
| - | A toute personne, on peut attribuer des permissions qui peuvent être soit globales (exemple : la permission d' | ||
| - | Les permissions que l'on peut attribuer à une personne sont les suivantes : | ||
| - | ^ Permission ^ Donne le droit de : ^ Lié aux entrées ^ | ||
| - | | ADMIN | administrer totalement Dyna | Non | | ||
| - | | EXPLOIT_ANNUAIRE | exploiter l' | ||
| - | | EXPLOIT_AVANCE_ANNUAIRE | exploiter l' | ||
| - | |||
| - | Remarque concernant la colonne "lié aux entrées" | ||
| - | |||
| - | === 3.3.9.3. Dossier externe === | ||
| - | Lorsqu' | ||
| - | Un dossier externe se compose d'un nombre arbitraire de références externes, chacune liée à une base de données externe. Pour chaque référence externe, on indique : | ||
| - | * l' | ||
| - | * la provenance ; | ||
| - | * la référence sous forme d'une chaine de caractères ; | ||
| - | * la date de création du dossier externe ; | ||
| - | * la date de dernière synchronisation. | ||
| - | On doit pouvoir retrouver les dossiers externes liés à une entrée, et un dossier externe à partir du couple unique provenance - référence. | ||
| - | |||
| - | === 3.3.9.4. Dossier de messagerie === | ||
| - | Dyna1 connaît déjà le dossier de messagerie afin de stocker des informations relatives à la messagerie électronique. Ce sont : | ||
| - | * le répertoire de messagerie, | ||
| - | * le serveur de messagerie, | ||
| - | * les alias | ||
| - | * les adresses de redirection | ||
| - | * le fait que le compte soit en redirection pure, c'est à dire sans délivrance locale des message. Il faut alors que le dossier de messagerie possède au moins une adresse de redirection ; | ||
| - | * la valeur du quota en octets | ||
| - | * l' | ||
| - | On reporte ces mêmes fonctionnalités sur Dyna2. | ||
| - | |||
| - | === 3.3.9.5. Dossier système === | ||
| - | Le dossier système contient les données nécessaires à une personne pour se connecter à un serveur de fichiers. Ces informations seront propagées à travers un réplicateur LDAP. \\ | ||
| - | Les informations manipulées par le dossier système sont les suivantes : | ||
| - | * état du compte (actif ou inactif) ; | ||
| - | * serveur de fichiers ; | ||
| - | * répertoire d' | ||
| - | * quota. | ||
| - | |||
| - | ==== 3.3.10. Un réplicateur ==== | ||
| - | Un réplicateur appartient à un annuaire unique. Il sait comment propager toute mise à jour en aval de Dyna : par exemple, dans un annuaire LDAP, ou bien en exécutant un script, ou bien encore en invoquant le requêteur d'un autre serveur Dyna. Il effectue la journalisation des actions qui lui sont demandées avec une verbosité que l' | ||
| - | |||
| - | === 3.3.10.1. Les différents types de réplicateurs === | ||
| - | Le tableau suivant présente les différents types de réplicateurs présents dans Dyna2. | ||
| - | |||
| - | ^ Type ^ Utilité ^ Commentaires ^ | ||
| - | | LDAP | Répliquer les entrées dans un annuaire LDAP. \\ On utilisera des sous-classes de ce réplicateurs en fonction des besoins, du schéma et du DIT utilisés par le serveur LDAP distant : \\ - annuaires de la messagerie ; \\ - annuaires système ; \\ - annuaires de contact ; \\ - annuaires propre aux différentes composantes (Polytech a déjà ses propres réplicateurs LDAP) | déjà dans Dyna1, mais à faire évoluer. | | ||
| - | | SHELL | Exécuter un shell sur le serveur Dyna (ou un autre serveur via une commande SSH), comportant en paramètre des informations sur l' | ||
| - | | DYNA (XML-RPC) | Répliquer les entrées dans un autre serveur Dyna via un client XML-RPC. | à développer dans Dyna2. | | ||
| - | |||
| - | === 3.3.10.2. Propriétés communes aux réplicateurs === | ||
| - | == 3.3.10.2.1. Types d' | ||
| - | Tout réplicateur ne sait pas forcément répliquer toute entrée quelle que soit son type. Par exemple, certains réplicateurs peuvent savoir répliquer les groupes, d' | ||
| - | == 3.3.10.2.2. Validité d'un réplicateur == | ||
| - | Un réplicateur est valide lorsque sa configuration a été vérifiée. | ||
| - | Lorsqu' | ||
| - | == 3.3.10.2.3. Réplicateur actif / inactif == | ||
| - | L' | ||
| - | == 3.3.10.2.4. Testabilité d'un réplicateur == | ||
| - | Un autre point important est la possibilité de tester le service correspondant à un réplicateur. Tous les réplicateurs ne sont pas nécessairement testables (pour un réplicateur de type SHELL cela n'a pas de sens), mais tous les réplicateurs de type LDAP le sont. | ||
| - | Le résultat d'un test est de type feu vert - feu orange - feu rouge suivant que le service correspondant soit opérationnel, | ||
| - | Un réplicateur peut éventuellement proposer différents tests, plus ou moins poussés. Ce sera notemment le cas des réplicateurs LDAP. | ||
| - | Chaque réplicateur devra donc indiquer dans sa classe la liste des classes de tests possibles. | ||
| - | |||
| - | == 3.3.10.2.5. Réplicateurs de mots de passe == | ||
| - | Certains réplicateurs savent travailler avec les mots de passe des utilisateurs. C'est le cas des annuaires LDAP, comme cela peut être le cas d' | ||
| - | * verifierPwd(String uid,String pwd); (vérifier le mot de passe d'un utilisateur) | ||
| - | * modifierPwd(String uid,String pwd); (modifier le mot de passe d'un utilisateur) | ||
| - | * getNumAlgoChiffrement(); | ||
| - | * doitEncoderPwdSamba(); | ||
| - | // | ||
| - | |||
| - | Le protocole LDAP (RFC 2251) spécifie différentes manières de chiffrer les mots de passe. Il existe cinq algorithmes : | ||
| - | * Crypt (déconseillé mais disponible) ; | ||
| - | * MD5 ; | ||
| - | * SMD5 (MD5 salé) ; | ||
| - | * SHA ; | ||
| - | * SSHA (SHA salé). | ||
| - | Ce sont des algorithmes de chiffrement à sens unique : à partir du texte en clair on gérère le cryptogramme, | ||
| - | |||
| - | A cette liste il faut ajouter les algorithmes de chiffrement pour Samba : le ntPassword et lmPassword. Ceux-ci ne sont pas salés et nécessitent de passer par une commande externe pour les obtenir : mkntpwd. | ||
| - | |||
| - | L' | ||
| - | Le stockage chiffré des mots de passe présente l' | ||
| - | |||
| - | == 3.3.10.2.6. Lancement global d'un réplicateur == | ||
| - | L' | ||
| - | * soit toutes les entrées concernées par ce réplicateur (cette fonctionnalité existe déjà dans Dyna2) ; | ||
| - | * soit les entrées concernant ce réplicateur et appartenant directement ou non à une organisation donnée (nouvelle fonctionnalité). | ||
| - | |||
| - | === 3.3.10.3. Propriétés spécifiques à un réplicateur LDAP === | ||
| - | Les paramètres de configuration d'un réplicateur de type LDAP sont décrits dans les paragraphes suivants. | ||
| - | |||
| - | == 3.3.10.3.1. Paramètres du serveur == | ||
| - | Tout réplicateur LDAP doit connaître le serveur LDAP vers lequel il doit propager les entrées : | ||
| - | * nom DNS du serveur (ou adresse IP) ; | ||
| - | * port LDAP (par défaut, 389 pour LDAP, 636 pour LDAPS) ; | ||
| - | * LDAP ou LDAPS, autrement chiffrement TLS ou non. Si au moins un réplicateur LDAP possède la propriété TLS, il faut intégrer un certificat X.509 à la JVM de Dyna (dans le keystore). | ||
| - | * compte LDAP à utiliser : le DN et le mot de passe. Ce compte doit posséder la permission de modifier l' | ||
| - | * base du DIT ; | ||
| - | * éventuellement la liste des réplicas connus, afin de pouvoir tester la réplication. | ||
| - | |||
| - | == 3.3.10.3.2. Attributs LDAP == | ||
| - | Pour un réplicateur LDAP, il est nécessaire d' | ||
| - | * on ne réplique pas cet attribut dans ce réplicateur ; | ||
| - | * on réplique cet attribut avec son nom et sa syntaxe par défaut, correspondant aux cas les plus courants ; | ||
| - | * on réplique cet attribut sous un nom spécifique, | ||
| - | |||
| - | == 3.3.10.3.3. Le DIT et le DN == | ||
| - | Chaque annuaire LDAP possède sa propre façon de " | ||
| - | L' | ||
| - | Dans ce domaine, il existe deux manières de construire un DIT : | ||
| - | * DIT " | ||
| - | * DIT " | ||
| - | Dyna2 doit savoir gérer les deux types de DIT. Chaque réplicateur LDAP devra donc posséder une méthode getDN(AnnuEntree e) permettant de positionner l' | ||
| - | |||
| - | == 3.3.10.3.4. Les classes LDAP == | ||
| - | Pour chaque type d' | ||
| - | - la classe structurelle des entrées (personnes, groupes, organisations, | ||
| - | - les classes abstraites dont la classe structurelle hérite ; | ||
| - | - les éventuelles classes auxiliaires, | ||
| - | Ces classes doivent être connues du réplicateur, | ||
| - | Le tableau suivant donne la liste des classes LDAP que Dyna devra être capable de répliquer. | ||
| - | |||
| - | ^Type d' | ||
| - | | Personne | utiliseInetOrgPerson \\ utiliseOrganizationalPerson \\ utilisePosixAccount \\ utiliseShadowAccount \\ utiliseSambaAccount \\ utiliseSambaSamAccount \\ utiliseQmailUser | | ||
| - | | Groupes |utilisePosixGroup \\ utiliseGroupOfUniqueNames \\ utiliseGroupOfNames \\ utiliseSambaGroupMapping | | ||
| - | | Organisation | organizationalUnit | | ||
| - | |||
| - | Actuellement il n'est pas prévu qu'un réplicateur LDAP sache répliquer d' | ||
| - | |||
| - | == 3.3.10.3.6. Interrogation directe d'un annuaire LDAP == | ||
| - | Un exploitant de Dyna doit pouvoir vérifier qu'un réplicateur propage correctement les informations concernant une entrée d' | ||
| - | Si la liste des réplicas (slurpd) connus pour cet annuaire LDAP est renseigné dans Dyna, celui-ci doit pouvoir également vérifier que serveur LDAP propage bien les modifications qu'on lui envoie pour cette entrée. Ceci est une nouvelle fonctionnalité de Dyna2. | ||
| - | |||
| - | == 3.3.10.3.7. Tests LDAP plus poussés == | ||
| - | Dyna1 implémente déjà un test simple, consistant à ouvrir puis fermer immédiatement une connexion LDAP vers l' | ||
| - | * comptage du nombre d' | ||
| - | * comparaison globale entre le maître et ses réplicas (slurpd) connus, si ceux-ci ont été renseignés pour ce réplicateur ; | ||
| - | * test des index. La configuration du réplicateur doit alors permettre d' | ||
| - | |||
| - | == 3.3.10.3.8. Le réplicateur LDAP SUPANN == | ||
| - | Le CRU a formé un groupe de travail, [[http:// | ||
| - | L' | ||
| - | Il suffit qu'un annuaire possède un réplicateur de cette classe pour que ses entrées soient répliquées dans une base LDAP conformément au standard SUPANN. | ||
| - | Lorsque SUPANN, actuellement en version 1, évoluera vers sa version 2, il faudra mettre à jour la classe ReplicateurLDAPSupAnn. | ||
| - | |||
| - | == 3.3.10.3.9. Le pool de connexions à l' | ||
| - | Un réplicateur de type LDAP possède son propre pool de connexion au serveur distant, de manière à limiter le nombre de connexions et de déconnexions LDAP, très coûteuses en performances. Lors de chaque demande de réplication, | ||
| - | Ce pool de connexion LDAP utilise un code commun au pool de connexion au SGBD relationnel de Dyna, avec une classe spécifique aux connexion vers un serveur LDAP. | ||
| - | |||
| - | === 3.3.10.5. Propriétés spécifiques à un réplicateur SHELL === | ||
| - | Un réplicateur SHELL exécute un script lors de tout ajout, modification ou suppression d'une entrée. Ce script peut être un programme ssh permettant d' | ||
| - | Lors de l'' | ||
| - | * -a : ajout d'une entrée ; | ||
| - | * -m : modification d'une entrée ; | ||
| - | * -s : suppression d'une entrée. | ||
| - | Puis le réplicateur indique le type d' | ||
| - | * -p : une personne ; | ||
| - | * -g : un groupe ; | ||
| - | * -o : une organisation. | ||
| - | On pourra ajouter d' | ||
| - | L' | ||
| - | -num <numéro unique de l' | ||
| - | Les autres informations indiquées sur la ligne de commande dépendent de l' | ||
| - | -<nom court de l' | ||
| - | Dans le cadre du projet GROMEL les réplicateurs SHELL sont utilisés pour créer les répertoires nécessaires aux comptes de messagerie des utilisateurs. Pour cela, on se connecte en ssh sur les différents serveurs de messagerie. | ||
| - | |||
| - | === 3.3.10.6. Propriétés spécifiques à un réplicateur XML-RPC === | ||
| - | On indique : | ||
| - | * le nom du serveur Dyna situé en aval, vers lequel on propage les demandes de réplication ; | ||
| - | * le port utilisé pour XML-RPC ; | ||
| - | * l' | ||
| - | * si on est en mode de sécurisation par TLS ou non | ||
| - | |||
| - | === 3.3.10.7. Réplicateurs spéciaux === | ||
| - | Lorsque les besoins sont spécifiques et que les réplicateurs standards de Dyna ne suffisent pas, il est possible à l' | ||
| - | Un réplicateur spécial peut appartenir à n' | ||
| - | Une contrainte importante est de devoir intégrer la classe du réplicateur spécial dans la JVM du moteur Dyna, et de redémarrer celui-ci lors de toute modification. | ||
| - | |||
| - | === 3.3.10.8. Statistiques sur les réplicateurs === | ||
| - | Il faut également tenir à jour des statistiques concernant : | ||
| - | - les erreurs de réplication, | ||
| - | - les performances de la réplication, | ||
| - | Ceci est un nouveau développement pour Dyna2. | ||
| - | |||
| - | ==== 3.3.11. L' | ||
| - | L' | ||
| - | |||
| - | === 3.3.11.1. Le ré-ordonnancement dynamique | ||
| - | Toute demande de réplication doit être atomique, c'est à dire n' | ||
| - | Cette ré-ordonnancement dynamique est une nouveauté de Dyna2 : Dyna1 effectue la réplication d'une seule passe quelle que soient les dépendances entre les entrées. Cela présentera l' | ||
| - | |||
| - | === 3.3.11.2. La remontées d' | ||
| - | Une nouveauté de Dyna2 sera la mise en place de remontées d' | ||
| - | * par mail ; | ||
| - | * via une plate forme d' | ||
| - | |||
| - | |||
| - | |||
| - | ==== 3.3.12. Une politique de comptes ==== | ||
| - | Une politique de comptes est un objet associé à un annuaire gérant le cycle de vie des comptes des utilisateurs. Elle permet de spécifier : | ||
| - | * quels contrôles sont à effectuer sur un nouveau mot de passe demandé par un utilisateur. Ces contrôles, chacun implémenté par une classe - un contrôleur de mots de passe - sont indiqués dans la configuration de la politique de compte ; | ||
| - | * le nombre de jours que l'on attend après le départ d'un utilisateur, | ||
| - | * le nombre de jours que l'on attend après le changement du mot de passe, avant d' | ||
| - | * le délai dont dispose l' | ||
| - | Il existe un politique de comptes par défaut, et chaque annuaire peut posséder sa propre politique de comptes qui remplace alors la politique de comptes par défaut. | ||
| - | |||
| - | Il faut natuellement être administrateur de Dyna pour gérer les politiques de comptes. | ||
| - | |||
| - | === 3.3.12.1. Un contrôleur de mots de passe === | ||
| - | |||
| - | Un contrôleur de mots de passe est un objet chargé de vérifier que le nouveau mot de passe que souhaite utiliser une personne est acceptable. Dyna prédéfinit un certain nombre de ces contrôleurs. | ||
| - | Une politique de comptes peut posséder un nombre arbitraire de contrôleurs de mots de passe, qui seront exécutés dans l' | ||
| - | Lorsqu' | ||
| - | |||
| - | Le tableau suivant énumère les contrôleurs standards proposés par Dyna, sachant qu'on peut aisément en développer de nouveaux pour des besoins plus spécifiques. | ||
| - | |||
| - | ^ Nom du contrôleur ^ Classe ^ Description ^ | ||
| - | | Contrôleur simple | ControlePwdSimple | vérifie que le mot passe comporte un nombre minimum de caractères, | ||
| - | | Contrôleur par dictionnaire | ControlePwdDico | vérifie que le mot de passe n' | ||
| - | | Contrôleur de non réutilisation | ControlePwdNonReutil | vérifie que le mot de passe n'est pas réutilisé avant un certain délai que l'on peut paramétrer. | | ||
| - | |||
| - | ==== 3.3.13. Un objet de Dyna ==== | ||
| - | Les entrées d' | ||
| - | * ils sont identifiés par un numéro unique pour leur classe. Ce numéro leur est attribué par le référentiel ; | ||
| - | * ils sont identifiés de manière unique à travers tous les objets Dyna par leur signature. La signature se compose d'une ou plusieurs lettres majuscules identifiant la classe de l' | ||
| - | * ils sont susceptibles d' | ||
| - | |||
| - | ==== 3.3.14. Les interfaces Java de Dyna ==== | ||
| - | Les objets de Dyna peuvent implementer des interfaces afin de signaler qu'ils comportent des caractéristiques supplémentaires. | ||
| - | |||
| - | === 3.3.14.1. Un service de Dyna === | ||
| - | Un service de Dyna est un objet qui a une existence durable en mémoire, qui doit être démarré au démarrage de Dyna et terminé lors de l' | ||
| - | Un service est une interface du nom de DynaService. | ||
| - | |||
| - | === 3.3.14.2. Un élément contrôlable === | ||
| - | Un élément contrôlable est un élément sur lequel Dyna exercera un contrôle d' | ||
| - | Les verbes associés à cette interface sont les suivants : | ||
| - | * public boolean peutEtreVuPar(Personne p) : renvoie vrai si la personne p peut visualiser l' | ||
| - | * public boolean peutEtreModifiePar(Personne p) : renvoie vrai si la personne p peut modifier l' | ||
| - | * public IntSet lnPersonnesHabilitees() : renvoie la liste des numéros uniques des personnes habilitées à modifier l' | ||
| - | On pourrait ajouter une méthode pour obtenir la liste des personnes habilitées à visualiser un objet mais en pratique ce n'est pas utile. | ||
| - | |||
| - | |||
| - | |||
| - | ===== 3.4. La base de données référentielle ===== | ||
| - | Dyna a besoin d'une base de données référentielle, | ||
| - | ==== 3.4.1. Bases de données à créer ==== | ||
| - | Nous avons besoin de deux databases (bases de données indépendantes selon la terminologie MySQL) : | ||
| - | * dyna : tous les objets de Dyna y sont sérialisés indépendamment de l' | ||
| - | * journal : tous les événements stockés par le journal de Dyna. | ||
| - | Nous n' | ||
| - | Seul le moteur de méta-annuaire accède directement à la base de données référentielle. | ||
| - | ==== 3.4.2. Le pool de connexions ==== | ||
| - | Afin d' | ||
| - | Le pool conserve en mémoire un certain nombre de connexions ouvertes. Régulièrement, | ||
| - | Lorsqu' | ||
| - | Cette technique permet de réduire très fortement la charge du serveur de bases de données. | ||
| - | |||
| - | ===== 3.5. Le serveur web Dyna ===== | ||
| - | Le serveur web Dyna aura l' | ||
| - | Il n'est pas indispensable que le serveur web Dyna soit écrit en java comme le moteur Dyna dans la mesure où l'API XML-RPC est disponible dans différents langages, dont PHP, Perl, etc. On choisit le langage PHP, fonctionnant avec le moteur HTTP Apache (Apache1 ou Apache2 : à voir). | ||
| - | Cette séparation aura l' | ||
| - | |||
| - | ===== 3.6. La synchronisation des bases de données en amont ===== | ||
| - | On aura deux types de synchronisation : | ||
| - | ==== 3.6.1. La synchronisation de type PULL ==== | ||
| - | Dans ce schéma, Dyna vient chercher lui-même les informations dont il a besoin en se connectant sur des bases de données en amont. Pour cela, il est nécessaire de passer par un mécanisme de traitements régulés par un ordonnanceur, | ||
| - | |||
| - | L' | ||
| - | Actuellement la synchronisation de la base de données de personnel de l' | ||
| - | |||
| - | ==== 3.6.2. La synchronisation de type PUSH ==== | ||
| - | Dans ce cas, ce sont les bases de données externes qui sollicitent Dyna à chaque fois qu'ils détectent qu'une entrée doit être ajoutée, modifié ou supprimée. Dyna accueille ces requêtes grâce à son requêteur, pouvant être le même objet que celui utilisé par les client web. | ||
| - | L' | ||
| - | Actuellement la synchronisation de la base de données des étudiants de l' | ||
| - | |||
| - | ====== 4. Services fournis par Dyna ====== | ||
| - | Les services seront fournis par le requêteur. Celui-ci aura pour but d' | ||
| - | Concernant les éléments de Dyna en général : | ||
| - | * recherche d'un élément à partir de sa signature. | ||
| - | Concernant les entrées d' | ||
| - | * recherche d'une entrée à partir de sa classe et de son numéro unique (1 par type d' | ||
| - | * recherche d' | ||
| - | * ajout, modification, | ||
| - | * soumission d'une entrée au format XML de Dyna ; | ||
| - | * liste des dossiers additionnels existants liés à une entrée donnée ; | ||
| - | * liste des dossiers additionnels qu'il est possible de créer pour une entrée donnée ; | ||
| - | * récupération d'un dossier additionnel donné pour une entrée donnée. | ||
| - | Concernant les dossiers additionnels en général : | ||
| - | * liste des dossiers additionnels appartenant à une entrée donnée ; | ||
| - | * vérification qu'une entrée possède un dossier additionnel d'un type donné. | ||
| - | Concernant l' | ||
| - | * vérification qu'un nouveau mot de passe est acceptable suivant la politique de comptes s' | ||
| - | * modification du mot de passe pour une personne, avec impact dans tous les réplicateurs sachant manipuler des mots de passe ; | ||
| - | * vérification du mot de passe d'un utilisateur en utilisant le réplicateur le plus prioritaire sachant vérifier un couple identifiant - mot de passe ; | ||
| - | * faire expirer le compte ou le mot de passe d'une personne maintenant ou à une date donnée ; | ||
| - | * vérification que le mot de passe d'une personne n'est pas expiré ; | ||
| - | * vérification que le compte d'une personne n'est pas expiré ; | ||
| - | Concernant l' | ||
| - | * vérification qu'un utilisateur donné a le droit de voir un objet Dyna donné ; | ||
| - | * vérification qu'un utilisateur donné a le droit de créer, modifier ou supprimer un objet Dyna donné ; | ||
| - | * liste des utilisateurs ayant le droit de lire / modifier un objet Dyna donné ; | ||
| - | * affectation ou révocation d'une autorisation donnée sur un objet Dyna donné, à un utilisateur. | ||
| - | Concernant les dossiers externes : | ||
| - | * liste des dossiers externes d'une entrée donnée ; | ||
| - | * ajout / modification / suppression d'un dossier de externe pour une entrée donnée, et pour un type donné de base externe (p. ex. HARPEGE) ; | ||
| - | * recherche d'un dossier externe en fonction de différents critères de ce dossier (p. ex. la référence externe). | ||
| - | Concernant les dossier additionnels de messagerie : | ||
| - | * ajout / modification / suppression du dossier de messagerie pour une entrée donnée ; | ||
| - | * recherche d'un dossier de messagerie en fonction de différents critère de ce dossier (p. ex. un alias). | ||
| - | Concernant les dossier additionnels système : | ||
| - | * ajout / modification / suppression du dossier système pour une entrée donnée ; | ||
| - | * recherche d'un dossier système en fonction de différents critères de ce dossier (p. ex. un répertoire d' | ||
| - | Concernant les annuaires : | ||
| - | * ajout, modification, | ||
| - | * informations globales concernant un annuaire : nombre d' | ||
| - | * consultation de la liste ordonnée des attributs pouvant être affectés à une personne appartenant à une annuaire donné. | ||
| - | * reconstruction globale d'un annuaire pour un ou plusieurs réplicateurs, | ||
| - | * reconstruction d'un annuaire pour les entrées dépendant d'une organisation donnée et pour un ou plusieurs réplicateurs, | ||
| - | Concernant les filtres : | ||
| - | * ajout, suppression, | ||
| - | * consultation de la liste ordonnée des filtres affectés à un annuaire donné. | ||
| - | Concernant les réplicateurs : | ||
| - | * ajout, modification, | ||
| - | * liste de tous les réplicateurs dépendant d'un annuaire par ordre de priorité ; | ||
| - | * exécution d'une action (ajout, modification, | ||
| - | Concernant les traitements : | ||
| - | * ajout, modification, | ||
| - | * exécution directe d'un traitement. | ||
| - | Concernant les permissions : | ||
| - | * affectation, | ||
| - | * recherche des utilisateurs possédant une permission donnée sur une entrée donnée ; | ||
| - | * vérification qu'un utilisateur possède ou non une permission données sur une entrée donnée. | ||
| - | Concernant la journalisation : | ||
| - | * ajout d'une ligne dans le journal ; | ||
| - | * recherche dans le journal concernant un utilisateur, | ||
| - | * consultation du journal concernant un élément. | ||
| - | |||
| - | ===== 4.1. L' | ||
| - | Un objet de Dyna est stocké dans le référentiel. Il est identifié par une signature unique sous la forme d'un code sur une ou plusieurs lettres représentant sa classe, et d'un numéro unique pour cette classe. | ||
| - | Les entrées sont des objets Dyna, tout comme les annuaires, les réplicateurs, | ||
| - | On doit donc pouvoir, à travers l' | ||
| - | * à partir de sa signature, | ||
| - | * à partir se son numéro unique, connaissant déjà sa classe, | ||
| - | * à partir de différents attributs, et en construisant une requête SQL sur le référentiel renvoyant une liste ordonnée de numéros d' | ||
| - | Certaines classes présentent d' | ||
| - | Pour chaque objet, on a ces méthodes : | ||
| - | * recherche en fonction de son numéro unique, | ||
| - | * recherche en fonction de son identifiant unique, | ||
| - | * recherche en fonction de différents critères (requête pouvant ramener plusieurs objets), | ||
| - | * ajout, | ||
| - | * modification, | ||
| - | * suppression. | ||
| - | |||
| - | ===== 4.2. L' | ||
| - | Dyna2 permettra de gérer l' | ||
| - | * soit directe : autorisation sur un objet unique ; | ||
| - | * soit indirecte : autorisation sur un conteneur, par exemple une structure, impliquant l' | ||
| - | On pourra ainsi autoriser un utilisateur à modifier tout un annuaire, ou bien seulement sur une organisation donnée. | ||
| - | La possibilité de modifier les autorisations sera bien-sûr réservée aux administrateurs de Dyna. | ||
| - | |||
| - | ===== 4.3. L' | ||
| - | Toute entrée d' | ||
| - | L' | ||
| - | La réplication d'une entrée peut entraîner d' | ||
| - | L' | ||
| - | Le GUI doit permettre à l' | ||
| - | |||
| - | ===== 4.4. L' | ||
| - | Dans Dyna il existe un nombre important de tâches à effectuer à intervalles réguliers, tant de manière interne, par exemple la limitation de la taille du journal, que de manière visible par les utilisateurs, | ||
| - | Sans ordonnateur de traitements, | ||
| - | |||
| - | L' | ||
| - | * l' | ||
| - | * le compte-rendu de leur bonne ou mauvaise exécution. On pourrait éventuellement gérer les remontées d' | ||
| - | * la dépendance entre les traitements : pour qu'un traitement B puisse s' | ||
| - | Un traitement géré par l' | ||
| - | |||
| - | L' | ||
| - | De même que l' | ||
| - | |||
| - | ===== 4.5. L' | ||
| - | L' | ||
| - | |||
| - | ===== 4.6. Le cache des objets Dyna ===== | ||
| - | Afin d' | ||
| - | La gestion du cache utilise le fait que les objets Dyna sont identifiés de manière unique par un code de classe sur une ou plusieurs lettres, et un numéro unique pour leur classe. Lorsqu' | ||
| - | Il faut éviter l' | ||
| - | Ceci permet d' | ||
| - | Le cache Dyna n'est pas un cache en écriture et ne gère pas la modification asynchrone de la base de données. Ceci n'est pas indispensable, | ||
| - | |||
| - | ===== 4.7. La journalisation ===== | ||
| - | La journalisation est un service permettant de tracer tout l' | ||
| - | * quelle action a été effectuée : création, modification, | ||
| - | * si c'est une modification : quels sont les attributs modifiés, quelles sont les anciennes et les nouvelles valeurs ; | ||
| - | * qui a effectué l' | ||
| - | * quand l' | ||
| - | * informations complémentaires. | ||
| - | Ces informations sont stockées dans une base de données distincte du référentiel, | ||
| - | Le GUI doit permettre d' | ||
| - | |||
| - | ====== 5. Services fournis par le serveur web de Dyna ====== | ||
| - | Par analogie avec le service wwsympa du serveur Sympa, sous appellerons ce service wwdyna. | ||
| - | |||
| - | ===== 5.1. Utilisateurs du site web Dyna ===== | ||
| - | On a quatre sortes d' | ||
| - | * les utilisateurs en consultation simple, sans authentification sauf s'ils viennent d'un réseau extérieur à l' | ||
| - | * les utilisateurs qui veulent changer leur mot de passe, et qui doivent s' | ||
| - | * les exploitants de Dyna pour une ou plusieurs composantes, | ||
| - | * les administrateurs qui ont tous les droits. | ||
| - | Les deux premiers constituent une population importante, mais ils n' | ||
| - | |||
| - | ===== 5.2. L' | ||
| - | Dyna2 devra, comme Dyna1, permettre l' | ||
| - | * par LDAP : auquel cas, la configuration de Dyna indique un annuaire possédant au moins un réplicateur de type LDAP et sachant gérer l' | ||
| - | * par CAS (Centralized Authentication Service) : Dyna demande à CAS d' | ||
| - | * par certificats X.509 : Dyna laisse à Apache le soin de vérifier l' | ||
| - | Pour cela, wwdyna devra disposer d'un mécanisme d' | ||
| - | Lorsqu' | ||
| - | * date et heure ; | ||
| - | * identifiant de l' | ||
| - | * modules d' | ||
| - | * module d' | ||
| - | On envisage d' | ||
| - | |||
| - | ===== 5.3. La navigation dans le référentiel ===== | ||
| - | Le service wwdyna devra permettre à tout utilisateur de l' | ||
| - | Le client devra fournir au navigateur un code xhtml valide, avec des feuilles de style CSS2. Celles-ci permettront à la demande de modifier un paramètre simple de la présentation, | ||
| - | Pour cela, l' | ||
| - | L' | ||
| - | Pour chaque objet Dyna visualisé ou modifié, wwdyna devra s' | ||
| - | Le code qui sera présenté au navigateur client sera formaté en XHTML , au lieu de HTML comme dans Dyna1. | ||
| - | Évaluer la possibilité d' | ||
| - | * On Demand Javascript (chargement de fonctions JavaScript à la demande) ; | ||
| - | * AJAX (Asynchronous JAvascript XML : échange dynamique de fragments de code XML de manière à améliorer l' | ||
| - | Types de requêtes : | ||
| - | * recherche sur les personnes selon différents critères. Selon de type d' | ||
| - | * ajout, modification, | ||
| - | * recherche sur les groupes ; | ||
| - | * ajout, modification, | ||
| - | * recherche sur les structures (3 requêtes, une par type de structure) ; | ||
| - | * ajout, modification, | ||
| - | * recherche générique sur toutes les entrées en fonction de critères communs : le nom, l' | ||
| - | * partant de l' | ||
| - | * ... | ||
| - | ** A COMPLETER ** | ||
| - | |||
| - | ====== 6. Services fournis par le client Java Dyna ====== | ||
| - | Le client Java Dyna permet de synchroniser des entrées en mode PUSH. | ||
| - | Dyna2 devra prévoir le portage du client Dyna1 actuel, utilisé par Geode, sur l'API basée sur XML-RPC. | ||
| - | |||
| - | ====== 7. Migration vers Dyna2 ===== | ||
| - | ===== 7.1. Migration de la base de données ===== | ||
| - | Il faut naturellement récupérer les données de Dyna1 dans Dyna2, et pour cela disposer d'un programme assurant la migration des données. Ce programme lira la base Dyna1 afin de remplir la base de Dyna2. \\ | ||
| - | Les changements entre Dyna1 et Dyna2 étant substantiels, | ||
| - | |||
| - | ===== 7.2. Migration des serveurs ===== | ||
| - | SRU. | ||
| - | |||
| - | ====== 8. Annexes ====== | ||
| - | ===== 8.1. Diagrammes UML des classes et interfaces ===== | ||
| - | Les paragraphes suivants spécifient les classes de Dyna2 à travers des diagrammes UML. | ||
| - | |||
| - | ==== 8.1.1. Sommet de la hiérarchie ==== | ||
| - | {{dyna: | ||
| - | |||
| - | ==== 8.1.2. Interface DynaService ==== | ||
| - | {{dyna: | ||
| - | |||
| - | ==== 8.1.3. Classes des éléments d' | ||
| - | |||
| - | {{dyna: | ||
| - | |||
| - | ==== 8.1.3. Classe mail et interface EntreeMail === | ||
| - | {{dyna: | ||
| - | |||
| - | ==== 8.1.4. Classes des dossiers additionnels ==== | ||
| - | |||
| - | {{dyna: | ||
| - | |||
| - | ==== 8.1.5. Classes des réplicateurs ==== | ||
| - | {{dyna: | ||
| - | |||
| - | ==== 8.1.6. Classes des filtres d' | ||
| - | {{dyna: | ||
| - | |||
| - | ==== 8.1.7. Classes des politiques de comptes et des contrôleurs de mots de passe ==== | ||
| - | {{dyna: | ||
| - | |||
| - | ==== 8.1.8. Classes de recherche dans le référentiel ==== | ||
| - | {{dyna: | ||
| - | |||
| - | ===== 8.2. Liste des traitements ===== | ||
| - | Les tableaux suivants décrivent les traitements à prendre en compte dans Dyna2. | ||
| - | |||
| - | ==== 8.2.1. Traitements présents dans Dyna1 ==== | ||
| - | ^ Nom ^ Description ^ Exécution ^ A reporter sur Dyna2 ^ | ||
| - | | TraitementPersonnesParties | Ce traitement supprime logiquement toutes les personnes qui sont déjà parties et qui ne sont pas déjà logiquement supprimées. | Quotidienne | Oui | | ||
| - | | TraitementDroitsPersonnesSupprimees | Suppression des droits pour les personnes logiquement supprimées | Quotidienne | Oui | | ||
| - | | TraitementLimitationTailleJournal | Limitation de la taille du journal | Quotidienne | Oui | | ||
| - | | ArchivageAppelsFermes | Archivage des groupes liés aux appels anciens | Quotidienne | Non (lié au centre d' | ||
| - | | TraitementValidationGroupes | Ce traitement permet de valider tous les groupes. | Quotidienne | Oui | | ||
| - | | TraitementComptesExpires | Traitement des comptes expirés : la BAL éventuelle passe INACTIVE. | Quotidienne | Oui | | ||
| - | | TraitementMaintienBAL | Envoi des mails afin de maintenir ou non la BAL pour les retraités, les associations et les doctorants, et traitement de ces BALs. | Quotidienne | Oui | | ||
| - | | TraitementRappelsPwdCpt | Envoi de mail aux utilisateurs dont le compte et/ou le mot de passe expire | Quotidienne | Oui | | ||
| - | | TraitementRappels | Ce traitement envoie des messages pour rappeler aux différents intervenant la liste des appels et des services qu'ils ont dans leur portefeuille. | Quotidienne | Non (lié au centre d' | ||
| - | | TraitementMajHisto | Mise à jour de l' | ||
| - | | TraitementKSUPPersonnelUnivNantes2 | Import dans un fichier XML des données de KSUP pour le personnel de l' | ||
| - | | TraitementImport2 (ksup.xml) | Import du fichier XML en provenance de KSUP (personnel de l' | ||
| - | | TraitementKSUPResponsablesStructures | Import des responsables de structures dans KSUP | Quotidienne | Oui | | ||
| - | | TraitementRappelQuotas | Envoi d'un message aux utilisateurs sont le quota est utilisé à plus de 80% | Quotidienne | Oui | | ||
| - | | TraitementHarpegeStructures | Import dans un fichier XML des données de HARPEGE pour les structures de l' | ||
| - | | TraitementHarpegePersonnelUnivNantes | Import dans un fichier XML des données de HARPEGE pour le personnel de l' | ||
| - | | TraitementImport2 (harpege_structures.xml) | Import du fichier contenant les structures de l' | ||
| - | | TraitementImport2 (harpege.xml) | Import du fichier contenant les personnels de l' | ||
| - | | TraitementSympaEtu | Mise à jour de la base mysql de sympa pour les étudiants de l' | ||
| - | | TraitementSympaPers | Mise à jour de la base mysql de sympa pour le personnel de l' | ||
| - | |||
| - | |||
| - | ==== 8.2.2. Nouveaux traitements pour Dyna2 ==== | ||
| - | ^ Nom ^ Description ^ Exécution | ||
| - | | TraitementInfosPersonnesParties | Information des exploitants de Dyna sur les personnes dont la date de départ approche. \\ Demandé par Frédéric Lussori et Nicolas Costes | Quotidienne | | ||
| - | | TraitementStatsReplicateur | Informations des administrateurs de Dyna concernant les statistiques des réplicateurs : nombre total de demandes de réplications, | ||
| - | |||
| - | ===== 8.3. Algorithme de réplication ===== | ||
| - | Ce chapitre détaille l' | ||
| - | |||
| - | ==== 8.3.1. Algorithme préliminaire : calcul du DN ==== | ||
| - | < | ||
| - | String getDN(AnnuEntree e) : | ||
| - | Si e est une organisation : | ||
| - | Si le DIT est hiérarchique : | ||
| - | Si le niveau de l' | ||
| - | Résultat : " | ||
| - | Sinon : | ||
| - | Résultat : " | ||
| - | Fin si | ||
| - | Sinon : | ||
| - | | ||
| - | Fin si | ||
| - | Sinon si e est une personne : | ||
| - | Si le DIT est hiérarchique pour les personnes et que la personne appartient à au moins une organisation : | ||
| - | | ||
| - | l' | ||
| - | | ||
| - | Sinon : | ||
| - | | ||
| - | Fin si | ||
| - | Sinon si e est un groupe : | ||
| - | Si le DIT est hiérarchique pour les groupes et que le groupe appartient à une organisation : | ||
| - | | ||
| - | Sinon : | ||
| - | | ||
| - | Fin si | ||
| - | Fin si | ||
| - | Fin. | ||
| - | </ | ||
| - | // Remarque// : ceci est le code par défaut, les réplicateurs spécifiques pouvant surcharger cette méthode. | ||
| - | |||
| - | ==== 8.3.2. Réplication d'une entrée ==== | ||
| - | < | ||
| - | void ajouterOuModifier(AnnuEntree e) : | ||
| - | | ||
| - | | ||
| - | | ||
| - | (uid pour les personnes, cn pour les groupes...) | ||
| - | Si DN1 existe et ((DN2 existe et DN1=DN2) ou (DN2 n' | ||
| - | On modifie l' | ||
| - | | ||
| - | (ces attributs risquent d' | ||
| - | | ||
| - | Sinon si DN1 n' | ||
| - | On ajoute l' | ||
| - | On vérifie d' | ||
| - | Calculer DN3 : DN de l' | ||
| - | Si DN3 existe : | ||
| - | OK, passer à l' | ||
| - | Sinon si le DIT est hiérarchique pour le type d' | ||
| - | | ||
| - | | ||
| - | Sinon : | ||
| - | | ||
| - | Fin si | ||
| - | Fin de la vérification | ||
| - | Ajouter l' | ||
| - | Sinon si DN1 n' | ||
| - | On renomme l' | ||
| - | Si l' | ||
| - | Créer l' | ||
| - | ajouterOuModifier sur toutes les sous-organisations directes de e | ||
| - | ajouterOuModifier sur toutes les personnes dont au moins une organisation (principale ou secondaire) est directement e | ||
| - | ajouterOuModifier sur tous les groupes appartenant directement à e | ||
| - | Supprimer l' | ||
| - | Sinon (entrée non hiérarchique) : | ||
| - | renommage LDAP de l' | ||
| - | Si e est une personne : | ||
| - | Pour tout groupe g contenant directement ou non cette personne, et concerné par ce réplicateur : | ||
| - | | ||
| - | Fin pour | ||
| - | Fin si | ||
| - | Fin si | ||
| - | Sinon si DN1 et DN2 existent et DN1 != DN2 | ||
| - | Supprimer DN2 | ||
| - | Vérifier que DN2 a bien été supprimé (attention à la boucle infinie !) | ||
| - | ajouterOuModifier(e) | ||
| - | Fin si | ||
| - | Fin | ||
| - | |||
| - | void supprimer(AnnuEntree e) : | ||
| - | | ||
| - | | ||
| - | | ||
| - | Si DN1 existe : | ||
| - | Supprimer l' | ||
| - | Fin si | ||
| - | Si DN2 existe : | ||
| - | Supprimer l' | ||
| - | Fin si | ||
| - | Fin | ||
| - | </ | ||