[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

@ -633,6 +633,15 @@ class ipsec(Attr):
legend = u'Clef wifi' legend = u'Clef wifi'
category = 'wifi' category = 'wifi'
def parse_value(self, val):
val = str(val)
if len(val) == 10:
self.value = val
else:
val = 'auto'
if val == "auto":
selv.value = ''.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))
class puissance(Attr): class puissance(Attr):
singlevalue = True singlevalue = True
optional = True optional = True

View file

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