[lc_ldap] Corrections de bugs, et cohérence de code.
This commit is contained in:
parent
6d4d56db72
commit
7ed1874d62
4 changed files with 26 additions and 14 deletions
|
@ -48,7 +48,7 @@ import random
|
||||||
import string
|
import string
|
||||||
from unicodedata import normalize
|
from unicodedata import normalize
|
||||||
from crans_utils import format_tel, format_mac, mailexist, validate_name, ip4_of_rid, ip6_of_mac, fetch_cert_info
|
from crans_utils import format_tel, format_mac, mailexist, validate_name, ip4_of_rid, ip6_of_mac, fetch_cert_info
|
||||||
from crans_utils import toGeneralizedTimeFormat, fromGeneralizedTimeFormat, extractTz
|
from crans_utils import to_generalized_time_format, from_generalized_time_format
|
||||||
import itertools
|
import itertools
|
||||||
|
|
||||||
sys.path.append("/usr/scripts")
|
sys.path.append("/usr/scripts")
|
||||||
|
@ -457,6 +457,7 @@ class uid(Attr):
|
||||||
legend = u"L'identifiant canonique de l'adhérent"
|
legend = u"L'identifiant canonique de l'adhérent"
|
||||||
category = 'perso'
|
category = 'perso'
|
||||||
unique = True
|
unique = True
|
||||||
|
can_modify = [nounou]
|
||||||
ldap_name = "uid"
|
ldap_name = "uid"
|
||||||
|
|
||||||
@crans_attribute
|
@crans_attribute
|
||||||
|
@ -601,13 +602,13 @@ class generalizedTimeFormat(Attr):
|
||||||
if isinstance(gtf, str) or isinstance(gtf, unicode):
|
if isinstance(gtf, str) or isinstance(gtf, unicode):
|
||||||
if not ('Z' in gtf or '+' in gtf or '-' in gtf):
|
if not ('Z' in gtf or '+' in gtf or '-' in gtf):
|
||||||
self._stamp = gtf
|
self._stamp = gtf
|
||||||
self.value = toGeneralizedTimeFormat(float(gtf))
|
self.value = to_generalized_time_format(float(gtf))
|
||||||
else:
|
else:
|
||||||
self._stamp = fromGeneralizedTimeFormat(gtf)
|
self._stamp = from_generalized_time_format(gtf)
|
||||||
self.value = gtf
|
self.value = gtf
|
||||||
elif isinstance(gtf, float):
|
elif isinstance(gtf, float):
|
||||||
self._stamp = gtf
|
self._stamp = gtf
|
||||||
self.value = toGeneralizedTimeFormat(gtf)
|
self.value = to_generalized_time_format(gtf)
|
||||||
|
|
||||||
@crans_attribute
|
@crans_attribute
|
||||||
class debutAdhesion(generalizedTimeFormat):
|
class debutAdhesion(generalizedTimeFormat):
|
||||||
|
|
|
@ -243,7 +243,7 @@ def hash_password(password, salt=None, longueur=4):
|
||||||
raise ValueError("salt devrait faire au moins 4 octets")
|
raise ValueError("salt devrait faire au moins 4 octets")
|
||||||
if salt is None:
|
if salt is None:
|
||||||
salt = os.urandom(longueur)
|
salt = os.urandom(longueur)
|
||||||
elif len(salt)<4:
|
elif len(salt) < 4:
|
||||||
raise ValueError("salt devrait faire au moins 4 octets")
|
raise ValueError("salt devrait faire au moins 4 octets")
|
||||||
|
|
||||||
return '{SSHA}' + base64.b64encode(hashlib.sha1(password + salt).digest() + salt)
|
return '{SSHA}' + base64.b64encode(hashlib.sha1(password + salt).digest() + salt)
|
||||||
|
@ -306,14 +306,14 @@ def ip4_addresses():
|
||||||
ip_list.append(link['addr'])
|
ip_list.append(link['addr'])
|
||||||
return ip_list
|
return ip_list
|
||||||
|
|
||||||
def extractTz(thetz):
|
def extract_tz(thetz):
|
||||||
abstz = 100*abs(thetz)
|
abstz = 100*abs(thetz)
|
||||||
if thetz == 0:
|
if thetz == 0:
|
||||||
return u"Z"
|
return u"Z"
|
||||||
else:
|
else:
|
||||||
return u"%s%04d" % ("+"*(thetz < 0) + "-"*(thetz > 0), abstz)
|
return u"%s%04d" % ("+"*(thetz < 0) + "-"*(thetz > 0), abstz)
|
||||||
|
|
||||||
def toGeneralizedTimeFormat(stamp):
|
def to_generalized_time_format(stamp):
|
||||||
"""Converts a timestamp (local) in a generalized time format
|
"""Converts a timestamp (local) in a generalized time format
|
||||||
for LDAP.
|
for LDAP.
|
||||||
|
|
||||||
|
@ -322,9 +322,9 @@ def toGeneralizedTimeFormat(stamp):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return u"%s%s" % (time.strftime("%Y%m%d%H%M%S", time.localtime(stamp)), extractTz(time.altzone/3600))
|
return u"%s%s" % (time.strftime("%Y%m%d%H%M%S", time.localtime(stamp)), extract_tz(time.altzone/3600))
|
||||||
|
|
||||||
def fromGeneralizedTimeFormat(gtf):
|
def from_generalized_time_format(gtf):
|
||||||
"""Converts a GTF stamp to unix timestamp
|
"""Converts a GTF stamp to unix timestamp
|
||||||
|
|
||||||
* gtf : a generalized time format resource without dotsecond
|
* gtf : a generalized time format resource without dotsecond
|
||||||
|
|
17
objets.py
17
objets.py
|
@ -108,6 +108,8 @@ class CransLdapObject(object):
|
||||||
|
|
||||||
attribs = []
|
attribs = []
|
||||||
|
|
||||||
|
ldap_name = "CransLdapObject"
|
||||||
|
|
||||||
def update_attribs(self):
|
def update_attribs(self):
|
||||||
"""
|
"""
|
||||||
Fonction permettant de mettre à jours attribs, dès que les valeurs
|
Fonction permettant de mettre à jours attribs, dès que les valeurs
|
||||||
|
@ -225,6 +227,7 @@ class CransLdapObject(object):
|
||||||
|
|
||||||
def __ne__(self, obj):
|
def __ne__(self, obj):
|
||||||
return not self == obj
|
return not self == obj
|
||||||
|
|
||||||
def __eq__(self, obj):
|
def __eq__(self, obj):
|
||||||
if isinstance(obj, self.__class__):
|
if isinstance(obj, self.__class__):
|
||||||
if self.mode in ['w', 'rw']:
|
if self.mode in ['w', 'rw']:
|
||||||
|
@ -637,6 +640,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
|
||||||
|
|
||||||
|
# On utilise carte_ok et paiement_ok dans blacklist_actif, qui sont définis dans les
|
||||||
|
# objets enfants. On définit des méthodes vides ici pour la cohérence.
|
||||||
|
def carte_ok(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def paiement_ok(self, no_bl=False):
|
||||||
|
pass
|
||||||
|
|
||||||
def blacklist_actif(self, excepts=[]):
|
def blacklist_actif(self, excepts=[]):
|
||||||
"""Renvoie la liste des blacklistes actives sur l'entité
|
"""Renvoie la liste des blacklistes actives sur l'entité
|
||||||
Améliorations possibles:
|
Améliorations possibles:
|
||||||
|
@ -862,11 +873,11 @@ class proprio(CransLdapObject):
|
||||||
|
|
||||||
def fin_adhesion(self):
|
def fin_adhesion(self):
|
||||||
"""Retourne la date de fin d'adhésion"""
|
"""Retourne la date de fin d'adhésion"""
|
||||||
return max([float(facture.get('finAdhesion', [crans_utils.fromGeneralizedTimeFormat(attributs.finAdhesion.default)])[0]) for facture in self.factures(refresh=True, mode="ro") if facture.get('controle', [''])[0] != u"FALSE" and facture.get('recuPaiement', [''])[0] != ''] + [0.0])
|
return max([float(facture.get('finAdhesion', [crans_utils.from_generalized_time_format(attributs.finAdhesion.default)])[0]) for facture in self.factures(refresh=True, mode="ro") if facture.get('controle', [''])[0] != u"FALSE" and facture.get('recuPaiement', [''])[0] != ''] + [0.0])
|
||||||
|
|
||||||
def fin_connexion(self):
|
def fin_connexion(self):
|
||||||
"""Retourne la date de fin de connexion"""
|
"""Retourne la date de fin de connexion"""
|
||||||
return max([float(facture.get('finConnexion', [crans_utils.fromGeneralizedTimeFormat(attributs.finConnexion.default)])[0]) for facture in self.factures(refresh=True, mode="ro") if facture.get('controle', [''])[0] != u"FALSE" and facture.get('recuPaiement', [''])[0] != ''] + [0.0])
|
return max([float(facture.get('finConnexion', [crans_utils.from_generalized_time_format(attributs.finConnexion.default)])[0]) for facture in self.factures(refresh=True, mode="ro") if facture.get('controle', [''])[0] != u"FALSE" and facture.get('recuPaiement', [''])[0] != ''] + [0.0])
|
||||||
|
|
||||||
def paiement_ok(self, no_bl=False):
|
def paiement_ok(self, no_bl=False):
|
||||||
u"""
|
u"""
|
||||||
|
@ -1108,7 +1119,7 @@ class machine(CransLdapObject):
|
||||||
self['ipHostNumber'] = []
|
self['ipHostNumber'] = []
|
||||||
self['ip6HostNumber'] = []
|
self['ip6HostNumber'] = []
|
||||||
else:
|
else:
|
||||||
if unicode(self['ipHostNumber'][0]) != unicode(ip4_of_rid(sbm['rid'][1])):
|
if unicode(self['ipHostNumber'][0]) != unicode(crans_utils.ip4_of_rid(sbm['rid'][1])):
|
||||||
raise ValueError("L'ipv4 et le rid ne concordent pas !")
|
raise ValueError("L'ipv4 et le rid ne concordent pas !")
|
||||||
self['ip6HostNumber'] = [unicode(crans_utils.ip6_of_mac(self['macAddress'][0].value, self['rid'][0].value))]
|
self['ip6HostNumber'] = [unicode(crans_utils.ip6_of_mac(self['macAddress'][0].value, self['rid'][0].value))]
|
||||||
if sbm['ipHostNumber']:
|
if sbm['ipHostNumber']:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue