[lc_ldap] Creation de machines, sanity checks
This commit is contained in:
parent
22a8e3be78
commit
db8b27e6a5
2 changed files with 40 additions and 92 deletions
86
attributs.py
86
attributs.py
|
@ -85,7 +85,7 @@ class Attr:
|
||||||
"""Vérifie si l'attribut est modifiable"""
|
"""Vérifie si l'attribut est modifiable"""
|
||||||
return False
|
return False
|
||||||
|
|
||||||
Class nom(Attr):
|
class nom(Attr):
|
||||||
singlevalue = True
|
singlevalue = True
|
||||||
optional = False
|
optional = False
|
||||||
legend = "Nom"
|
legend = "Nom"
|
||||||
|
@ -94,7 +94,7 @@ Class nom(Attr):
|
||||||
def normalize(self, values):
|
def normalize(self, values):
|
||||||
return [ values.strip().capitalize() for v in values ]
|
return [ values.strip().capitalize() for v in values ]
|
||||||
|
|
||||||
Class prenom(Attr):
|
class prenom(Attr):
|
||||||
singlevalue = True
|
singlevalue = True
|
||||||
optional = False
|
optional = False
|
||||||
legend = u"Prénom"
|
legend = u"Prénom"
|
||||||
|
@ -227,85 +227,3 @@ class historique(Attr):
|
||||||
legend = u"Historique de l'objet"
|
legend = u"Historique de l'objet"
|
||||||
|
|
||||||
|
|
||||||
# CRANS_ATTRIBUTES = {
|
|
||||||
# 'nom' : { 'attr' : 'nom',
|
|
||||||
# 'hname' : 'Nom',
|
|
||||||
# 'isunique' : True },
|
|
||||||
# 'prenom' : { 'attr' : 'prenom',
|
|
||||||
# 'hname' : u'Prénom',
|
|
||||||
# 'isunique' : True },
|
|
||||||
# 'tel' : { 'attr' : 'tel',
|
|
||||||
# 'hname' : 'Téléphone',
|
|
||||||
# 'isunique' : True },
|
|
||||||
# 'paiement' : { 'attr' : 'paiement',
|
|
||||||
# 'hname' : u'Années de cotisations',
|
|
||||||
# 'isunique' : False },
|
|
||||||
# 'carteEtudiant' : { 'attr' : 'carteEtudiant',
|
|
||||||
# 'hname' : u'Carte fournie pour les années',
|
|
||||||
# 'isunique' : False },
|
|
||||||
# 'mailAlias' : { 'attr' : 'mailAlias',
|
|
||||||
# 'hname' : 'Alias mail',
|
|
||||||
# 'isunique' : False },
|
|
||||||
# 'canonicalAlias' : { 'attr' : 'canonicalAlias',
|
|
||||||
# 'hname' : 'Alias mail canonique',
|
|
||||||
# 'isunique' : True },
|
|
||||||
# 'etudes' : { 'attr' : 'etudes',
|
|
||||||
# 'hname' : u'Études suivies',
|
|
||||||
# 'isunique' : False },
|
|
||||||
# 'chbre' : { 'attr' : 'chbre',
|
|
||||||
# 'hname' : 'Chambre',
|
|
||||||
# 'isunique' : True },
|
|
||||||
# 'droits' : { 'attr' : 'droits',
|
|
||||||
# 'hname' : 'Droits',
|
|
||||||
# 'isunique' : False },
|
|
||||||
# 'solde' : { 'attr' : 'solde',
|
|
||||||
# 'hname' : "Solde sur le compte d'impression",
|
|
||||||
# 'isunique' : True },
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# 'mid' : { 'attr' : 'mid',
|
|
||||||
# 'hname' : 'Identifiant de machine',
|
|
||||||
# 'isunique' : True },
|
|
||||||
# 'hostAlias' : { 'attr' : 'hostAlias',
|
|
||||||
# 'hname' : 'Alias de nom de machine',
|
|
||||||
# 'isunique' : False },
|
|
||||||
# 'ipsec' : { 'attr' : 'ipsec',
|
|
||||||
# 'hname' : 'Clef wifi',
|
|
||||||
# 'isunique' : True },
|
|
||||||
# 'puissance' : { 'attr' : 'puissance',
|
|
||||||
# 'hname' : u"Puissance d'émission de la borne wifi",
|
|
||||||
# 'isunique' : True },
|
|
||||||
# 'canal' : { 'attr' : 'canal',
|
|
||||||
# 'hname' : u"Canal d'émission de la borne wifi",
|
|
||||||
# 'isunique' : True },
|
|
||||||
# 'portTCPout' : { 'attr' : 'portTCPout',
|
|
||||||
# 'hname' : u"Port TCP ouvert vers l'extérieur",
|
|
||||||
# 'isunique' : False },
|
|
||||||
# 'portTCPin' : { 'attr' : 'portTCPin',
|
|
||||||
# 'hname' : u"Port TCP ouvert depuis l'extérieur",
|
|
||||||
# 'isunique' : False },
|
|
||||||
# 'portUDPout' : { 'attr' : 'portUDPout',
|
|
||||||
# 'hname' : u"Port UDP ouvert vers l'extérieur",
|
|
||||||
# 'isunique' : False },
|
|
||||||
# 'portUDPin' : { 'attr' : 'portUDPin',
|
|
||||||
# 'hname' : u"Port UDP ouvert depuis l'extérieur",
|
|
||||||
# 'isunique' : False },
|
|
||||||
# 'prise' : { 'attr' : 'prise',
|
|
||||||
# 'hname' : 'Prise sur laquelle est branchée la machine',
|
|
||||||
# 'isunique' : True },
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# 'cid' : { 'attr' : 'cid',
|
|
||||||
# 'hname' : 'Identifiant de club',
|
|
||||||
# 'isunique' : True },
|
|
||||||
# 'responsable' : { 'attr' : 'responsable',
|
|
||||||
# 'hname' : 'Responsable du club',
|
|
||||||
# 'isunique' : True },
|
|
||||||
#
|
|
||||||
# 'blacklist' : {'attr' : 'blacklist',
|
|
||||||
# 'hname' : 'Historique des sanctions',
|
|
||||||
# 'isunique' : False },
|
|
||||||
# 'historique' : { 'attr' : 'historique',
|
|
||||||
# 'hname' : 'Historique des modifications',
|
|
||||||
# 'isunique' : False },
|
|
||||||
# }
|
|
||||||
|
|
46
lc_ldap.py
46
lc_ldap.py
|
@ -102,8 +102,8 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
||||||
else:
|
else:
|
||||||
self.conn = self.simple_bind_s()
|
self.conn = self.simple_bind_s()
|
||||||
|
|
||||||
def search(self, filter, mode='ro', dn= base_dn, scope= 2, sizelimit=400):
|
def search(self, filterstr, mode='ro', dn= base_dn, scope= 2, sizelimit=400):
|
||||||
res = self.search_ext_s(dn, scope, filter, sizelimit=sizelimit)
|
res = self.search_ext_s(dn, scope, filterstr, sizelimit=sizelimit)
|
||||||
return [ CransLdapObject(self, r[0], mode=mode) for r in res ]
|
return [ CransLdapObject(self, r[0], mode=mode) for r in res ]
|
||||||
|
|
||||||
def allMachines(self):
|
def allMachines(self):
|
||||||
|
@ -122,13 +122,41 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
||||||
return machines
|
return machines
|
||||||
|
|
||||||
def newMachine(self, parent, realm, uldif):
|
def newMachine(self, parent, realm, uldif):
|
||||||
"""Crée une nouvelle machine"""
|
"""Crée une nouvelle machine: realm peut être:
|
||||||
raise NotImplementedError()
|
adm, serveurs, bornes, wifi, adherents, gratuit ou personnel-ens"""
|
||||||
|
owner = self.search('objectClass=*', dn=parent, scope=0)[0]
|
||||||
|
|
||||||
|
if realm in ["adm", "serveurs"]:
|
||||||
|
uldif['objectClass'] = [u'machineCrans']
|
||||||
|
assert isinstance(owner, AssociationCrans)
|
||||||
|
# XXX - Vérifier les droits
|
||||||
|
|
||||||
|
elif realm == "bornes":
|
||||||
|
uldif['objectClass'] = [u'borneWifi']
|
||||||
|
assert isinstance(owner, AssociationCrans)
|
||||||
|
# XXX - Vérifier les droits
|
||||||
|
|
||||||
|
elif realm in ["wifi", "wifi-adh"]:
|
||||||
|
uldif['objectClass'] = [u'machineWifi']
|
||||||
|
realm = "wifi-adh"
|
||||||
|
assert isinstance(owner, adherent) or isinstance(owner, club)
|
||||||
|
# XXX - Vérifier les droits (owner.type_connexion)
|
||||||
|
|
||||||
|
elif realm in ["adherent", "gratuit", "personnel-ens"]:
|
||||||
|
uldif['objectClass'] = [u'machineFixe']
|
||||||
|
assert isinstance(owner, adherent) or isinstance(owner, club)
|
||||||
|
# XXX - Vérifier les droits
|
||||||
|
|
||||||
|
else: raise ValueError("Realm inconnu: %s" % realm)
|
||||||
|
|
||||||
|
plage = config.NETs[realm]
|
||||||
|
mid = uldif.setdefault('mid', [ unicode(self._find_id('mid', plage)) ])
|
||||||
|
return self._create_entity('mid=%s,%s' % (aid[0], parent), uldif)
|
||||||
|
|
||||||
def newAdherent(self, uldif):
|
def newAdherent(self, uldif):
|
||||||
"""Crée un nouvel adhérent"""
|
"""Crée un nouvel adhérent"""
|
||||||
aid = uldif.setdefault('aid', [ unicode(self._find_id('aid')) ])
|
aid = uldif.setdefault('aid', [ unicode(self._find_id('aid')) ])
|
||||||
# XXX - autres tests
|
uldif['objectClass'] = [u'adherent']
|
||||||
return self._create_entity('aid=%s,%s' % (aid[0], base_dn), uldif)
|
return self._create_entity('aid=%s,%s' % (aid[0], base_dn), uldif)
|
||||||
|
|
||||||
def newClub(self, uldif):
|
def newClub(self, uldif):
|
||||||
|
@ -142,13 +170,15 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
||||||
def _create_entity(self, dn, uldif):
|
def _create_entity(self, dn, uldif):
|
||||||
'''Crée une nouvelle entité ldap en dn, avec attributs ldif:
|
'''Crée une nouvelle entité ldap en dn, avec attributs ldif:
|
||||||
uniquement en unicode'''
|
uniquement en unicode'''
|
||||||
|
for attr, vals in uldif:
|
||||||
|
nuldiff = self.normalize_and_validate(attr, vals)
|
||||||
lock = CransLock(self)
|
lock = CransLock(self)
|
||||||
for item in ['aid', 'uid', 'chbre', 'mailAlias', 'canonicalAlias',
|
for item in ['aid', 'uid', 'chbre', 'mailAlias', 'canonicalAlias',
|
||||||
'fid', 'cid', 'mid', 'macAddress', 'host', 'hostAlias' ]:
|
'fid', 'cid', 'mid', 'macAddress', 'host', 'hostAlias' ]:
|
||||||
for val in uldif.get(item, []):
|
for val in nuldif.get(item, []):
|
||||||
lock.add(item, val)
|
lock.add(item, val)
|
||||||
#uldif['historique'] = [ self._hist('Création')]
|
#uldif['historique'] = [ self._hist('Création')]
|
||||||
ldif = uldif_to_ldif(uldif)
|
ldif = uldif_to_ldif(nuldif)
|
||||||
modlist = addModlist(ldif)
|
modlist = addModlist(ldif)
|
||||||
with lock:
|
with lock:
|
||||||
# print dn, modlist
|
# print dn, modlist
|
||||||
|
@ -223,7 +253,7 @@ class CransLdapObject:
|
||||||
histo = self._gen_hist(self._modifs)
|
histo = self._gen_hist(self._modifs)
|
||||||
self._modifs['historique'] += histo
|
self._modifs['historique'] += histo
|
||||||
for attr, vals in self._modifs.items:
|
for attr, vals in self._modifs.items:
|
||||||
self._modifs[attr] = self.validate_and_normalize(attr, vals)
|
self._modifs[attr] = self.normalize_and_validate(attr, vals)
|
||||||
|
|
||||||
# On récupère la liste des modifications
|
# On récupère la liste des modifications
|
||||||
modlist = self.get_modlist()
|
modlist = self.get_modlist()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue