Ajout d'attributs calculés
Le principe est de créer un fichier <nom_champ>.py
dans le répertoire /usr/share/sso/user_infos/
:
def calc_info(user_info):
.....
return liste_val
-
user_info
est le dictionnaire des données existantes (cf. paragraphe précédent), il est passé automatiquement à la fonction par le serveur SSO ; -
liste_val
est une liste python contenant les valeurs à associer au champ <nom_champ>.
Pour que ces données soient envoyées aux applications clientes du SSO, il faut les mettre dans un filtre de données (cf. paragraphes suivants)
L'objet user_infos
est un dictionnaire python contenant les informations connues sur l'utilisateur (récupérées au moment de sa connexion). Il contient les informations suivantes :
- tous les champs de l'utilisateur dans l'annuaire LDAP qui sont accessibles par lui en lecture, à l'exception des mots de passe. Comme cela est le cas dans l'annuaire, les valeurs des attributs sont multivaluées. Par exemple, pour récupérer la première valeur du champ mail, utiliser
user_infos['mail'][0]
; - une entrée
user_groups
qui contient la liste des groupes samba auxquels l'utilisateur est inscrit (récupérés également dans l'annuaire) ; - une entrée
info_groups
contenant un dictionnaire dont les clés sont l'attributcn
des groupes présents dans user_groups et les valeurs sont les attributs du groupe correspondant dans l'annuaire ldap. Seuls les attributs suivants sont conservés :sambaGroupType
,displayName
,cn
,objectClass
,gidNumber
,mail
,description
etniveau
. - une entrée
dn
contenant le DN complet de l'utilisateur (utilisé pour récupérer le RNE d'origine d'un utilisateur dans le cas d'un annuaire multi-établissements). - les entrées
rne
etnom_etab
qui correspondent aux informations présentes dans la configuration Creole du serveur (ou dans le fichier de configuration du serveur EoleSSO le cas échéant).
Attention
Dans le cas d'une utilisation du produit EoleSSO hors du cadre de la distribution EOLE, certains attributs peuvent ne pas être disponibles (en fonction de l'organisation des données dans l'annuaire). Certaines informations comme le libellé de l'établissement ou son code RNE peuvent être renseignées dans le fichier de configuration principal du serveur : /usr/share/sso/config.py
En plus des données ci-dessus, un certain nombre d'attributs calculés sont livrés par défaut avec le serveur :
- classes : la classe d'un élève ou les classes d'un professeur ;
- disciplines : les matières enseignées pour un professeur ;
- niveaux : le niveau (attribut
Mefclf
) d'un élève ou les niveaux dans lesquels un professeur enseigne ; - secureid : identifiant opaque calculé avec un MD5 de l'UID et du RNE de l'utilisateur ;
- ENTPersonProfils : renvoie le profil de l'utilisateur tel que défini dans le SDET (par ex. National_1 pour un élève)
- ENTPersonStructRattachRNE : Le numéro d'établissement d'origine de l'utilisateur, calculé à partir de son DN dans l'annuaire (utile dans le cas d'un annuaire centralisé regroupant plusieurs établissements) ;
- entlogin : renvoie l'attribut
ENTPersonProfil
de l'utilisateur. Si ce champ n'est pas renseigné, l'équivalent de secureid est renvoyé.
ExempleAttribut calculé secureid (identifiant unique et opaque à destination de services externes)
Contenu du fichier /usr/share/sso/user_infos/secureid.py
:
# -*- coding: utf-8 -*-
def calc_info(user_infos):
"""calcule secureid : identifiant crypté unique pour chaque utilisateur"""
from md5 import md5
# calcul d'un identifiant crypté unique
user_hash = md5("%s@%s" % (user_infos['uid'][0], user_infos['rne'][0]))
return [user_hash.hexdigest()]