You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2014/12/01 19:11:22 UTC
allura git commit: [#7761] ticket:690 Check all matches in
User.by_email_address
Repository: allura
Updated Branches:
refs/heads/master 0daaf5fe3 -> e03a459c6
[#7761] ticket:690 Check all matches in User.by_email_address
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/e03a459c
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/e03a459c
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/e03a459c
Branch: refs/heads/master
Commit: e03a459c616e5f3baa5a37bf9f4e4bf17ff963b8
Parents: 0daaf5f
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Nov 28 09:50:58 2014 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Fri Nov 28 09:50:58 2014 +0000
----------------------------------------------------------------------
Allura/allura/model/auth.py | 11 +++++++----
Allura/allura/tests/model/test_auth.py | 29 +++++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/e03a459c/Allura/allura/model/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index 6217f42..093b046 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -617,10 +617,13 @@ class User(MappedClass, ActivityNode, ActivityObject, SearchIndexable):
@classmethod
def by_email_address(cls, addr):
- ea = EmailAddress.query.get(email=addr, confirmed=True)
- if ea is None:
- return None
- return ea.claimed_by_user()
+ addrs = EmailAddress.query.find(dict(email=addr, confirmed=True))
+ users = [ea.claimed_by_user() for ea in addrs]
+ users = [u for u in users if u is not None]
+ if len(users) > 1:
+ log.warn('Multiple active users matching confirmed email %s %s. '
+ 'Using first one', [u.username for u in users], addr)
+ return users[0] if len(users) > 0 else None
@classmethod
def by_username(cls, name):
http://git-wip-us.apache.org/repos/asf/allura/blob/e03a459c/Allura/allura/tests/model/test_auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/model/test_auth.py b/Allura/allura/tests/model/test_auth.py
index 2b05672..8ae0faa 100644
--- a/Allura/allura/tests/model/test_auth.py
+++ b/Allura/allura/tests/model/test_auth.py
@@ -153,6 +153,35 @@ def test_user_project_does_not_create_on_demand_for_anonymous_user():
@with_setup(setUp)
+@patch('allura.model.auth.log')
+def test_user_by_email_address(log):
+ u1 = M.User.register(dict(username='abc1'), make_project=False)
+ u2 = M.User.register(dict(username='abc2'), make_project=False)
+ addr1 = M.EmailAddress(email='abc123@abc.me', confirmed=True,
+ claimed_by_user_id=u1._id)
+ addr2 = M.EmailAddress(email='abc123@abc.me', confirmed=True,
+ claimed_by_user_id=u2._id)
+
+ # both users are disabled
+ u1.disabled, u2.disabled = True, True
+ ThreadLocalORMSession.flush_all()
+ assert_equal(M.User.by_email_address('abc123@abc.me'), None)
+ assert_equal(log.warn.call_count, 0)
+
+ # only u2 is active
+ u1.disabled, u2.disabled = True, False
+ ThreadLocalORMSession.flush_all()
+ assert_equal(M.User.by_email_address('abc123@abc.me'), u2)
+ assert_equal(log.warn.call_count, 0)
+
+ # both are active
+ u1.disabled, u2.disabled = False, False
+ ThreadLocalORMSession.flush_all()
+ assert_in(M.User.by_email_address('abc123@abc.me'), [u1, u2])
+ assert_equal(log.warn.call_count, 1)
+
+
+@with_setup(setUp)
def test_project_role():
role = M.ProjectRole(project_id=c.project._id, name='test_role')
M.ProjectRole.by_user(c.user, upsert=True).roles.append(role._id)