From 4b4730cc9973487e436fcc0a1a8ba6ee9c4a9e84 Mon Sep 17 00:00:00 2001 From: zhengxie Date: Tue, 14 Aug 2018 17:35:13 +0800 Subject: [PATCH] [profile] Handle duplicated contact emails --- seahub/profile/models.py | 5 +++++ tests/seahub/profile/models/test_profile_manager.py | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/seahub/profile/models.py b/seahub/profile/models.py index ae5272da5a..abadf05d24 100644 --- a/seahub/profile/models.py +++ b/seahub/profile/models.py @@ -5,6 +5,7 @@ from django.conf import settings from django.db import models from django.core.cache import cache from django.dispatch import receiver +from django.core.exceptions import MultipleObjectsReturned from seahub.base.fields import LowerCaseCharField from seahub.profile.settings import EMAIL_ID_CACHE_PREFIX, EMAIL_ID_CACHE_TIMEOUT @@ -104,6 +105,10 @@ class ProfileManager(models.Manager): return super(ProfileManager, self).get(contact_email=contact_email).user except Profile.DoesNotExist: return None + except MultipleObjectsReturned as e: + logger.warn('Failed to get username by contact email: %s' % contact_email) + logger.warn(e) + return None def convert_login_str_to_username(self, login_str): """ diff --git a/tests/seahub/profile/models/test_profile_manager.py b/tests/seahub/profile/models/test_profile_manager.py index c26333a2ea..acfb61bc40 100644 --- a/tests/seahub/profile/models/test_profile_manager.py +++ b/tests/seahub/profile/models/test_profile_manager.py @@ -6,6 +6,17 @@ class ProfileManagerTest(BaseTestCase): def setUp(self): pass + def test_get_username_by_contact_email(self): + assert Profile.objects.get_username_by_contact_email('a@a.com') is None + + user1 = self.user.username + Profile.objects.add_or_update(user1, contact_email='a@a.com') + assert Profile.objects.get_username_by_contact_email('a@a.com') == user1 + + user2 = self.admin.username + Profile.objects.add_or_update(user2, contact_email='a@a.com') + assert Profile.objects.get_username_by_contact_email('a@a.com') is None + def test_convert_login_str_to_username(self): s = Profile.objects assert s.convert_login_str_to_username('a@a.com') == 'a@a.com'