X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FPersons.py;h=5a0240379790c8c33badb819fbf9be12e31e69e3;hb=fe81b2c91b436b1882f63023413c7f51b29538ed;hp=678697d2ed113a910fec91ea087665c097debb57;hpb=5d2859509faf449daf088d98ae5e737c6c096d69;p=plcapi.git diff --git a/PLC/Persons.py b/PLC/Persons.py index 678697d2..5a024037 100644 --- a/PLC/Persons.py +++ b/PLC/Persons.py @@ -9,8 +9,10 @@ # from types import StringTypes -from datetime import datetime -import md5 +try: + from hashlib import md5 +except ImportError: + from md5 import md5 import time from random import Random import re @@ -78,39 +80,25 @@ class Person(Row): """ Validate email address. Stolen from Mailman. """ - + email = email.lower() invalid_email = PLCInvalidArgument("Invalid e-mail address") - email_badchars = r'[][()<>|;^,\200-\377]' - # Pretty minimal, cheesy check. We could do better... - if not email or email.count(' ') > 0: - raise invalid_email - if re.search(email_badchars, email) or email[0] == '-': + if not email: raise invalid_email - email = email.lower() - at_sign = email.find('@') - if at_sign < 1: - raise invalid_email - user = email[:at_sign] - rest = email[at_sign+1:] - domain = rest.split('.') - - # This means local, unqualified addresses, are not allowed - if not domain: - raise invalid_email - if len(domain) < 2: + email_re = re.compile('\A[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9._\-]+\.[a-zA-Z]+\Z') + if not email_re.match(email): raise invalid_email # check only against users on the same peer - if 'peer_id' in self: + if 'peer_id' in self: namespace_peer_id = self['peer_id'] else: namespace_peer_id = None - conflicts = Persons(self.api, {'email':email,'peer_id':namespace_peer_id}) + conflicts = Persons(self.api, {'email':email,'peer_id':namespace_peer_id}) - for person in conflicts: + for person in conflicts: if 'person_id' not in self or self['person_id'] != person['person_id']: raise PLCInvalidArgument, "E-mail address already in use" @@ -130,7 +118,7 @@ class Person(Row): else: # Generate a somewhat unique 8 character salt string salt = str(time.time()) + str(Random().random()) - salt = md5.md5(salt).hexdigest()[:8] + salt = md5(salt).hexdigest()[:8] return crypt.crypt(password.encode(self.api.encoding), magic + salt + "$") validate_date_created = Row.validate_timestamp