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'attribut cn 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 et niveau.
  • 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 et nom_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()]