[lc_ldap] On vire le from attributs import *, on corrige une faute de phrapp, et on vire les [xomu]fields, qu'on remplace par une variable attribs.
This commit is contained in:
parent
0d0d9d9676
commit
ecdfbd8962
1 changed files with 54 additions and 75 deletions
129
lc_ldap.py
129
lc_ldap.py
|
@ -58,7 +58,7 @@ sys.path.append('/usr/scripts/gestion')
|
||||||
|
|
||||||
import config
|
import config
|
||||||
import crans_utils
|
import crans_utils
|
||||||
from attributs import *
|
import attributs
|
||||||
from ldap_locks import CransLock
|
from ldap_locks import CransLock
|
||||||
|
|
||||||
uri = 'ldap://ldap.adm.crans.org/'
|
uri = 'ldap://ldap.adm.crans.org/'
|
||||||
|
@ -109,7 +109,7 @@ def ldif_to_cldif(ldif, conn, check_ctxt = True):
|
||||||
"""
|
"""
|
||||||
cldif = {}
|
cldif = {}
|
||||||
for attr, vals in ldif.items():
|
for attr, vals in ldif.items():
|
||||||
cldif[attr] = [ attrify(val, attr, ldif, conn, check_ctxt) for val in vals]
|
cldif[attr] = [ attributs.attrify(val, attr, ldif, conn, check_ctxt) for val in vals]
|
||||||
return cldif
|
return cldif
|
||||||
|
|
||||||
def cldif_to_ldif(cldif):
|
def cldif_to_ldif(cldif):
|
||||||
|
@ -153,7 +153,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||||
self.dn = dn
|
self.dn = dn
|
||||||
self.droits = self.search_s(dn, ldap.SCOPE_BASE, attrlist=['droits'])[0][1].get('droits', [])
|
self.droits = self.search_s(dn, ldap.SCOPE_BASE, attrlist=['droits'])[0][1].get('droits', [])
|
||||||
if dn == admin_dn:
|
if dn == admin_dn:
|
||||||
self.droits += [nounou]
|
self.droits += [attributs.nounou]
|
||||||
else:
|
else:
|
||||||
self.conn = self.simple_bind_s()
|
self.conn = self.simple_bind_s()
|
||||||
self.dn = None
|
self.dn = None
|
||||||
|
@ -209,7 +209,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||||
for m in mlist:
|
for m in mlist:
|
||||||
m._proprio = parent[dn]
|
m._proprio = parent[dn]
|
||||||
allmachines.append(m)
|
allmachines.append(m)
|
||||||
return allmachines,parent.values() # on renvoie la liste des machines et des adherents (dont club et crans)
|
return allmachines, parent.values() # on renvoie la liste des machines et des adherents (dont club et crans)
|
||||||
|
|
||||||
def allMachines(self):
|
def allMachines(self):
|
||||||
"""Renvoie la liste de toutes les machines, Conçue pour
|
"""Renvoie la liste de toutes les machines, Conçue pour
|
||||||
|
@ -321,7 +321,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
# On crée l'attribut associé, pour parser sa valeur.
|
# On crée l'attribut associé, pour parser sa valeur.
|
||||||
my_id = attrify(unicode(i), attr, {}, self, False)
|
my_id = attributs.attrify(unicode(i), attr, {}, self, False)
|
||||||
if my_id.value != i:
|
if my_id.value != i:
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
|
@ -340,20 +340,20 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if obj.dn.endswith(self.dn) and obj.dn != self.dn:
|
if obj.dn.endswith(self.dn) and obj.dn != self.dn:
|
||||||
return [parent]
|
return [attributs.parent]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
def _is_self(obj1, obj2):
|
def _is_self(self, obj):
|
||||||
"""
|
"""
|
||||||
Teste si l'objet qui se binde est celui qui est en cours de modif.
|
Teste si l'objet qui se binde est celui qui est en cours de modif.
|
||||||
Retourne une liste qui s'ajoutera à la liste des droits
|
Retourne une liste qui s'ajoutera à la liste des droits
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if obj.dn == self.dn:
|
if obj.dn == self.dn:
|
||||||
return [soi]
|
return [attributs.soi]
|
||||||
else:
|
else:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@ -427,22 +427,12 @@ class CransLdapObject(object):
|
||||||
Cette classe ne devrait pas être utilisée directement."""
|
Cette classe ne devrait pas être utilisée directement."""
|
||||||
|
|
||||||
""" Qui peut faire quoi ? """
|
""" Qui peut faire quoi ? """
|
||||||
can_be_by = { created: [nounou],
|
can_be_by = { created: [attributs.nounou],
|
||||||
modified: [nounou],
|
modified: [attributs.nounou],
|
||||||
deleted: [nounou],
|
deleted: [attributs.nounou],
|
||||||
}
|
}
|
||||||
|
|
||||||
""" Champs uniques et nécessaires """
|
attribs = []
|
||||||
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):
|
||||||
'''
|
'''
|
||||||
|
@ -508,7 +498,7 @@ class CransLdapObject(object):
|
||||||
|
|
||||||
def _get_fields(self):
|
def _get_fields(self):
|
||||||
"""Renvoie la liste des champs LDAP de l'objet"""
|
"""Renvoie la liste des champs LDAP de l'objet"""
|
||||||
return self.ofields + self.xfields + self.ufields + self.mfields
|
return self.attribs
|
||||||
fields = property(_get_fields)
|
fields = property(_get_fields)
|
||||||
|
|
||||||
def history_add(self, login, chain):
|
def history_add(self, login, chain):
|
||||||
|
@ -596,17 +586,16 @@ class CransLdapObject(object):
|
||||||
return []
|
return []
|
||||||
raise KeyError(attr)
|
raise KeyError(attr)
|
||||||
|
|
||||||
def has_key(self,attr):
|
def has_key(self, attr):
|
||||||
"""Est-ce que notre objet a l'attribut en question ?"""
|
"""Est-ce que notre objet a l'attribut en question ?"""
|
||||||
return attr in self.ofields or attr in self.xfields or\
|
return attr in [attrib.__class__.__name__ for attrib in self.attributs]
|
||||||
attr in self.ufields or attr in self.mfields
|
|
||||||
|
|
||||||
def __setitem__(self, attr, values):
|
def __setitem__(self, attr, values):
|
||||||
if self.mode not in ['w', 'rw']:
|
if self.mode not in ['w', 'rw']:
|
||||||
raise ValueError("Objet en lecture seule")
|
raise ValueError("Objet en lecture seule")
|
||||||
if not isinstance(values, list):
|
if not isinstance(values, list):
|
||||||
values = [ values ]
|
values = [ values ]
|
||||||
self._modifs[attr] = [ attrify(val, attr, self._modifs, self.conn) for val in values ]
|
self._modifs[attr] = [ attributs.attrify(val, attr, self._modifs, self.conn) for val in values ]
|
||||||
|
|
||||||
def search_historique(self, ign_fields=HIST_IGNORE_FIELDS):
|
def search_historique(self, ign_fields=HIST_IGNORE_FIELDS):
|
||||||
u"""Récupère l'historique
|
u"""Récupère l'historique
|
||||||
|
@ -657,10 +646,10 @@ class CransLdapObject(object):
|
||||||
# blacklistes virtuelle si on est un adhérent pour carte étudiant et chambre invalides
|
# blacklistes virtuelle si on est un adhérent pour carte étudiant et chambre invalides
|
||||||
if self.__class__.__name__ == "adherent" and self.paiement_ok():
|
if self.__class__.__name__ == "adherent" and self.paiement_ok():
|
||||||
if not config.periode_transitoire and config.bl_carte_et_actif and not self.carte_ok() and not self.sursis_carte():
|
if not config.periode_transitoire and config.bl_carte_et_actif and not self.carte_ok() and not self.sursis_carte():
|
||||||
bl = blacklist(u'%s$%s$%s$%s' % ('-', '-', 'carte_etudiant', ''), {}, self.conn, False)
|
bl = attributs.blacklist(u'%s$%s$%s$%s' % ('-', '-', 'carte_etudiant', ''), {}, self.conn, False)
|
||||||
blacklist_liste.append(bl)
|
blacklist_liste.append(bl)
|
||||||
if self['chbre'][0].value == '????':
|
if self['chbre'][0].value == '????':
|
||||||
bl = blacklist(u'%s$%s$%s$%s' % ('-', '-', 'chambre_invalide', ''), {}, self.conn, False)
|
bl = attributs.blacklist(u'%s$%s$%s$%s' % ('-', '-', 'chambre_invalide', ''), {}, self.conn, False)
|
||||||
blacklist_liste.append(bl)
|
blacklist_liste.append(bl)
|
||||||
attrs = (self.attrs if self.mode not in ["w", "rw"] else self._modifs)
|
attrs = (self.attrs if self.mode not in ["w", "rw"] else self._modifs)
|
||||||
blacklist_liste.extend(filter((lambda bl: bl.is_actif()), attrs.get("blacklist",[])))
|
blacklist_liste.extend(filter((lambda bl: bl.is_actif()), attrs.get("blacklist",[])))
|
||||||
|
@ -679,22 +668,19 @@ class CransLdapObject(object):
|
||||||
debut = int(time.time())
|
debut = int(time.time())
|
||||||
if fin == 'now':
|
if fin == 'now':
|
||||||
fin = int(time.time())
|
fin = int(time.time())
|
||||||
bl = blacklist(u'%s$%s$%s$%s' % (debut, fin, sanction, commentaire), {}, self.conn, False)
|
bl = attributs.blacklist(u'%s$%s$%s$%s' % (debut, fin, sanction, commentaire), {}, self.conn, False)
|
||||||
|
|
||||||
self._modifs.setdefault('blacklist', []).append(bl)
|
self._modifs.setdefault('blacklist', []).append(bl)
|
||||||
|
|
||||||
|
|
||||||
class proprio(CransLdapObject):
|
class proprio(CransLdapObject):
|
||||||
u""" Un propriétaire de machine (adhérent, club…) """
|
u""" Un propriétaire de machine (adhérent, club…) """
|
||||||
can_be_by = { created: [nounou, bureau, cableur],
|
can_be_by = { created: [attributs.nounou, attributs.bureau, attributs.cableur],
|
||||||
modified: [nounou, bureau, soi, cableur],
|
modified: [attributs.nounou, attributs.bureau, attributs.soi, attributs.cableur],
|
||||||
deleted: [nounou, bureau],
|
deleted: [attributs.nounou, attributs.bureau],
|
||||||
}
|
}
|
||||||
|
|
||||||
ufields = [ 'nom', 'chbre' ]
|
attribs = [attributs.nom, attributs.chbre, attributs.paiement, attributs.info, attributs.blacklist, attributs.controle]
|
||||||
mfields = [ 'paiement', 'info', 'blacklist', 'controle']
|
|
||||||
ofields = []
|
|
||||||
xfields = []
|
|
||||||
|
|
||||||
def __init__(self, conn, dn, mode='ro', ldif = None, machines=[]):
|
def __init__(self, conn, dn, mode='ro', ldif = None, machines=[]):
|
||||||
super(proprio, self).__init__(conn, dn, mode, ldif)
|
super(proprio, self).__init__(conn, dn, mode, ldif)
|
||||||
|
@ -780,16 +766,16 @@ class proprio(CransLdapObject):
|
||||||
|
|
||||||
class machine(CransLdapObject):
|
class machine(CransLdapObject):
|
||||||
u""" Une machine """
|
u""" Une machine """
|
||||||
can_be_by = { created: [nounou, bureau, cableur, parent],
|
can_be_by = { created: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent],
|
||||||
modified: [nounou, bureau, cableur, parent],
|
modified: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent],
|
||||||
deleted: [nounou, bureau, cableur, parent],
|
deleted: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent],
|
||||||
}
|
}
|
||||||
|
|
||||||
ufields = ['mid', 'macAddress', 'host', 'midType']
|
attribs = [attributs.mid, attributs.macAddress, attributs.host, attributs.midType,
|
||||||
ofields = ['rid']
|
attributs.rid, attributs.info, attributs.blacklist, attributs.hostAlias,
|
||||||
mfields = ['info', 'blacklist', 'hostAlias', 'exempt',
|
attributs.exempt, attributs.portTCPout, attributs.portTCPin,
|
||||||
'portTCPout', 'portTCPin', 'portUDPout', 'portUDPin','sshFingerprint', 'ipHostNumber', 'ip6HostNumber']
|
attributs.portUDPout, attributs.portUDPin, attributs.sshFingerprint,
|
||||||
xfields = []
|
attributs.ipHostNumber, attributs.ip6HostNumber]
|
||||||
|
|
||||||
def __init__(self, conn, dn, mode='ro', ldif = None):
|
def __init__(self, conn, dn, mode='ro', ldif = None):
|
||||||
super(machine, self).__init__(conn, dn, mode, ldif)
|
super(machine, self).__init__(conn, dn, mode, ldif)
|
||||||
|
@ -819,17 +805,15 @@ 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', 'uid']
|
attribs = proprio.attribs + [attributs.aid, attributs.prenom, attributs.tel,
|
||||||
ofields = proprio.ofields + ['charteMA',
|
attributs.mail, attributs.mailInvalide, attributs.uid,
|
||||||
'canonicalAlias', 'solde', 'contourneGreylist',
|
attributs.charteMA, attributs.canonicalAlias, attributs.solde,
|
||||||
'rewriteMailHeaders', 'derniereConnexion',
|
attributs.contourneGreylist, attributs.derniereConnexion,
|
||||||
'homepageAlias','gpgFingerprint',
|
attributs.homepageAlias, attributs.gpgFingerprint,
|
||||||
'compteWiki',
|
attributs.carteEtudiant, attributs.mailAlias,
|
||||||
]
|
attributs.droits, attributs.etudes, attributs.postalAddress]
|
||||||
mfields = proprio.mfields + ['carteEtudiant', 'mailAlias', 'droits' ]
|
|
||||||
xfields = ['etudes', 'postalAddress']
|
|
||||||
|
|
||||||
def compte(self,login = None, uidNumber=0, hash_pass = '', shell=config.login_shell):
|
def compte(self, login = None, uidNumber=0, hash_pass = '', shell=config.login_shell):
|
||||||
u"""Renvoie le nom du compte crans. S'il n'existe pas, et que uid
|
u"""Renvoie le nom du compte crans. S'il n'existe pas, et que uid
|
||||||
est précisé, le crée."""
|
est précisé, le crée."""
|
||||||
|
|
||||||
|
@ -898,8 +882,7 @@ class adherent(proprio):
|
||||||
|
|
||||||
class club(proprio):
|
class club(proprio):
|
||||||
u"""Club crans"""
|
u"""Club crans"""
|
||||||
ufields = ['cid', 'responsable']
|
attribs = proprio.attribs + [attributs.cid, attributs.responsable, attributs.imprimeurClub]
|
||||||
mfields = ['imprimeurClub']
|
|
||||||
|
|
||||||
class machineFixe(machine):
|
class machineFixe(machine):
|
||||||
u"""Machine fixe"""
|
u"""Machine fixe"""
|
||||||
|
@ -907,35 +890,31 @@ class machineFixe(machine):
|
||||||
|
|
||||||
class machineWifi(machine):
|
class machineWifi(machine):
|
||||||
u"""Machine wifi"""
|
u"""Machine wifi"""
|
||||||
ufields = machine.ufields + ['ipsec']
|
attribs = machine.attribs + [attributs.ipsec]
|
||||||
|
|
||||||
class machineCrans(machine):
|
class machineCrans(machine):
|
||||||
can_be_by = { created: [nounou],
|
can_be_by = { created: [attributs.nounou],
|
||||||
modified: [nounou],
|
modified: [attributs.nounou],
|
||||||
deleted: [nounou],
|
deleted: [attributs.nounou],
|
||||||
}
|
}
|
||||||
ufields = machine.ufields + ['prise']
|
attribs = machine.attribs + [attributs.prise, attributs.nombrePrises]
|
||||||
ofields = machine.ofields + ['nombrePrises']
|
|
||||||
|
|
||||||
class borneWifi(machine):
|
class borneWifi(machine):
|
||||||
can_be_by = { created: [nounou],
|
can_be_by = { created: [attributs.nounou],
|
||||||
modified: [nounou],
|
modified: [attributs.nounou],
|
||||||
deleted: [nounou],
|
deleted: [attributs.nounou],
|
||||||
}
|
}
|
||||||
ufields = machine.ufields + ['canal', 'puissance', 'hotspot',
|
attribs = machine.attribs + [attributs.canal, attributs.puissance, attributs.hotspot,
|
||||||
'prise', 'positionBorne', 'nvram']
|
attributs.prise, attributs.positionBorne, attributs.nvram]
|
||||||
|
|
||||||
class facture(CransLdapObject):
|
class facture(CransLdapObject):
|
||||||
can_be_by = { created: [nounou, bureau, cableur],
|
can_be_by = { created: [attributs.nounou, attributs.bureau, attributs.cableur],
|
||||||
modified: [nounou, bureau, cableur],
|
modified: [attributs.nounou, attributs.bureau, attributs.cableur],
|
||||||
deleted: [nounou, bureau, cableur],
|
deleted: [attributs.nounou, attributs.bureau, attributs.cableur],
|
||||||
}
|
}
|
||||||
ufields = ['fid', 'modePaiement', 'recuPaiement']
|
attribs = [attributs.fid, attributs.modePaiement, attributs.recuPaiement]
|
||||||
|
|
||||||
class service(CransLdapObject): pass
|
class service(CransLdapObject): pass
|
||||||
|
|
||||||
class lock(CransLdapObject): pass
|
class lock(CransLdapObject): pass
|
||||||
|
|
||||||
|
|
||||||
MODIFIABLE_ATTRS = [ 'tel', 'chbre', 'mailAlias', 'loginShell' ]
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue