Ajout d'infos sur les attributs

Pour l'intranet et un futur gest_crans
This commit is contained in:
Daniel STAN 2013-01-15 16:31:02 +01:00
parent 96705403a2
commit 7a644cdfa9
2 changed files with 78 additions and 5 deletions

View file

@ -62,6 +62,14 @@ class Attr(object):
can_modify = ['Nounou'] can_modify = ['Nounou']
"""La liste des droits qui suffisent à avoir le droit de modifier la valeur""" """La liste des droits qui suffisent à avoir le droit de modifier la valeur"""
can_view = ['Nounou', 'apprenti', 'self', 'parent', 'owner']
"""Qui peut voir l'attribut. Par défaut, les nounous et les apprentis
peuvent tout voir. Par transparence, et par utilité, on autorise par
défaut l'adhérent à voir les données le concernant."""
category = 'other'
"""Catégorie de l'attribut (pour affichage futur)"""
def __init__(self, val, ldif, conn, ctxt_check): def __init__(self, val, ldif, conn, ctxt_check):
"""Crée un nouvel objet représentant un attribut. """Crée un nouvel objet représentant un attribut.
@ -135,6 +143,11 @@ class objectClass(Attr):
optional = False optional = False
legend = "entité" legend = "entité"
can_modify = []
""" Personne ne doit modifier de classe """
can_view = ['Nounou', 'apprenti']
""" Internal purpose (et à fin pédagogique) """
def parse_value(self, val, ldif): def parse_value(self, val, ldif):
if val not in [ 'top', 'posixAccount', 'shadowAccount', 'proprio', if val not in [ 'top', 'posixAccount', 'shadowAccount', 'proprio',
@ -160,16 +173,25 @@ class aid(intAttr):
singlevalue = True singlevalue = True
optional = True optional = True
legend = u"Identifiant de l'adhérent" legend = u"Identifiant de l'adhérent"
category = 'id'
can_modify = []
""" Personne ne devrait modifier un attribut d'identification """
can_view = ['Nounou', 'apprenti', 'cableurs']
class uid(Attr): class uid(Attr):
singlevalue = True singlevalue = True
option = False option = False
legend = u"L'identifiant canonique de l'adhérent" legend = u"L'identifiant canonique de l'adhérent"
category = 'perso'
class nom(Attr): class nom(Attr):
singlevalue = True singlevalue = True
optional = False optional = False
legend = "Nom" legend = "Nom"
category = 'perso'
can_modify = ["Nounou", "Cableur"]
def parse_value(self, val, ldif): def parse_value(self, val, ldif):
if u'club' in ldif['objectClass']: if u'club' in ldif['objectClass']:
@ -177,11 +199,12 @@ class nom(Attr):
else: else:
self.value = validate_name(val) self.value = validate_name(val)
class prenom(Attr): class prenom(Attr):
singlevalue = True singlevalue = True
optional = False optional = False
legend = u"Prénom" legend = u"Prénom"
category = 'perso'
can_modify = ["Nounou", "Cableur"]
def parse_value(self, val, ldif): def parse_value(self, val, ldif):
self.value = validate_name(val) self.value = validate_name(val)
@ -191,6 +214,7 @@ class tel(Attr):
singlevalue = True singlevalue = True
optional = False optional = False
legend = u"Téléphone" legend = u"Téléphone"
category = 'perso'
can_modify = ["self", "Nounou", "Cableur"] can_modify = ["self", "Nounou", "Cableur"]
def parse_value(self, val, ldif): def parse_value(self, val, ldif):
@ -212,9 +236,13 @@ class yearAttr(intAttr):
class paiement(yearAttr): class paiement(yearAttr):
legend = u"Paiement" legend = u"Paiement"
can_modify = ["Cableur", "Nounou", "tresorier"] can_modify = ["Cableur", "Nounou", "tresorier"]
category = 'perso'
class carteEtudiant(yearAttr): class carteEtudiant(yearAttr):
legend = u"Carte d'étudiant" legend = u"Carte d'étudiant"
category = 'perso'
can_modify = ["Cableur", "Nounou", "tresorier"]
class mailAlias(Attr): class mailAlias(Attr):
@ -222,6 +250,7 @@ class mailAlias(Attr):
optional = True optional = True
legend = u"Alias mail" legend = u"Alias mail"
can_modify = ["self", "Cableur", "Nounou"] can_modify = ["self", "Cableur", "Nounou"]
category = 'mail'
def parse_value(self, val, ldif): def parse_value(self, val, ldif):
val = val.lower() val = val.lower()
@ -234,6 +263,7 @@ class canonicalAlias(Attr):
singlevalue = True singlevalue = True
optional = False optional = False
legend = u"Alias mail canonique" legend = u"Alias mail canonique"
category = 'mail'
def parse_value(self, val, ldif): def parse_value(self, val, ldif):
val = u".".join([ a.capitalize() for a in val.split(u'.', 1) ]) val = u".".join([ a.capitalize() for a in val.split(u'.', 1) ])
@ -241,12 +271,12 @@ class canonicalAlias(Attr):
raise ValueError("Alias mail invalide (%s)" % val) raise ValueError("Alias mail invalide (%s)" % val)
self.value = val self.value = val
class etudes(Attr): class etudes(Attr):
singlevalue = False singlevalue = False
optional = False optional = False
legend = u"Études" legend = u"Études"
can_modify = ["self", "Cableur", "Nounou"] can_modify = ["self", "Cableur", "Nounou"]
category = 'perso'
def parse_value(self, val, ldif): def parse_value(self, val, ldif):
# who cares # who cares
@ -258,6 +288,7 @@ class chbre(Attr):
optional = False optional = False
legend = u"Chambre sur le campus" legend = u"Chambre sur le campus"
can_modify = ["self", "Cableur", "Nounou"] can_modify = ["self", "Cableur", "Nounou"]
category = 'perso'
def parse_value(self, val, ldif): def parse_value(self, val, ldif):
if self.ctxt_check: # Si ce n'est pas la peine de vérifier, on ne vérifie pas if self.ctxt_check: # Si ce n'est pas la peine de vérifier, on ne vérifie pas
@ -285,6 +316,7 @@ class droits(Attr):
optional = True optional = True
legend = u"Droits sur les serveurs" legend = u"Droits sur les serveurs"
can_modify = ["Nounou", "Bureau"] can_modify = ["Nounou", "Bureau"]
category = 'perso'
def parse_value(self, val, ldif): def parse_value(self, val, ldif):
if val.lower() not in ['apprenti', 'nounou', 'cableur', 'tresorier', 'bureau', if val.lower() not in ['apprenti', 'nounou', 'cableur', 'tresorier', 'bureau',
@ -308,6 +340,7 @@ class solde(Attr):
self.value = solde self.value = solde
class dnsAttr(Attr): class dnsAttr(Attr):
category = 'dns'
def parse_value(self, dns, ldif): def parse_value(self, dns, ldif):
dns = dns.lower() dns = dns.lower()
name, net = dns.split('.', 1) name, net = dns.split('.', 1)
@ -322,6 +355,7 @@ class host(dnsAttr):
optional = False optional = False
hname = legend = u"Nom d'hôte" hname = legend = u"Nom d'hôte"
can_modify = ["parent", "Nounou", "Cableur"] can_modify = ["parent", "Nounou", "Cableur"]
category = 'base_tech'
class macAddress(Attr): class macAddress(Attr):
@ -329,6 +363,7 @@ class macAddress(Attr):
optional = False optional = False
legend = u"Adresse physique de la carte réseau" legend = u"Adresse physique de la carte réseau"
hname = "Adresse MAC" hname = "Adresse MAC"
category = 'base_tech'
can_modify = ["parent", "Nounou", "Cableur"] can_modify = ["parent", "Nounou", "Cableur"]
def parse_value(self, mac, ldif): def parse_value(self, mac, ldif):
@ -343,6 +378,7 @@ class ipHostNumber(Attr):
optional = False optional = False
legend = u"Adresse IPv4 de la machine" legend = u"Adresse IPv4 de la machine"
hname = "IPv4" hname = "IPv4"
category = 'base_tech'
def parse_value(self, ip, ldif): def parse_value(self, ip, ldif):
if ip == '<automatique>': if ip == '<automatique>':
@ -357,6 +393,7 @@ class mid(Attr):
singlevalue = True singlevalue = True
optional = False optional = False
legend = "Identifiant de machine" legend = "Identifiant de machine"
category = 'id'
def parse_value(self, mid, ldif): def parse_value(self, mid, ldif):
self.value = Mid(mid = int(mid)) self.value = Mid(mid = int(mid))
@ -374,21 +411,25 @@ class ipsec(Attr):
singlevalue = False singlevalue = False
optional = True optional = True
legend = u'Clef wifi' legend = u'Clef wifi'
category = 'wifi'
class puissance(Attr): class puissance(Attr):
singlevalue = True singlevalue = True
optional = True optional = True
legend = u"puissance d'émission pour les bornes wifi" legend = u"puissance d'émission pour les bornes wifi"
category = 'wifi'
class canal(intAttr): class canal(intAttr):
singlevalue = True singlevalue = True
optional = True optional = True
legend = u'Canal d\'émission de la borne' legend = u'Canal d\'émission de la borne'
category = 'wifi'
class portAttr(Attr): class portAttr(Attr):
singlevalue = False singlevalue = False
optional = True optional = True
legend = u'Ouverture de port'
category = 'firewall'
def parse_value(self, port, ldif): def parse_value(self, port, ldif):
if ":" in port: if ":" in port:
@ -435,6 +476,7 @@ class prise(Attr):
singlevalue = True singlevalue = True
optional = True optional = True
legend = u"Prise sur laquelle est branchée la machine" legend = u"Prise sur laquelle est branchée la machine"
category = 'base_tech'
def parse_value(self, prise, ldif): def parse_value(self, prise, ldif):
### Tu es une Nounou, je te fais confiance ### Tu es une Nounou, je te fais confiance
@ -444,11 +486,13 @@ class cid(intAttr):
singlevalue = True singlevalue = True
optional = True optional = True
legend = u"Identifiant du club" legend = u"Identifiant du club"
category = 'id'
class responsable(Attr): class responsable(Attr):
singlevalue = True singlevalue = True
optional = True optional = True
legend = u"Responsable du club" legend = u"Responsable du club"
category = 'perso'
def get_respo(self): def get_respo(self):
if self.value == None: if self.value == None:
@ -467,6 +511,7 @@ class blacklist(Attr):
singlevalue = False singlevalue = False
optional = True optional = True
legend = u"Blackliste" legend = u"Blackliste"
category = 'info'
def parse_value(self, bl, ldif): def parse_value(self, bl, ldif):
bl_debut, bl_fin, bl_type, bl_comm = bl.split('$') bl_debut, bl_fin, bl_type, bl_comm = bl.split('$')
@ -491,24 +536,28 @@ class historique(Attr):
singlevalue = False singlevalue = False
optional = True optional = True
legend = u"Historique de l'objet" legend = u"Historique de l'objet"
category = 'info'
class info(Attr): class info(Attr):
singlevalue = False singlevalue = False
optional = True optional = True
legend = u"Quelques informations" legend = u"Quelques informations"
category = 'info'
can_modify = ["Nounou", "Cableur", "Bureau"] can_modify = ["Nounou", "Cableur", "Bureau"]
class homepageAlias(Attr): class homepageAlias(Attr):
singlevalue = True singlevalue = True
optional = True optional = True
legend = u'Un alias pour la page personnelle' legend = u'Un alias pour la page personnelle'
can_modify = ["WebMaster", "Nounou", "Cableur"] can_modify = ["Nounou", "Cableur"]
category = 'webpage'
class charteMA(Attr): class charteMA(Attr):
singlevalue = True singlevalue = True
optional = True optional = True
legend= "Signale si l'adhérent a signé la charte de membres actifs" legend= "Signale si l'adhérent a signé la charte de membres actifs"
can_modify = ["Nounou", "Bureau"] can_modify = ["Nounou", "Bureau"]
category = 'perso'
def parse_value(self, signed, ldif): def parse_value(self, signed, ldif):
if signed.upper() not in ["TRUE", "FALSE"]: if signed.upper() not in ["TRUE", "FALSE"]:
@ -569,16 +618,19 @@ class uidNumber(intAttr):
singlevalue = True singlevalue = True
optional = True optional = True
legend = "L'uid du compte de l'adherent" legend = "L'uid du compte de l'adherent"
category = 'id'
class gidNumber(intAttr): class gidNumber(intAttr):
singlevalue = True singlevalue = True
optional = True optional = True
legend = "Le gid du compte de l'adhérent" legend = "Le gid du compte de l'adhérent"
category = 'id'
class gecos(Attr): class gecos(Attr):
singlevalue = True singlevalue = True
optional = True optional = True
legend = "Le gecos" legend = "Le gecos"
category = 'id'
def parse_value(self, gecos, ldif): def parse_value(self, gecos, ldif):
a, b, c, d = gecos.split(',') a, b, c, d = gecos.split(',')
@ -589,6 +641,7 @@ class mail(Attr):
optional = False optional = False
legend = "Le mail de l'adhérent" legend = "Le mail de l'adhérent"
can_modify = ["self", "Nounou", "Cableur"] can_modify = ["self", "Nounou", "Cableur"]
category = 'mail'
# XXX - to be implemented # XXX - to be implemented
#def parse_value(self, mail, ldif): #def parse_value(self, mail, ldif):
@ -597,20 +650,26 @@ class mail(Attr):
class cn(Attr): class cn(Attr):
singlevalue = True singlevalue = True
optional = False optional = False
category = 'id'
class dn(Attr): class dn(Attr):
singlevalue = True singlevalue = True
optional = False optional = False
category = 'id'
class postalAddress(Attr): class postalAddress(Attr):
singlevalue = False singlevalue = False
optional = True optional = True
can_modify = ["self", "Cableur", "Nounou", "Bureau"] can_modify = ["self", "Cableur", "Nounou", "Bureau"]
legend = u"Adresse"
category = 'perso'
class controle(Attr): class controle(Attr):
singlevalue = True singlevalue = True
optional = False optional = False
legend = u"Contrôle"
can_modify = ["Tresorier", "Nounou"] can_modify = ["Tresorier", "Nounou"]
category = 'perso'
def parse_value(self, ctrl, ldif): def parse_value(self, ctrl, ldif):
if ctrl not in [u"", u"c", u"p", u"cp", u"pc"]: if ctrl not in [u"", u"c", u"p", u"cp", u"pc"]:
@ -631,6 +690,7 @@ CRANS_ATTRIBUTES= {
'prenom' : prenom, 'prenom' : prenom,
'tel' : tel, 'tel' : tel,
'paiement' : paiement, 'paiement' : paiement,
'controle': controle,
'carteEtudiant' : carteEtudiant, 'carteEtudiant' : carteEtudiant,
'mailAlias' : mailAlias, 'mailAlias' : mailAlias,
'canonicalAlias' : canonicalAlias, 'canonicalAlias' : canonicalAlias,

View file

@ -278,6 +278,19 @@ def new_cransldapobject(conn, dn, mode='ro', ldif = None):
class CransLdapObject(object): class CransLdapObject(object):
"""Classe de base des objets CransLdap. """Classe de base des objets CransLdap.
Cette classe ne devrait pas être utilisée directement.""" Cette classe ne devrait pas être utilisée directement."""
""" Champs uniques et nécessaires """
ufields = []
""" Champs uniques facultatifs """
ofields = []
""" Champs multivalués facultatifs """
mfields = []
""" Champs obligatoires multivalué """
xfields = []
def __init__(self, conn, dn, mode='ro', ldif = None): def __init__(self, conn, dn, mode='ro', ldif = None):
''' '''
Créée une instance d'un objet Crans (machine, adhérent, Créée une instance d'un objet Crans (machine, adhérent,
@ -533,7 +546,7 @@ class AssociationCrans(proprio):
class adherent(proprio): class adherent(proprio):
u"""Adhérent crans.""" u"""Adhérent crans."""
ufields = proprio.ufields + ['aid', 'prenom', 'tel', 'mail', 'mailInvalide'] ufields = proprio.ufields + ['aid', 'prenom', 'tel', 'mail', 'mailInvalide']
ofields = proprio.ofields + ['charteMA', 'adherentPayant', 'typeAdhesion', ofields = proprio.ofields + ['charteMA',
'canonicalAlias', 'solde', 'contourneGreylist', 'canonicalAlias', 'solde', 'contourneGreylist',
'rewriteMailHeaders', 'derniereConnexion', 'rewriteMailHeaders', 'derniereConnexion',
'homepageAlias'] 'homepageAlias']