Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
 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)
Esempio n. 4
0
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()
Esempio n. 5
0
 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)
Esempio n. 6
0
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()
Esempio n. 7
0
    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()
Esempio n. 8
0
    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()
Esempio n. 9
0
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
Esempio n. 10
0
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)
Esempio n. 11
0
 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)
Esempio n. 12
0
 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)
Esempio n. 13
0
 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='')
Esempio n. 14
0
 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)
Esempio n. 15
0
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)