Пример #1
0
    def test_reset(self):
        """Test basic password reset."""

        self.selenium.get(
            '%s%s' % (self.live_server_url, reverse('account:reset_password')))

        user = User.objects.create(username=JID,
                                   email=EMAIL,
                                   confirmed=NOW,
                                   created_in_backend=True,
                                   last_activity=NOW)
        xmpp_backend.create_user(NODE, DOMAIN, PWD)
        self.assertTrue(user.check_password(PWD))
        self.assertFalse(user.check_password(PWD2))

        #fg_username = self.find('#fg_username')
        node = self.selenium.find_element_by_id('id_username_0')
        node.send_keys(NODE)
        self.wait_for_valid_form()

        with self.mock_celery() as mocked:
            self.find('button[type="submit"]').click()
            self.wait_for_page_load()

        self.assertTaskCount(mocked, 1)
        user = User.objects.get(username=JID)

        # only a successful password reset should update last activity update
        self.assertEqual(user.last_activity, NOW)

        site = settings.XMPP_HOSTS[settings.DEFAULT_XMPP_HOST]
        self.assertTaskCall(mocked,
                            send_confirmation_task,
                            user_pk=user.pk,
                            purpose=PURPOSE_RESET_PASSWORD,
                            to=EMAIL,
                            hostname=site['NAME'],
                            base_url=self.live_server_url,
                            language='en',
                            address='127.0.0.1')
        self.assertEqual(len(mail.outbox), 1)

        confirmation = Confirmation.objects.get(user=user,
                                                purpose=PURPOSE_RESET_PASSWORD)
        self.selenium.get('%s%s' %
                          (self.live_server_url, confirmation.urlpath))
        self.wait_for_page_load()

        self.find('#id_new_password1').send_keys(PWD2)
        self.find('#id_new_password2').send_keys(PWD2)
        self.wait_for_valid_form()
        with freeze_time(NOW2_STR):
            self.find('button[type="submit"]').click()
            self.wait_for_page_load()

        # get user again
        user = User.objects.get(username=JID)
        self.assertFalse(user.check_password(PWD))
        self.assertTrue(user.check_password(PWD2))
        self.assertEqual(user.last_activity, NOW2)
Пример #2
0
    def form_valid(self, form):
        key = self.key
        if isinstance(key, HttpResponse):
            return key

        request = self.request
        address = request.META['REMOTE_ADDR']
        password = form.cleaned_data['new_password1']

        with transaction.atomic(), version(comment="email address confirmed"):
            key.user.confirmed = timezone.now()
            key.user.created_in_backend = True
            key.user.save()

            if request.user != key.user:
                logout(request)  # logout any previous user
                key.user.backend = settings.AUTHENTICATION_BACKENDS[0]
                login(request, key.user)

            # Actually create the user on the XMPP server
            xmpp_backend.create_user(username=key.user.node, domain=key.user.domain,
                                     password=password, email=key.user.email)

            key.user.log(ugettext_noop('Email address %(email)s confirmed.'), address,
                         email=key.user.email)
            # TODO: More meaningful help message on a webchat, usable clients, follow updates, ...
            messages.success(request, _(
                "Successfully confirmed your email address. You can now use your account."))
            stat(STAT_REGISTER_CONFIRMED)

            # Delete the registration key
            key.delete()

        return super(ConfirmRegistrationView, self).form_valid(form)
Пример #3
0
    def setUp(self):
        super().setUp()

        self.user = User.objects.create(
            username=JID, email=EMAIL, confirmed=NOW_UTC, created_in_backend=True, last_activity=NOW_UTC)
        xmpp_backend.create_user(NODE, DOMAIN, PWD)
        xmpp_backend.set_last_activity(NODE, DOMAIN, timestamp=NOW)

        self.url = reverse('account:login')
        self.client = Client()
Пример #4
0
    def test_set_unusable_password(self):
        pwd = 'password'
        u = XmppUser.objects.create(jid='*****@*****.**')
        xmpp_backend.create_user(u.node, u.domain, pwd)
        self.assertTrue(u.check_password(pwd))
        self.assertTrue(xmpp_backend.check_password(u.node, u.domain, pwd))

        u.set_unusable_password()
        self.assertFalse(u.check_password(pwd))
        self.assertFalse(xmpp_backend.check_password(u.node, u.domain, pwd))
Пример #5
0
    def test_basic(self):
        pwd = 'dummy'
        u = XmppUser.objects.create(jid='*****@*****.**')
        self.assertEqual(u.node, 'user')
        self.assertEqual(u.domain, 'example.com')
        self.assertEqual(u.get_short_name(), 'user')
        self.assertFalse(u.exists())
        self.assertFalse(xmpp_backend.user_exists(u.node, u.domain))

        xmpp_backend.create_user(u.node, u.domain, pwd)
        self.assertTrue(u.exists())
        self.assertTrue(xmpp_backend.user_exists(u.node, u.domain))
Пример #6
0
    def create_user(self, username, email, password=None):
        user = self.model(username=username, email=email, confirmed=timezone.now(),
                          created_in_backend=True,
                          registration_method=REGISTRATION_MANUAL)

        with transaction.atomic():
            user.save(using=self.db)

            if password is None and settings.XMPP_HOSTS[user.domain].get('reserve', False):
                xmpp_backend.create_reservation(user.node, user.domain, email=email)
            elif password is not None:
                xmpp_backend.create_user(user.node, user.domain, password, email=email)
        return user
Пример #7
0
    def setUp(self):
        super().setUp()

        self.user = User.objects.create(username=JID,
                                        email=EMAIL,
                                        confirmed=NOW_UTC,
                                        created_in_backend=True,
                                        last_activity=NOW_UTC)
        xmpp_backend.create_user(NODE, DOMAIN, PWD)
        xmpp_backend.set_last_activity(NODE, DOMAIN, timestamp=NOW)

        self.url = reverse('account:login')
        self.client = Client()
Пример #8
0
    def test_reset(self):
        """Test basic password reset."""

        self.selenium.get('%s%s' % (self.live_server_url, reverse('account:reset_password')))

        user = User.objects.create(
            username=JID, email=EMAIL, confirmed=NOW, created_in_backend=True, last_activity=NOW)
        xmpp_backend.create_user(NODE, DOMAIN, PWD)
        self.assertTrue(user.check_password(PWD))
        self.assertFalse(user.check_password(PWD2))

        #fg_username = self.find('#fg_username')
        node = self.selenium.find_element_by_id('id_username_0')
        node.send_keys(NODE)
        self.wait_for_valid_form()

        with self.mock_celery() as mocked:
            self.find('button[type="submit"]').click()
            self.wait_for_page_load()

        self.assertTaskCount(mocked, 1)
        user = User.objects.get(username=JID)

        # only a successful password reset should update last activity update
        self.assertEqual(user.last_activity, NOW)

        site = settings.XMPP_HOSTS[settings.DEFAULT_XMPP_HOST]
        self.assertTaskCall(
            mocked, send_confirmation_task,
            user_pk=user.pk, purpose=PURPOSE_RESET_PASSWORD, to=EMAIL, hostname=site['NAME'],
            base_url=self.live_server_url, language='en', address='127.0.0.1'
        )
        self.assertEqual(len(mail.outbox), 1)

        confirmation = Confirmation.objects.get(user=user, purpose=PURPOSE_RESET_PASSWORD)
        self.selenium.get('%s%s' % (self.live_server_url, confirmation.urlpath))
        self.wait_for_page_load()

        self.find('#id_new_password1').send_keys(PWD2)
        self.find('#id_new_password2').send_keys(PWD2)
        self.wait_for_valid_form()
        with freeze_time(NOW2_STR):
            self.find('button[type="submit"]').click()
            self.wait_for_page_load()

        # get user again
        user = User.objects.get(username=JID)
        self.assertFalse(user.check_password(PWD))
        self.assertTrue(user.check_password(PWD2))
        self.assertEqual(user.last_activity, NOW2)
Пример #9
0
    def create_user(self, username, email, password=None):
        user = self.model(username=username,
                          email=email,
                          confirmed=timezone.now(),
                          created_in_backend=True,
                          registration_method=REGISTRATION_MANUAL)

        with transaction.atomic():
            user.save(using=self.db)

            if password is None and settings.XMPP_HOSTS[user.domain].get(
                    'reserve', False):
                xmpp_backend.create_reservation(user.node,
                                                user.domain,
                                                email=email)
            elif password is not None:
                xmpp_backend.create_user(user.node,
                                         user.domain,
                                         password,
                                         email=email)
        return user
Пример #10
0
    def test_expiring(self):
        # create user, also in backend
        user = User.objects.create(username=JID,
                                   email=EMAIL,
                                   created_in_backend=True,
                                   last_activity=LAST_ACTIVITY_1,
                                   confirmed=LAST_ACTIVITY_1)
        xmpp_backend.create_user(NODE, DOMAIN, PWD)
        xmpp_backend.set_last_activity(NODE, DOMAIN, timestamp=LAST_ACTIVITY_2)

        self.assertEqual(user.last_activity, LAST_ACTIVITY_1)

        with self.mock_celery() as mocked, freeze_time(NOW_1_STR):
            update_last_activity()

        user = User.objects.get(username=JID)
        self.assertTaskCount(mocked, 0)
        self.assertEqual(len(mail.outbox),
                         0)  # no mails where sent yet (user is not expiring)
        self.assertEqual(user.last_activity,
                         LAST_ACTIVITY_2)  # new last activity from backend

        with self.mock_celery() as mocked, freeze_time(NOW_2_STR):
            self.assertTrue(user.is_expiring)
            self.assertTrue(user.notifications.account_expires)
            self.assertFalse(user.notifications.account_expires_notified)
            update_last_activity()

        self.assertTaskCount(mocked, 0)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(user.last_activity,
                         LAST_ACTIVITY_2)  # last activity stays the same

        mail.outbox = []
        self.assertEqual(len(mail.outbox), 0)

        # run task the next day and make sure that no mail is sent
        user = User.objects.get(username=JID)
        with self.mock_celery() as mocked, freeze_time(NOW_2_STR):
            self.assertTrue(user.is_expiring)
            self.assertTrue(user.notifications.account_expires)
            self.assertTrue(user.notifications.account_expires_notified)
            update_last_activity()

        user = User.objects.get(username=JID)
        self.assertTaskCount(mocked, 0)
        self.assertEqual(len(mail.outbox), 0)
        self.assertEqual(user.last_activity,
                         LAST_ACTIVITY_2)  # last activity stays the same

        # User finally goes online again
        xmpp_backend.set_last_activity(NODE, DOMAIN, timestamp=NOW_3)

        # task runs again
        user = User.objects.get(username=JID)
        with self.mock_celery() as mocked, freeze_time(NOW_4_STR):
            self.assertTrue(user.is_expiring)
            self.assertTrue(user.notifications.account_expires)
            self.assertTrue(user.notifications.account_expires_notified)
            update_last_activity()

        # no mail is sent
        user = User.objects.get(username=JID)
        self.assertTaskCount(mocked, 0)
        self.assertEqual(len(mail.outbox), 0)
        self.assertEqual(user.last_activity, NOW_3)

        self.assertFalse(user.is_expiring)
        self.assertTrue(user.notifications.account_expires)
        self.assertFalse(user.notifications.account_expires_notified)
Пример #11
0
    def test_expiring(self):
        # create user, also in backend
        user = User.objects.create(username=JID, email=EMAIL, created_in_backend=True,
                                   last_activity=LAST_ACTIVITY_1, confirmed=LAST_ACTIVITY_1)
        xmpp_backend.create_user(NODE, DOMAIN, PWD)
        xmpp_backend.set_last_activity(NODE, DOMAIN, timestamp=LAST_ACTIVITY_2)

        self.assertEqual(user.last_activity, LAST_ACTIVITY_1)

        with self.mock_celery() as mocked, freeze_time(NOW_1_STR):
            update_last_activity()

        user = User.objects.get(username=JID)
        self.assertTaskCount(mocked, 0)
        self.assertEqual(len(mail.outbox), 0)  # no mails where sent yet (user is not expiring)
        self.assertEqual(user.last_activity, LAST_ACTIVITY_2)  # new last activity from backend

        with self.mock_celery() as mocked, freeze_time(NOW_2_STR):
            self.assertTrue(user.is_expiring)
            self.assertTrue(user.notifications.account_expires)
            self.assertFalse(user.notifications.account_expires_notified)
            update_last_activity()

        self.assertTaskCount(mocked, 0)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(user.last_activity, LAST_ACTIVITY_2)  # last activity stays the same

        mail.outbox = []
        self.assertEqual(len(mail.outbox), 0)

        # run task the next day and make sure that no mail is sent
        user = User.objects.get(username=JID)
        with self.mock_celery() as mocked, freeze_time(NOW_2_STR):
            self.assertTrue(user.is_expiring)
            self.assertTrue(user.notifications.account_expires)
            self.assertTrue(user.notifications.account_expires_notified)
            update_last_activity()

        user = User.objects.get(username=JID)
        self.assertTaskCount(mocked, 0)
        self.assertEqual(len(mail.outbox), 0)
        self.assertEqual(user.last_activity, LAST_ACTIVITY_2)  # last activity stays the same

        # User finally goes online again
        xmpp_backend.set_last_activity(NODE, DOMAIN, timestamp=NOW_3)

        # task runs again
        user = User.objects.get(username=JID)
        with self.mock_celery() as mocked, freeze_time(NOW_4_STR):
            self.assertTrue(user.is_expiring)
            self.assertTrue(user.notifications.account_expires)
            self.assertTrue(user.notifications.account_expires_notified)
            update_last_activity()

        # no mail is sent
        user = User.objects.get(username=JID)
        self.assertTaskCount(mocked, 0)
        self.assertEqual(len(mail.outbox), 0)
        self.assertEqual(user.last_activity, NOW_3)

        self.assertFalse(user.is_expiring)
        self.assertTrue(user.notifications.account_expires)
        self.assertFalse(user.notifications.account_expires_notified)