def test_deleting_abandoned_profiles(self): """Test the cmd to delete profiles that never agreed to the TOS.""" two_days_ago = datetime.now() - timedelta(days=2) u1 = User.objects.create( username=u'testaccount', password=u'password1', email=u'*****@*****.**', is_active=True, date_joined=two_days_ago, ) Profile.objects.create(user=u1) u2 = User.objects.create( username=default_username_algo(u'*****@*****.**'), password=u'pass', email=u'*****@*****.**', is_active=True, date_joined=two_days_ago, ) Profile.objects.create(user=u2) self.assertEqual(Profile.objects.count(), 2) self.assertEqual(User.objects.count(), 2) delete_abandoned_profiles() self.assertEqual(Profile.objects.count(), 1) self.assertEqual(User.objects.count(), 1) with self.assertRaises(User.DoesNotExist): User.objects.get(pk=u2.pk)
def test_new_profiles_not_deleted(self): """Test that the profile deletion cmd doesn't delete new profiles.""" u1 = User.objects.create( username=default_username_algo(u'*****@*****.**'), password=u'password1', email=u'*****@*****.**', is_active=True, ) Profile.objects.create(user=u1) u2 = User.objects.create( username=default_username_algo(u'*****@*****.**'), password=u'pass', email=u'*****@*****.**', is_active=True, date_joined=datetime.now() - timedelta(days=2), ) Profile.objects.create(user=u2) self.assertEqual(Profile.objects.count(), 2) self.assertEqual(User.objects.count(), 2) delete_abandoned_profiles() self.assertEqual(Profile.objects.count(), 1) self.assertEqual(User.objects.count(), 1) with self.assertRaises(User.DoesNotExist): User.objects.get(pk=u2.pk)
def delete_abandoned_profiles(): """ Find and delete users and profiles that never completed their profile, and thus never agreed to the privacy policy. """ users = User.objects.filter( profile__name='', date_joined__lt=datetime.now() - timedelta(days=1), ) for user in users: # make sure we don't delete any manually created users # e.g. admin if user.username == default_username_algo(user.email): logger.info('Deleting user %d with email %s', user.id, user.email) user.delete()
def form_valid(self, form): """Custom mozillians login form validation""" self.assertion = form.cleaned_data['assertion'] self.audience = get_audience(self.request) result = verify(self.assertion, self.audience) try: _is_valid_login = False if result: if User.objects.filter(email=result['email']).exists(): _is_valid_login = True else: data = is_vouched(result['email']) if data and data['is_vouched']: _is_valid_login = True user = User.objects.create_user( username=default_username_algo(data['email']), email=data['email']) profile = user.userprofile profile.username = data['username'] profile.avatar_url = data['photo'] profile.save() if _is_valid_login: try: self.user = auth.authenticate(assertion=self.assertion, audience=self.audience) auth.login(self.request, self.user) except BrowserIDException as e: return self.login_failure(e) if self.user and self.user.is_active: return self.login_success() except BadStatusCodeError: msg = ('Email (%s) authenticated but unable to ' 'connect to Mozillians to see if you are vouched' % result['email']) messages.warning(self.request, msg) return self.login_failure() messages.error(self.request, ('Login failed. Make sure you are using ' 'a valid email address and you are ' 'a vouched Mozillian.')) return self.login_failure()
def form_valid(self, form): """Custom mozillians login form validation""" self.assertion = form.cleaned_data["assertion"] self.audience = get_audience(self.request) result = verify(self.assertion, self.audience) try: _is_valid_login = False if result: if User.objects.filter(email=result["email"]).exists(): _is_valid_login = True else: data = is_vouched(result["email"]) if data and data["is_vouched"]: _is_valid_login = True user = User.objects.create_user( username=default_username_algo(data["email"]), email=data["email"] ) MozillianProfile.objects.create(user=user, username=data["username"], avatar_url=data["photo"]) if _is_valid_login: try: self.user = auth.authenticate(assertion=self.assertion, audience=self.audience) auth.login(self.request, self.user) except BrowserIDException as e: return self.login_failure(e) if self.user and self.user.is_active: return self.login_success() except BadStatusCodeError: msg = ( "Email (%s) authenticated but unable to " "connect to Mozillians to see if you are vouched" % result["email"] ) messages.warning(self.request, msg) return self.login_failure() messages.error( self.request, ("Login failed. Make sure you are using " "a valid email address and you are " "a vouched Mozillian."), ) return self.login_failure()
def create_browserid_user(email, first_name=''): """Creates users the ``django_browserid`` way.""" from django.db import IntegrityError username_algo = getattr(settings, 'BROWSERID_USERNAME_ALGO', None) if username_algo is not None: username = username_algo(email) else: username = auth.default_username_algo(email) try: return User.objects.create_user(username, email, first_name=first_name) except IntegrityError as err: # Race condition! Attempt to re-fetch from the database. logger.warning('IntegrityError during user creation: {0}'.format(err)) try: return User.objects.get(email=email) except User.DoesNotExist: # Whatevs, let's re-raise the error. logger.exception(err) raise err
def new_user(email, username=None): """Creates a user with the specified email for testing.""" if username is None: username = default_username_algo(email) return User.objects.create_user(username, email)
def username_hash(self): """ Return a hash of the users email. Used as a URL component when no username is set (as is the case with users signed up via BrowserID). """ return default_username_algo(self.user.email)
def test_create_user_fails_and_returns(self, create_mock, get_mock): email = '*****@*****.**' username = auth.default_username_algo(email) inviter.create_browserid_user(email) create_mock.assert_called_once_with(username, email, first_name='') get_mock.assert_called_once_with(email=email)
def test_create_user_succeeds(self, create_mock): email = '*****@*****.**' username = auth.default_username_algo(email) inviter.create_browserid_user(email) create_mock.assert_called_once_with(username, email, first_name='')