Skip to content

Commit 45022e3

Browse files
author
Justus Pendleton
committed
fix [SF#611787]: ensure unique email addresses
enhance userauditor to make sure the email address is unique in the tracker. add a unittest for it.
1 parent 95890ad commit 45022e3

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

templates/classic/detectors/userauditor.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,24 @@
1818
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1919
# SOFTWARE.
2020
#
21-
#$Id: userauditor.py,v 1.6 2007-08-31 17:45:16 jpend Exp $
21+
#$Id: userauditor.py,v 1.7 2007-09-06 16:52:19 jpend Exp $
2222

2323
def audit_user_fields(db, cl, nodeid, newvalues):
2424
''' Make sure user properties are valid.
2525
2626
- email address has no spaces in it
27+
- email address is unique
2728
- roles specified exist
2829
- timezone is valid
2930
'''
30-
if newvalues.has_key('address') and ' ' in newvalues['address']:
31-
raise ValueError, 'Email address must not contain spaces'
31+
if newvalues.has_key('address'):
32+
address = newvalues['address']
33+
if address:
34+
if ' ' in address:
35+
raise ValueError, 'Email address must not contain spaces'
36+
user = db.user.stringFind(address=address)
37+
if len(user):
38+
raise ValueError, 'Email address already in use'
3239

3340
for rolename in [r.lower().strip() for r in newvalues.get('roles', '').split(',')]:
3441
if rolename and not db.security.role.has_key(rolename):

templates/minimal/detectors/userauditor.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,23 @@
1818
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1919
# SOFTWARE.
2020
#
21-
#$Id: userauditor.py,v 1.5 2007-08-31 17:45:17 jpend Exp $
21+
#$Id: userauditor.py,v 1.6 2007-09-06 16:52:20 jpend Exp $
2222

2323
def audit_user_fields(db, cl, nodeid, newvalues):
2424
''' Make sure user properties are valid.
2525
2626
- email address has no spaces in it
27+
- email address is unique
2728
- roles specified exist
2829
- timezone is valid
2930
'''
30-
if newvalues.has_key('address') and ' ' in newvalues['address']:
31-
raise ValueError, 'Email address must not contain spaces'
31+
if newvalues.has_key('address'):
32+
address = newvalues['address']
33+
if ' ' in address:
34+
raise ValueError, 'Email address must not contain spaces'
35+
user = db.user.stringFind(address=address)
36+
if len(user):
37+
raise ValueError, 'Email address already in use'
3238

3339
for rolename in [r.lower().strip() for r in newvalues.get('roles', '').split(',')]:
3440
if rolename and not db.security.role.has_key(rolename):

test/test_userauditor.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# $Id: test_userauditor.py,v 1.2 2007-08-31 17:45:17 jpend Exp $
1+
# $Id: test_userauditor.py,v 1.3 2007-09-06 16:52:20 jpend Exp $
22

33
import os, unittest, shutil
44
from db_test_base import setupTracker
@@ -61,6 +61,12 @@ def testBadEmailAddresses(self):
6161
userid = self.db.user.lookup('kyle')
6262
self.assertRaises(ValueError, self.db.user.set, userid, address='kyle @ example.com')
6363

64+
def testUniqueEmailAddresses(self):
65+
self.db.user.create(username='kenny', address='[email protected]')
66+
self.assertRaises(ValueError, self.db.user.create, username='test_user01', address='[email protected]')
67+
uid = self.db.user.create(username='eric', address='[email protected]')
68+
self.assertRaises(ValueError, self.db.user.set, uid, address='[email protected]')
69+
6470
def testBadRoles(self):
6571
userid = self.db.user.lookup('kyle')
6672
self.assertRaises(ValueError, self.db.user.set, userid, roles='BadRole')

0 commit comments

Comments
 (0)