[lc_ldap] Changement de protocole dans la création des objets

* _create_entity a été changée pour récupérer des dicos de valeurs encodées,
 on adapte les méthodes new* en virant les uldifs, et en rendant l'historique
 non unicode.
 * Ipsec est facultatif, donc on le crée après avoir instancié la machine, que
 l'on souhaite instancier le plus tôt possible, et on en laisse la gestion
 à attributs, pour le parsage etc
This commit is contained in:
Pierre-Elliott Bécue 2013-05-08 02:18:13 +02:00
parent 3b09c98c5b
commit b5a6062c44
2 changed files with 34 additions and 27 deletions

View file

@ -249,7 +249,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
_,adherents = self.allMachinesAdherents()
return adherents
def newMachine(self, parent, realm, uldif, login=None):
def newMachine(self, parent, realm, ldif, login=None):
"""Crée une nouvelle machine: ``realm`` peut être:
fil, fil-v6, wifi, wifi-v6, adm, gratuit, personnel-ens, special
--Partiellement implémenté"""
@ -257,20 +257,19 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
owner = self.search('objectClass=*', dn=parent, scope=0)[0]
if realm in ["adm", "serveurs", "serveurs-v6", "adm-v6"]:
uldif['objectClass'] = [u'machineCrans']
ldif['objectClass'] = ['machineCrans']
assert isinstance(owner, AssociationCrans)
elif realm == "bornes":
uldif['objectClass'] = [u'borneWifi']
ldif['objectClass'] = ['borneWifi']
assert isinstance(owner, AssociationCrans)
elif realm in ["wifi", "wifi-v6"]:
uldif['objectClass'] = [u'machineWifi']
uldif['ipsec'] = [u''.join( random.choice(filter(lambda x: x != 'l' and x != 'o', string.lowercase) + filter(lambda x: x != '1' and x != '0', string.digits)) for i in range(10))]
ldif['objectClass'] = ['machineWifi']
assert isinstance(owner, adherent) or isinstance(owner, club)
elif realm in ["adherents", "fil-adherents", "fil-v6", "personnel-ens"]:
uldif['objectClass'] = [u'machineFixe']
ldif['objectClass'] = ['machineFixe']
assert isinstance(owner, adherent) or isinstance(owner, club)
else: raise ValueError("Realm inconnu: %r" % realm)
@ -279,47 +278,46 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
plage = xrange( *(config.rid[realm]))
# On récupère le premier id libre dans la plages s'il n'est pas
# déjà précisé dans le ldiff
rid = uldif.setdefault('rid', [ unicode(self._find_id('rid', plage)) ])
rid = ldif.setdefault('rid', [ self._find_id('rid', plage) ])
# La machine peut-elle avoir une ipv4 ?
if 'v6' not in realm:
uldif['ipHostNumber'] = [ unicode(crans_utils.ip4_of_rid(int(rid[0]))) ]
uldif['ip6HostNumber'] = [ unicode(crans_utils.ip6_of_mac(uldif['macAddress'][0], int(rid[0]))) ]
ldif['ipHostNumber'] = [ crans_utils.ip4_of_rid(int(rid[0])) ]
ldif['ip6HostNumber'] = [ crans_utils.ip6_of_mac(ldif['macAddress'][0], int(rid[0])) ]
# Mid
uldif['mid'] = [ unicode(self._find_id('mid')) ]
ldif['mid'] = [ self._find_id('mid') ]
# Tout doit disparaître !!
machine = self._create_entity('mid=%s,%s' % (uldif['mid'][0], parent), uldif)
machine = self._create_entity('mid=%s,%s' % (ldif['mid'][0], parent), ldif)
login = login or current_user
machine.history_add(login, u"inscription")
machine.history_add(login, "inscription")
if machine.may_be(created, self.droits + self._check_parent(machine.dn)):
machine.create()
return machine
else:
raise EnvironmentError("Vous n'avez pas le droit de créer cette machine.")
return machine
def newAdherent(self, uldif):
def newAdherent(self, ldif):
"""Crée un nouvel adhérent"""
aid = uldif.setdefault('aid', [ unicode(self._find_id('aid')) ])
uldif['objectClass'] = [u'adherent']
adherent = self._create_entity('aid=%s,%s' % (aid[0], base_dn), uldif)
aid = ldif.setdefault('aid', [ self._find_id('aid') ])
ldif['objectClass'] = ['adherent']
adherent = self._create_entity('aid=%s,%s' % (aid[0], base_dn), ldif)
if adherent.may_be(created, self.droits):
adherent.create()
return adherent
else:
raise EnvironmentError("Vous n'avez pas le droit de créer cet adhérent.")
def newClub(self, uldif):
def newClub(self, ldif):
"""Crée un nouveau club"""
cid = uldif.setdefault('cid', [ unicode(self._find_id('cid')) ])
uldif['objectClass'] = [u'club']
club = self._create_entity('cid=%s,%s' % (cid[0], base_dn), uldif)
cid = ldif.setdefault('cid', [ self._find_id('cid') ])
ldif['objectClass'] = ['club']
club = self._create_entity('cid=%s,%s' % (cid[0], base_dn), ldif)
if club.may_be(created, self.droits):
club.create()
return club
else:
raise EnvironmentError("Vous n'avez pas le droit de créer cet adhérent.")
def newFacture(self, uldif):
def newFacture(self, ldif):
"""Crée une nouvelle facture
--Non implémenté !"""
raise NotImplementedError()
@ -548,9 +546,9 @@ class CransLdapObject(object):
###ATTENTION : C'est un kludge pour pouvoir continuer à faire "comme avant",
### mais on devrait tout recoder pour utiliser l'historique LDAP"""
assert isinstance(login, str) or isinstance(login, unicode)
assert isinstance(chain, unicode)
assert isinstance(chain, str)
new_line = u"%s, %s : %s" % (time.strftime("%d/%m/%Y %H:%M"), login, chain)
new_line = "%s, %s : %s" % (time.strftime("%d/%m/%Y %H:%M"), login, chain)
# Attention, le __setitem__ est surchargé, mais pas .append sur l'historique
self["historique"] = self.get("historique", []) + [new_line]