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']
"""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):
"""Crée un nouvel objet représentant un attribut.
@ -135,6 +143,11 @@ class objectClass(Attr):
optional = False
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):
if val not in [ 'top', 'posixAccount', 'shadowAccount', 'proprio',
@ -160,16 +173,25 @@ class aid(intAttr):
singlevalue = True
optional = True
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):
singlevalue = True
option = False
legend = u"L'identifiant canonique de l'adhérent"
category = 'perso'
class nom(Attr):
singlevalue = True
optional = False
legend = "Nom"
category = 'perso'
can_modify = ["Nounou", "Cableur"]
def parse_value(self, val, ldif):
if u'club' in ldif['objectClass']:
@ -177,11 +199,12 @@ class nom(Attr):
else:
self.value = validate_name(val)
class prenom(Attr):
singlevalue = True
optional = False
legend = u"Prénom"
category = 'perso'
can_modify = ["Nounou", "Cableur"]
def parse_value(self, val, ldif):
self.value = validate_name(val)
@ -191,6 +214,7 @@ class tel(Attr):
singlevalue = True
optional = False
legend = u"Téléphone"
category = 'perso'
can_modify = ["self", "Nounou", "Cableur"]
def parse_value(self, val, ldif):
@ -212,9 +236,13 @@ class yearAttr(intAttr):
class paiement(yearAttr):
legend = u"Paiement"
can_modify = ["Cableur", "Nounou", "tresorier"]
category = 'perso'
class carteEtudiant(yearAttr):
legend = u"Carte d'étudiant"
category = 'perso'
can_modify = ["Cableur", "Nounou", "tresorier"]
class mailAlias(Attr):
@ -222,6 +250,7 @@ class mailAlias(Attr):
optional = True
legend = u"Alias mail"
can_modify = ["self", "Cableur", "Nounou"]
category = 'mail'
def parse_value(self, val, ldif):
val = val.lower()
@ -234,6 +263,7 @@ class canonicalAlias(Attr):
singlevalue = True
optional = False
legend = u"Alias mail canonique"
category = 'mail'
def parse_value(self, val, ldif):
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)
self.value = val
class etudes(Attr):
singlevalue = False
optional = False
legend = u"Études"
can_modify = ["self", "Cableur", "Nounou"]
category = 'perso'
def parse_value(self, val, ldif):
# who cares
@ -258,6 +288,7 @@ class chbre(Attr):
optional = False
legend = u"Chambre sur le campus"
can_modify = ["self", "Cableur", "Nounou"]
category = 'perso'
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
@ -285,6 +316,7 @@ class droits(Attr):
optional = True
legend = u"Droits sur les serveurs"
can_modify = ["Nounou", "Bureau"]
category = 'perso'
def parse_value(self, val, ldif):
if val.lower() not in ['apprenti', 'nounou', 'cableur', 'tresorier', 'bureau',
@ -308,6 +340,7 @@ class solde(Attr):
self.value = solde
class dnsAttr(Attr):
category = 'dns'
def parse_value(self, dns, ldif):
dns = dns.lower()
name, net = dns.split('.', 1)
@ -322,6 +355,7 @@ class host(dnsAttr):
optional = False
hname = legend = u"Nom d'hôte"
can_modify = ["parent", "Nounou", "Cableur"]
category = 'base_tech'
class macAddress(Attr):
@ -329,6 +363,7 @@ class macAddress(Attr):
optional = False
legend = u"Adresse physique de la carte réseau"
hname = "Adresse MAC"
category = 'base_tech'
can_modify = ["parent", "Nounou", "Cableur"]
def parse_value(self, mac, ldif):
@ -343,6 +378,7 @@ class ipHostNumber(Attr):
optional = False
legend = u"Adresse IPv4 de la machine"
hname = "IPv4"
category = 'base_tech'
def parse_value(self, ip, ldif):
if ip == '<automatique>':
@ -357,6 +393,7 @@ class mid(Attr):
singlevalue = True
optional = False
legend = "Identifiant de machine"
category = 'id'
def parse_value(self, mid, ldif):
self.value = Mid(mid = int(mid))
@ -374,21 +411,25 @@ class ipsec(Attr):
singlevalue = False
optional = True
legend = u'Clef wifi'
category = 'wifi'
class puissance(Attr):
singlevalue = True
optional = True
legend = u"puissance d'émission pour les bornes wifi"
category = 'wifi'
class canal(intAttr):
singlevalue = True
optional = True
legend = u'Canal d\'émission de la borne'
category = 'wifi'
class portAttr(Attr):
singlevalue = False
optional = True
legend = u'Ouverture de port'
category = 'firewall'
def parse_value(self, port, ldif):
if ":" in port:
@ -435,6 +476,7 @@ class prise(Attr):
singlevalue = True
optional = True
legend = u"Prise sur laquelle est branchée la machine"
category = 'base_tech'
def parse_value(self, prise, ldif):
### Tu es une Nounou, je te fais confiance
@ -444,11 +486,13 @@ class cid(intAttr):
singlevalue = True
optional = True
legend = u"Identifiant du club"
category = 'id'
class responsable(Attr):
singlevalue = True
optional = True
legend = u"Responsable du club"
category = 'perso'
def get_respo(self):
if self.value == None:
@ -467,6 +511,7 @@ class blacklist(Attr):
singlevalue = False
optional = True
legend = u"Blackliste"
category = 'info'
def parse_value(self, bl, ldif):
bl_debut, bl_fin, bl_type, bl_comm = bl.split('$')
@ -491,24 +536,28 @@ class historique(Attr):
singlevalue = False
optional = True
legend = u"Historique de l'objet"
category = 'info'
class info(Attr):
singlevalue = False
optional = True
legend = u"Quelques informations"
category = 'info'
can_modify = ["Nounou", "Cableur", "Bureau"]
class homepageAlias(Attr):
singlevalue = True
optional = True
legend = u'Un alias pour la page personnelle'
can_modify = ["WebMaster", "Nounou", "Cableur"]
can_modify = ["Nounou", "Cableur"]
category = 'webpage'
class charteMA(Attr):
singlevalue = True
optional = True
legend= "Signale si l'adhérent a signé la charte de membres actifs"
can_modify = ["Nounou", "Bureau"]
category = 'perso'
def parse_value(self, signed, ldif):
if signed.upper() not in ["TRUE", "FALSE"]:
@ -569,16 +618,19 @@ class uidNumber(intAttr):
singlevalue = True
optional = True
legend = "L'uid du compte de l'adherent"
category = 'id'
class gidNumber(intAttr):
singlevalue = True
optional = True
legend = "Le gid du compte de l'adhérent"
category = 'id'
class gecos(Attr):
singlevalue = True
optional = True
legend = "Le gecos"
category = 'id'
def parse_value(self, gecos, ldif):
a, b, c, d = gecos.split(',')
@ -589,6 +641,7 @@ class mail(Attr):
optional = False
legend = "Le mail de l'adhérent"
can_modify = ["self", "Nounou", "Cableur"]
category = 'mail'
# XXX - to be implemented
#def parse_value(self, mail, ldif):
@ -597,20 +650,26 @@ class mail(Attr):
class cn(Attr):
singlevalue = True
optional = False
category = 'id'
class dn(Attr):
singlevalue = True
optional = False
category = 'id'
class postalAddress(Attr):
singlevalue = False
optional = True
can_modify = ["self", "Cableur", "Nounou", "Bureau"]
legend = u"Adresse"
category = 'perso'
class controle(Attr):
singlevalue = True
optional = False
legend = u"Contrôle"
can_modify = ["Tresorier", "Nounou"]
category = 'perso'
def parse_value(self, ctrl, ldif):
if ctrl not in [u"", u"c", u"p", u"cp", u"pc"]:
@ -631,6 +690,7 @@ CRANS_ATTRIBUTES= {
'prenom' : prenom,
'tel' : tel,
'paiement' : paiement,
'controle': controle,
'carteEtudiant' : carteEtudiant,
'mailAlias' : mailAlias,
'canonicalAlias' : canonicalAlias,

View file

@ -278,6 +278,19 @@ def new_cransldapobject(conn, dn, mode='ro', ldif = None):
class CransLdapObject(object):
"""Classe de base des objets CransLdap.
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):
'''
Créée une instance d'un objet Crans (machine, adhérent,
@ -533,7 +546,7 @@ class AssociationCrans(proprio):
class adherent(proprio):
u"""Adhérent crans."""
ufields = proprio.ufields + ['aid', 'prenom', 'tel', 'mail', 'mailInvalide']
ofields = proprio.ofields + ['charteMA', 'adherentPayant', 'typeAdhesion',
ofields = proprio.ofields + ['charteMA',
'canonicalAlias', 'solde', 'contourneGreylist',
'rewriteMailHeaders', 'derniereConnexion',
'homepageAlias']