diff options
Diffstat (limited to 'src/mailman/model')
| -rw-r--r-- | src/mailman/model/docs/users.txt | 15 | ||||
| -rw-r--r-- | src/mailman/model/user.py | 18 | ||||
| -rw-r--r-- | src/mailman/model/usermanager.py | 15 |
3 files changed, 29 insertions, 19 deletions
diff --git a/src/mailman/model/docs/users.txt b/src/mailman/model/docs/users.txt index 1703db1ee..29d8601cd 100644 --- a/src/mailman/model/docs/users.txt +++ b/src/mailman/model/docs/users.txt @@ -36,15 +36,16 @@ The password and real name can be changed at any time. another password -User id -======= +Basic user identification +========================= Although rarely visible to users, every user has a unique ID in Mailman, which never changes. This ID is generated randomly at the time the user is created. - >>> print len(user_1.user_id) - 40 + # The test suite uses a predictable user id. + >>> print user_1.user_id + 1 The user id cannot change. @@ -53,6 +54,12 @@ The user id cannot change. ... AttributeError: can't set attribute +User records also have a date on which they where created. + + # The test suite uses a predictable timestamp. + >>> print user_1.created_on + 2005-08-01 07:49:23 + Users addresses =============== diff --git a/src/mailman/model/user.py b/src/mailman/model/user.py index f037bdd48..05ce356ca 100644 --- a/src/mailman/model/user.py +++ b/src/mailman/model/user.py @@ -24,7 +24,7 @@ __all__ = [ 'User', ] -from storm.locals import Int, Reference, ReferenceSet, Unicode +from storm.locals import DateTime, Int, Reference, ReferenceSet, Unicode from zope.interface import implements from mailman.config import config @@ -35,6 +35,8 @@ from mailman.interfaces.user import IUser from mailman.model.address import Address from mailman.model.preferences import Preferences from mailman.model.roster import Memberships +from mailman.utilities.datetime import factory as date_factory +from mailman.utilities.uid import factory as uid_factory @@ -47,11 +49,20 @@ class User(Model): real_name = Unicode() password = Unicode() _user_id = Unicode() + _created_on = DateTime() addresses = ReferenceSet(id, 'Address.user_id') preferences_id = Int() preferences = Reference(preferences_id, 'Preferences.id') + def __init__(self, real_name=None, preferences=None): + super(User, self).__init__() + self._created_on = date_factory.now() + self._user_id = uid_factory.new_uid() + self.real_name = ('' if real_name is None else real_name) + self.preferences = preferences + config.db.store.add(self) + def __repr__(self): return '<User "{0.real_name}" ({0.user_id}) at {1:#x}>'.format( self, id(self)) @@ -61,6 +72,11 @@ class User(Model): """See `IUser`.""" return self._user_id + @property + def created_on(self): + """See `IUser`.""" + return self._created_on + def link(self, address): """See `IUser`.""" if address.user is not None: diff --git a/src/mailman/model/usermanager.py b/src/mailman/model/usermanager.py index 3294b3e7f..d6817021d 100644 --- a/src/mailman/model/usermanager.py +++ b/src/mailman/model/usermanager.py @@ -25,10 +25,6 @@ __all__ = [ ] -import os -import time -import hashlib - from zope.interface import implements from mailman.config import config @@ -37,7 +33,6 @@ from mailman.interfaces.usermanager import IUserManager from mailman.model.address import Address from mailman.model.preferences import Preferences from mailman.model.user import User -from mailman.utilities.passwords import SALT_LENGTH @@ -45,18 +40,10 @@ class UserManager: implements(IUserManager) def create_user(self, email=None, real_name=None): - user = User() - user.real_name = ('' if real_name is None else real_name) + user = User(real_name, Preferences()) if email: address = self.create_address(email, real_name) user.link(address) - user.preferences = Preferences() - # Generate a unique random SHA1 hash for the user id. - salt = os.urandom(SALT_LENGTH) - h = hashlib.sha1(repr(time.time())) - h.update(salt) - user._user_id = unicode(h.hexdigest(), 'us-ascii') - config.db.store.add(user) return user def delete_user(self, user): |
