[*] Corrections pour les blacklistes, ajout de la méthode blacklist actif, pgsql_test
This commit is contained in:
parent
1363c37f69
commit
014292eaaf
2 changed files with 33 additions and 13 deletions
13
attributs.py
13
attributs.py
|
@ -84,6 +84,7 @@ class Attr(object):
|
||||||
return unicode(self).encode('utf-8')
|
return unicode(self).encode('utf-8')
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
# XXX - Vérifier que cette méthode produit un objet parsable
|
||||||
assert isinstance(self.value, unicode)
|
assert isinstance(self.value, unicode)
|
||||||
return self.value
|
return self.value
|
||||||
|
|
||||||
|
@ -256,7 +257,11 @@ class chbre(Attr):
|
||||||
if val in (u"EXT", u"????"):
|
if val in (u"EXT", u"????"):
|
||||||
self.value = val
|
self.value = val
|
||||||
return
|
return
|
||||||
|
try:
|
||||||
annuaires_pg.chbre_prises(val[0], val[1:])
|
annuaires_pg.chbre_prises(val[0], val[1:])
|
||||||
|
except NameError:
|
||||||
|
import annuaires_pg_test
|
||||||
|
annuaires_pg_test.chbre_prises(val[0], val[1:])
|
||||||
self.value = val
|
self.value = val
|
||||||
|
|
||||||
class droits(Attr):
|
class droits(Attr):
|
||||||
|
@ -267,7 +272,7 @@ class droits(Attr):
|
||||||
|
|
||||||
def parse_value(self, val, ldif):
|
def parse_value(self, val, ldif):
|
||||||
if val.lower() not in ['apprenti', 'nounou', 'cableur', 'tresorier', 'bureau',
|
if val.lower() not in ['apprenti', 'nounou', 'cableur', 'tresorier', 'bureau',
|
||||||
'webmaster', 'webradio', 'imprimeur', 'multimachines', 'victime']:
|
'webmaster', 'webradio', 'imprimeur', 'multimachines', 'victime', 'moderateur']:
|
||||||
raise ValueError("Ces droits n'existent pas ('%s')" % val)
|
raise ValueError("Ces droits n'existent pas ('%s')" % val)
|
||||||
if val.lower() == 'webmaster':
|
if val.lower() == 'webmaster':
|
||||||
self.value = u'WebMaster'
|
self.value = u'WebMaster'
|
||||||
|
@ -314,7 +319,7 @@ class macAddress(Attr):
|
||||||
self.value = format_mac(mac)
|
self.value = format_mac(mac)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return unicode(self.value)
|
return unicode(self.value).lower()
|
||||||
|
|
||||||
|
|
||||||
class ipHostNumber(Attr):
|
class ipHostNumber(Attr):
|
||||||
|
@ -435,8 +440,8 @@ class blacklist(Attr):
|
||||||
return self.value['actif']
|
return self.value['actif']
|
||||||
|
|
||||||
def terminer(self):
|
def terminer(self):
|
||||||
self.value['fin'] = max(self.value['debut'], time.time() - 60)
|
self.value['fin'] = int(max(self.value['debut'], time.time() - 60))
|
||||||
self.actif = False
|
self.value['actif'] = False
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return u'%(debut)s$%(fin)s$%(type)s$%(comm)s' % self.value
|
return u'%(debut)s$%(fin)s$%(type)s$%(comm)s' % self.value
|
||||||
|
|
31
lc_ldap.py
31
lc_ldap.py
|
@ -275,8 +275,8 @@ class CransLdapObject(object):
|
||||||
self.dn, self.attrs = res[0]
|
self.dn, self.attrs = res[0]
|
||||||
|
|
||||||
self.attrs = ldif_to_uldif(self.attrs)
|
self.attrs = ldif_to_uldif(self.attrs)
|
||||||
if mode in ['w', 'rw']:
|
|
||||||
self.attrs = ldif_to_cldif(self.attrs, conn, check_ctxt = False)
|
self.attrs = ldif_to_cldif(self.attrs, conn, check_ctxt = False)
|
||||||
|
if mode in ['w', 'rw']:
|
||||||
### Vérification que `λv. str(Attr(v))` est bien une projection
|
### Vérification que `λv. str(Attr(v))` est bien une projection
|
||||||
oldif = res[0][1]
|
oldif = res[0][1]
|
||||||
nldif = cldif_to_ldif(self.attrs)
|
nldif = cldif_to_ldif(self.attrs)
|
||||||
|
@ -289,7 +289,7 @@ class CransLdapObject(object):
|
||||||
nvals = [nldif[attr][v.index(v)] for v in vals ]
|
nvals = [nldif[attr][v.index(v)] for v in vals ]
|
||||||
raise EnvironmentError("λv. str(Attr(v)) n'est peut-être pas une projection:", attr, nvals, vals)
|
raise EnvironmentError("λv. str(Attr(v)) n'est peut-être pas une projection:", attr, nvals, vals)
|
||||||
|
|
||||||
self._modifs = ldif_to_cldif(self.attrs, conn, check_ctxt = False)
|
self._modifs = ldif_to_cldif(ldif_to_uldif(res[0][1]), conn, check_ctxt = False)
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
"Vérifie que self._modifs contient des valeurs correctes et enregistre les modifications"
|
"Vérifie que self._modifs contient des valeurs correctes et enregistre les modifications"
|
||||||
|
@ -302,8 +302,16 @@ class CransLdapObject(object):
|
||||||
|
|
||||||
# Vérification des modifications
|
# Vérification des modifications
|
||||||
self.attrs = ldif_to_uldif(self.conn.search_s(self.dn, 0)[0][1])
|
self.attrs = ldif_to_uldif(self.conn.search_s(self.dn, 0)[0][1])
|
||||||
if self.attrs != self._modifs:
|
self.attrs = ldif_to_cldif(self.attrs, self.conn, check_ctxt=False)
|
||||||
raise EnvironmentError("Les modifications apportées à l'objet %s n'ont pas été correctement sauvegardées\nexpected = %s, found = %s" % (self.dn, self._modifs, self.attrs))
|
differences = []
|
||||||
|
# On fait les différences entre les deux dicos
|
||||||
|
for attr in set(self.attrs.keys()).union(set(self._modifs.keys())):
|
||||||
|
exp_vals = set([unicode(i) for i in self.attrs.get(attr,[])])
|
||||||
|
new_vals = set([unicode(i) for i in self._modifs.get(attr,[])])
|
||||||
|
if exp_vals != new_vals:
|
||||||
|
differences.append({"missing": exp_vals - new_vals, "having": new_vals - exp_vals})
|
||||||
|
if differences:
|
||||||
|
raise EnvironmentError("Les modifications apportées à l'objet %s n'ont pas été correctement sauvegardées\n%s" % (self.dn, differences))
|
||||||
|
|
||||||
def get_modlist(self):
|
def get_modlist(self):
|
||||||
"""Renvoie le dico des modifs"""
|
"""Renvoie le dico des modifs"""
|
||||||
|
@ -371,7 +379,14 @@ class CransLdapObject(object):
|
||||||
out.append(u"%s : [%s] %s" % (date, author, u" ; ".join(mod_list)))
|
out.append(u"%s : [%s] %s" % (date, author, u" ; ".join(mod_list)))
|
||||||
return out
|
return out
|
||||||
|
|
||||||
def blacklist(self, sanction, commentaire, debut=time.time(), fin = '-'):
|
def blacklist_actif(self):
|
||||||
|
"""Renvoie la liste des blacklistes actives sur l'entité"""
|
||||||
|
# XXX - Proposer de filtrer les blacklistes avec un arg supplémentaire ?
|
||||||
|
# XXX - Vérifier les blacklistes des machines pour les adhérents ?
|
||||||
|
attrs = (self.attrs if self.mode not in ["w", "rw"] else self._modifs)
|
||||||
|
return filter((lambda bl: bl.is_actif()), attrs.get("blacklist"))
|
||||||
|
|
||||||
|
def blacklist(self, sanction, commentaire, debut="now", fin = '-'):
|
||||||
u"""
|
u"""
|
||||||
Blacklistage de la ou de toutes la machines du propriétaire
|
Blacklistage de la ou de toutes la machines du propriétaire
|
||||||
* debut et fin sont le nombre de secondes depuis epoch
|
* debut et fin sont le nombre de secondes depuis epoch
|
||||||
|
@ -381,10 +396,10 @@ class CransLdapObject(object):
|
||||||
debut$fin$sanction$commentaire
|
debut$fin$sanction$commentaire
|
||||||
"""
|
"""
|
||||||
if debut == 'now':
|
if debut == 'now':
|
||||||
debut = time.time()
|
debut = int(time.time())
|
||||||
if fin == 'now':
|
if fin == 'now':
|
||||||
fin = time.time()
|
fin = int(time.time())
|
||||||
bl = blacklist(u'%s$%s$%s$%s' % (sanction, commentaire, debut, fin), {}, self.conn, False)
|
bl = 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)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue