Esempio n. 1
0
 def setUp(self):
     super(TestActivityLogCount, self).setUp()
     now = datetime.now()
     bom = datetime(now.year, now.month, 1)
     self.lm = bom - timedelta(days=1)
     self.user = UserProfile.objects.get()
     amo.set_user(self.user)
Esempio n. 2
0
 def setUp(self):
     super(TestActivityLogCount, self).setUp()
     now = datetime.now()
     bom = datetime(now.year, now.month, 1)
     self.lm = bom - timedelta(days=1)
     self.user = UserProfile.objects.get()
     amo.set_user(self.user)
Esempio n. 3
0
 def wrapper(*args, **kw):
     old_user = get_user()
     set_user(get_task_user())
     try:
         result = f(*args, **kw)
     finally:
         set_user(old_user)
     return result
Esempio n. 4
0
    def process_request(self, request):
        """Attach authentication/permission helpers to request."""
        request.check_ownership = partial(acl.check_ownership, request)

        # Persist the user in the thread to make it accessible in log()
        # statements etc.
        if request.user.is_authenticated():
            amo.set_user(request.user)
Esempio n. 5
0
 def wrapper(*args, **kw):
     old_user = get_user()
     set_user(get_task_user())
     try:
         result = f(*args, **kw)
     finally:
         set_user(old_user)
     return result
Esempio n. 6
0
    def process_request(self, request):
        """Attach authentication/permission helpers to request."""
        request.check_ownership = partial(acl.check_ownership, request)

        # figure out our list of groups...
        if request.user.is_authenticated():
            amo.set_user(request.user)
            request.groups = request.user.groups.all()
Esempio n. 7
0
    def process_request(self, request):
        """Attach authentication/permission helpers to request."""
        request.check_ownership = partial(acl.check_ownership, request)

        # figure out our list of groups...
        if request.user.is_authenticated():
            amo.set_user(request.user)
            request.groups = request.user.groups.all()
Esempio n. 8
0
    def process_request(self, request):
        """Attach authentication/permission helpers to request."""
        request.check_ownership = partial(acl.check_ownership, request)

        # Persist the user in the thread to make it accessible in log()
        # statements etc.
        if request.user.is_authenticated():
            amo.set_user(request.user)
Esempio n. 9
0
    def test_set_task_user(self):
        @decorators.set_task_user
        def some_func():
            return get_user()

        set_user(UserProfile.objects.get(username='******'))
        eq_(get_user().pk, 999)
        eq_(some_func().pk, int(settings.TASK_USER_ID))
        eq_(get_user().pk, 999)
Esempio n. 10
0
    def test_set_task_user(self):
        @decorators.set_task_user
        def some_func():
            return get_user()

        set_user(UserProfile.objects.get(username='******'))
        assert get_user().pk == 999
        assert some_func().pk == int(settings.TASK_USER_ID)
        assert get_user().pk == 999
Esempio n. 11
0
    def test_set_task_user(self):
        @decorators.set_task_user
        def some_func():
            return get_user()

        set_user(UserProfile.objects.get(username='******'))
        eq_(get_user().pk, 999)
        eq_(some_func().pk, int(settings.TASK_USER_ID))
        eq_(get_user().pk, 999)
Esempio n. 12
0
 def authenticate_credentials(self, request):
     """
     Mimic what our ACLMiddleware does after a successful authentication,
     because otherwise that behaviour would be missing in the API since API
     auth happens after the middleware process request phase.
     """
     result = super(
         JSONWebTokenAuthentication, self).authenticate_credentials(request)
     amo.set_user(result)
     return result
Esempio n. 13
0
 def authenticate_credentials(self, request):
     """
     Mimic what our ACLMiddleware does after a successful authentication,
     because otherwise that behaviour would be missing in the API since API
     auth happens after the middleware process request phase.
     """
     result = super(JSONWebTokenAuthentication,
                    self).authenticate_credentials(request)
     amo.set_user(result)
     return result
Esempio n. 14
0
    def test_unreviewed_addon(self):
        u = UserProfile.objects.get(email='*****@*****.**')
        addon = Addon.objects.all()[0]
        addon.status = amo.STATUS_NOMINATED
        c = u.favorites_collection()
        amo.set_user(u)
        c.add_addon(addon)

        self.client.login(email='*****@*****.**')
        response = self.client.get(c.get_url_path())
        assert list(response.context['addons'].object_list) == [addon]
Esempio n. 15
0
    def test_unreviewed_addon(self):
        u = UserProfile.objects.get(email='*****@*****.**')
        addon = Addon.objects.all()[0]
        addon.status = amo.STATUS_UNREVIEWED
        c = u.favorites_collection()
        amo.set_user(u)
        c.add_addon(addon)

        self.client.login(username='******', password='******')
        response = self.client.get(c.get_url_path())
        eq_(list(response.context['addons'].object_list), [addon])
Esempio n. 16
0
    def test_unreviewed_addon(self):
        u = UserProfile.objects.get(email='*****@*****.**')
        addon = Addon.objects.all()[0]
        addon.status = amo.STATUS_NOMINATED
        c = u.favorites_collection()
        amo.set_user(u)
        c.add_addon(addon)

        self.client.login(email='*****@*****.**')
        response = self.client.get(c.get_url_path())
        assert list(response.context['addons'].object_list) == [addon]
Esempio n. 17
0
 def test_user_approve_reviews(self):
     self.add_approve_logs(3)
     other = UserProfile.objects.create(email="*****@*****.**", username="******")
     amo.set_user(other)
     self.add_approve_logs(2)
     result = ActivityLog.objects.user_approve_reviews(self.user).count()
     eq_(result, 3)
     result = ActivityLog.objects.user_approve_reviews(other).count()
     eq_(result, 2)
     another = UserProfile.objects.create(
         email="*****@*****.**", username="******")
     result = ActivityLog.objects.user_approve_reviews(another).count()
     eq_(result, 0)
Esempio n. 18
0
 def test_user_approve_reviews(self):
     self.add_approve_logs(3)
     other = UserProfile.objects.create(email="*****@*****.**", username="******")
     amo.set_user(other)
     self.add_approve_logs(2)
     result = ActivityLog.objects.user_approve_reviews(self.user).count()
     assert result == 3
     result = ActivityLog.objects.user_approve_reviews(other).count()
     assert result == 2
     another = UserProfile.objects.create(email="*****@*****.**",
                                          username="******")
     result = ActivityLog.objects.user_approve_reviews(another).count()
     assert result == 0
Esempio n. 19
0
def update_maxversions(version_pks, job_pk, data, **kw):
    log.info('[%s@%s] Updating max version for job %s.' %
             (len(version_pks), update_maxversions.rate_limit, job_pk))
    job = ValidationJob.objects.get(pk=job_pk)
    set_user(get_task_user())
    dry_run = data['preview_only']
    app_id = job.target_version.application
    stats = collections.defaultdict(int)
    stats['processed'] = 0
    stats['is_dry_run'] = int(dry_run)
    for version in Version.objects.filter(pk__in=version_pks):
        stats['processed'] += 1
        file_pks = version.files.values_list('pk', flat=True)
        errors = (ValidationResult.objects.filter(
            validation_job=job, file__pk__in=file_pks).values_list('errors',
                                                                   flat=True))
        if any(errors):
            stats['invalid'] += 1
            log.info('Version %s for addon %s not updated, '
                     'one of the files did not pass validation' %
                     (version.pk, version.addon.pk))
            continue

        for app in version.apps.filter(
                application=job.curr_max_version.application,
                max__version_int__gte=job.curr_max_version.version_int,
                max__version_int__lt=job.target_version.version_int):
            stats['bumped'] += 1
            log.info(
                'Updating version %s%s for addon %s from version %s '
                'to version %s' %
                (version.pk, ' [DRY RUN]' if dry_run else '', version.addon.pk,
                 job.curr_max_version.version, job.target_version.version))
            app.max = job.target_version
            if not dry_run:
                app.save()
                amo.log(amo.LOG.MAX_APPVERSION_UPDATED,
                        version.addon,
                        version,
                        details={
                            'version': version.version,
                            'target': job.target_version.version,
                            'application': app_id
                        })

    log.info('[%s@%s] bulk update stats for job %s: {%s}' %
             (len(version_pks), update_maxversions.rate_limit, job_pk,
              ', '.join('%s: %s' % (k, stats[k])
                        for k in sorted(stats.keys()))))
Esempio n. 20
0
    def setUp(self):
        super(TestTagsForm, self).setUp()
        self.addon = Addon.objects.get(pk=3615)
        category = Category.objects.get(pk=22)
        category.name = 'test'
        category.save()

        self.data = {
            'summary': str(self.addon.summary),
            'name': str(self.addon.name),
            'slug': self.addon.slug,
        }

        self.user = self.addon.authors.all()[0]
        amo.set_user(self.user)
Esempio n. 21
0
    def setUp(self):
        super(TestTagsForm, self).setUp()
        self.addon = Addon.objects.get(pk=3615)
        category = Category.objects.get(pk=22)
        category.name = 'test'
        category.save()

        self.data = {
            'summary': str(self.addon.summary),
            'name': str(self.addon.name),
            'slug': self.addon.slug,
        }

        self.user = self.addon.authors.all()[0]
        amo.set_user(self.user)
Esempio n. 22
0
def update_maxversions(version_pks, job_pk, data, **kw):
    log.info('[%s@%s] Updating max version for job %s.'
             % (len(version_pks), update_maxversions.rate_limit, job_pk))
    job = ValidationJob.objects.get(pk=job_pk)
    set_user(get_task_user())
    dry_run = data['preview_only']
    app_id = job.target_version.application
    stats = collections.defaultdict(int)
    stats['processed'] = 0
    stats['is_dry_run'] = int(dry_run)
    for version in Version.objects.filter(pk__in=version_pks):
        stats['processed'] += 1
        file_pks = version.files.values_list('pk', flat=True)
        errors = (ValidationResult.objects.filter(validation_job=job,
                                                  file__pk__in=file_pks)
                                          .values_list('errors', flat=True))
        if any(errors):
            stats['invalid'] += 1
            log.info('Version %s for addon %s not updated, '
                     'one of the files did not pass validation'
                     % (version.pk, version.addon.pk))
            continue

        for app in version.apps.filter(
                application=job.curr_max_version.application,
                max__version_int__gte=job.curr_max_version.version_int,
                max__version_int__lt=job.target_version.version_int):
            stats['bumped'] += 1
            log.info('Updating version %s%s for addon %s from version %s '
                     'to version %s'
                     % (version.pk,
                        ' [DRY RUN]' if dry_run else '',
                        version.addon.pk,
                        job.curr_max_version.version,
                        job.target_version.version))
            app.max = job.target_version
            if not dry_run:
                app.save()
                amo.log(amo.LOG.MAX_APPVERSION_UPDATED,
                        version.addon, version,
                        details={'version': version.version,
                                 'target': job.target_version.version,
                                 'application': app_id})

    log.info('[%s@%s] bulk update stats for job %s: {%s}'
             % (len(version_pks), update_maxversions.rate_limit, job_pk,
                ', '.join('%s: %s' % (k, stats[k])
                          for k in sorted(stats.keys()))))
Esempio n. 23
0
    def test_mine(self):
        u = UserProfile.objects.get(email='*****@*****.**')
        addon = addon = Addon.objects.all()[0]
        c = u.favorites_collection()
        amo.set_user(u)
        c.add_addon(addon)

        assert self.client.login(email='*****@*****.**')

        # My Collections.
        response = self.client.get('/en-US/firefox/collections/mine/')
        assert response.context['author'] == (UserProfile.objects.get(
            email='*****@*****.**'))

        # My Favorites.
        response = self.client.get(
            reverse('collections.detail', args=['mine', 'favorites']))
        assert response.status_code == 200
        assert list(response.context['addons'].object_list) == [addon]
Esempio n. 24
0
    def test_mine(self):
        u = UserProfile.objects.get(email='*****@*****.**')
        addon = addon = Addon.objects.all()[0]
        c = u.favorites_collection()
        amo.set_user(u)
        c.add_addon(addon)

        assert self.client.login(email='*****@*****.**')

        # My Collections.
        response = self.client.get('/en-US/firefox/collections/mine/')
        assert response.context['author'] == (
            UserProfile.objects.get(email='*****@*****.**'))

        # My Favorites.
        response = self.client.get(reverse('collections.detail',
                                           args=['mine', 'favorites']))
        assert response.status_code == 200
        assert list(response.context['addons'].object_list) == [addon]
Esempio n. 25
0
    def authenticate_credentials(self, payload):
        """
        Mimic what our ACLMiddleware does after a successful authentication,
        because otherwise that behaviour would be missing in the API since API
        auth happens after the middleware process request phase.
        """
        if 'user_id' not in payload:
            log.info('No user_id in JWT payload {}'.format(payload))
            raise exceptions.AuthenticationFailed('No user_id in JWT.')
        try:
            user = UserProfile.objects.get(pk=payload['user_id'])
        except UserProfile.DoesNotExist:
            log.info('User not found from JWT payload {}'.format(payload))
            raise exceptions.AuthenticationFailed('User not found.')

        if user.deleted:
            log.info('Not allowing deleted user to log in {}'.format(user.pk))
            raise exceptions.AuthenticationFailed('User account is disabled.')

        amo.set_user(user)
        return user
Esempio n. 26
0
    def authenticate_credentials(self, payload):
        """
        Mimic what our ACLMiddleware does after a successful authentication,
        because otherwise that behaviour would be missing in the API since API
        auth happens after the middleware process request phase.
        """
        if 'user_id' not in payload:
            log.info('No user_id in JWT payload {}'.format(payload))
            raise exceptions.AuthenticationFailed('No user_id in JWT.')
        try:
            user = UserProfile.objects.get(pk=payload['user_id'])
        except UserProfile.DoesNotExist:
            log.info('User not found from JWT payload {}'.format(payload))
            raise exceptions.AuthenticationFailed('User not found.')

        if user.deleted:
            log.info('Not allowing deleted user to log in {}'.format(user.pk))
            raise exceptions.AuthenticationFailed('User account is disabled.')

        amo.set_user(user)
        return user
Esempio n. 27
0
    def authenticate_credentials(self, payload):
        """
        Returns a verified AMO user who is active and allowed to make API
        requests.
        """
        if 'orig_iat' in payload:
            msg = ("API key based tokens are not refreshable, don't include "
                   "`orig_iat` in their payload.")
            raise exceptions.AuthenticationFailed(msg)
        try:
            api_key = APIKey.get_jwt_key(key=payload['iss'])
        except APIKey.DoesNotExist:
            msg = 'Invalid API Key.'
            raise exceptions.AuthenticationFailed(msg)

        if api_key.user.deleted:
            msg = 'User account is disabled.'
            raise exceptions.AuthenticationFailed(msg)
        if not api_key.user.read_dev_agreement:
            msg = 'User has not read developer agreement.'
            raise exceptions.AuthenticationFailed(msg)

        amo.set_user(api_key.user)
        return api_key.user
Esempio n. 28
0
    def authenticate_credentials(self, payload):
        """
        Returns a verified AMO user who is active and allowed to make API
        requests.
        """
        if 'orig_iat' in payload:
            msg = ("API key based tokens are not refreshable, don't include "
                   "`orig_iat` in their payload.")
            raise exceptions.AuthenticationFailed(msg)
        try:
            api_key = APIKey.get_jwt_key(key=payload['iss'])
        except APIKey.DoesNotExist:
            msg = 'Invalid API Key.'
            raise exceptions.AuthenticationFailed(msg)

        if api_key.user.deleted:
            msg = 'User account is disabled.'
            raise exceptions.AuthenticationFailed(msg)
        if not api_key.user.read_dev_agreement:
            msg = 'User has not read developer agreement.'
            raise exceptions.AuthenticationFailed(msg)

        amo.set_user(api_key.user)
        return api_key.user
Esempio n. 29
0
 def setUp(self):
     """Start with one user, two add-ons."""
     super(TestActivity, self).setUp()
     self.clone_addon(2)
     amo.set_user(self.user_profile)
     self.addon, self.addon2 = list(self.user_profile.addons.all())
Esempio n. 30
0
 def process_exception(self, request, exception):
     amo.set_user(None)
Esempio n. 31
0
def notify_compatibility_chunk(users, job, data, **kw):
    log.info('[%s@%s] Sending notification mail for job %s.' %
             (len(users), notify_compatibility.rate_limit, job.pk))
    set_user(get_task_user())
    dry_run = data['preview_only']
    app_id = job.target_version.application
    stats = collections.defaultdict(int)
    stats['processed'] = 0
    stats['is_dry_run'] = int(dry_run)

    for user in users:
        stats['processed'] += 1

        try:
            for a in chain(user.passing_addons, user.failing_addons):
                try:
                    results = job.result_set.filter(file__version__addon=a)

                    a.links = [
                        absolutify(
                            reverse('devhub.bulk_compat_result',
                                    args=[a.slug, r.pk])) for r in results
                    ]

                    v = a.current_version or a.latest_version
                    a.compat_link = absolutify(
                        reverse('devhub.versions.edit', args=[a.pk, v.pk]))
                except:
                    task_error = sys.exc_info()
                    log.error(
                        u'Bulk validation email error for user %s, '
                        u'addon %s: %s: %s' %
                        (user.email, a.slug, task_error[0], task_error[1]),
                        exc_info=False)

            context = Context({
                'APPLICATION':
                unicode(amo.APP_IDS[job.application].pretty),
                'VERSION':
                job.target_version.version,
                'PASSING_ADDONS':
                user.passing_addons,
                'FAILING_ADDONS':
                user.failing_addons,
            })

            log.info(
                u'Emailing %s%s for %d addons about '
                'bulk validation job %s' %
                (user.email, ' [PREVIEW]' if dry_run else '',
                 len(user.passing_addons) + len(user.failing_addons), job.pk))
            args = (Template(data['subject']).render(context),
                    Template(data['text']).render(context))
            kwargs = dict(from_email=settings.DEFAULT_FROM_EMAIL,
                          recipient_list=[user.email])
            if dry_run:
                job.preview_notify_mail(*args, **kwargs)
            else:
                stats['author_emailed'] += 1
                send_mail(*args, **kwargs)
                amo.log(amo.LOG.BULK_VALIDATION_USER_EMAILED,
                        user,
                        details={
                            'passing': [a.id for a in user.passing_addons],
                            'failing': [a.id for a in user.failing_addons],
                            'target': job.target_version.version,
                            'application': app_id
                        })
        except:
            task_error = sys.exc_info()
            log.error(u'Bulk validation email error for user %s: %s: %s' %
                      (user.email, task_error[0], task_error[1]),
                      exc_info=False)

    log.info('[%s@%s] bulk email stats for job %s: {%s}' %
             (len(users), notify_compatibility.rate_limit, job.pk, ', '.join(
                 '%s: %s' % (k, stats[k]) for k in sorted(stats.keys()))))
Esempio n. 32
0
 def process_exception(self, request, exception):
     amo.set_user(None)
Esempio n. 33
0
 def tearDown(self):
     amo.set_user(None)
     super(TestActivityLog, self).tearDown()
Esempio n. 34
0
 def process_response(self, request, response):
     amo.set_user(None)
     return response
Esempio n. 35
0
 def setUp(self):
     """Start with one user, two add-ons."""
     super(TestActivity, self).setUp()
     self.clone_addon(2)
     amo.set_user(self.user_profile)
     self.addon, self.addon2 = list(self.user_profile.addons.all())
Esempio n. 36
0
 def test_no_user(self):
     amo.set_user(None)
     count = ActivityLog.objects.count()
     amo.log(amo.LOG.CUSTOM_TEXT, 'hi')
     assert count == ActivityLog.objects.count()
Esempio n. 37
0
 def setUp(self):
     super(TestActivityLog, self).setUp()
     u = UserProfile.objects.create(username='******')
     self.request = Mock()
     self.request.user = self.user = u
     amo.set_user(u)
Esempio n. 38
0
 def test_no_user(self):
     amo.set_user(None)
     count = ActivityLog.objects.count()
     amo.log(amo.LOG.CUSTOM_TEXT, 'hi')
     eq_(count, ActivityLog.objects.count())
Esempio n. 39
0
def notify_compatibility_chunk(users, job, data, **kw):
    log.info('[%s@%s] Sending notification mail for job %s.'
             % (len(users), notify_compatibility.rate_limit, job.pk))
    set_user(get_task_user())
    dry_run = data['preview_only']
    app_id = job.target_version.application
    stats = collections.defaultdict(int)
    stats['processed'] = 0
    stats['is_dry_run'] = int(dry_run)

    for user in users:
        stats['processed'] += 1

        try:
            for a in chain(user.passing_addons, user.failing_addons):
                try:
                    results = job.result_set.filter(file__version__addon=a)

                    a.links = [absolutify(reverse('devhub.bulk_compat_result',
                                                  args=[a.slug, r.pk]))
                               for r in results]

                    v = a.current_version or a.latest_version
                    a.compat_link = absolutify(reverse('devhub.versions.edit',
                                                       args=[a.pk, v.pk]))
                except:
                    task_error = sys.exc_info()
                    log.error(u'Bulk validation email error for user %s, '
                              u'addon %s: %s: %s'
                              % (user.email, a.slug,
                                 task_error[0], task_error[1]), exc_info=False)

            context = Context({
                'APPLICATION': unicode(amo.APP_IDS[job.application].pretty),
                'VERSION': job.target_version.version,
                'PASSING_ADDONS': user.passing_addons,
                'FAILING_ADDONS': user.failing_addons,
            })

            log.info(u'Emailing %s%s for %d addons about '
                     'bulk validation job %s'
                     % (user.email,
                        ' [PREVIEW]' if dry_run else '',
                        len(user.passing_addons) + len(user.failing_addons),
                        job.pk))
            args = (Template(data['subject']).render(context),
                    Template(data['text']).render(context))
            kwargs = dict(from_email=settings.DEFAULT_FROM_EMAIL,
                          recipient_list=[user.email])
            if dry_run:
                job.preview_notify_mail(*args, **kwargs)
            else:
                stats['author_emailed'] += 1
                send_mail(*args, **kwargs)
                amo.log(
                    amo.LOG.BULK_VALIDATION_USER_EMAILED,
                    user,
                    details={'passing': [a.id for a in user.passing_addons],
                             'failing': [a.id for a in user.failing_addons],
                             'target': job.target_version.version,
                             'application': app_id})
        except:
            task_error = sys.exc_info()
            log.error(u'Bulk validation email error for user %s: %s: %s'
                      % (user.email,
                         task_error[0], task_error[1]), exc_info=False)

    log.info('[%s@%s] bulk email stats for job %s: {%s}'
             % (len(users), notify_compatibility.rate_limit, job.pk,
                ', '.join('%s: %s' % (k, stats[k])
                          for k in sorted(stats.keys()))))
Esempio n. 40
0
 def setUp(self):
     super(TestActivityLog, self).setUp()
     u = UserProfile.objects.create(username='******')
     self.request = Mock()
     self.request.user = self.user = u
     amo.set_user(u)
Esempio n. 41
0
 def setUp(self):
     super(LogTest, self).setUp()
     u = UserProfile.objects.create(username='******')
     amo.set_user(u)
Esempio n. 42
0
 def setUp(self):
     super(TestCollections, self).setUp()
     self.user = UserProfile.objects.create(username='******', email='uh@hh')
     self.other = UserProfile.objects.exclude(id=self.user.id)[0]
     amo.set_user(self.user)
Esempio n. 43
0
 def process_response(self, request, response):
     amo.set_user(None)
     return response
Esempio n. 44
0
 def tearDown(self):
     amo.set_user(None)
     super(TestActivityLog, self).tearDown()
Esempio n. 45
0
def test_post_teardown():
    amo.set_user(None)
    clean_translations(None)  # Make sure queued translations are removed.

    # Make sure we revert everything we might have changed to prefixers.
    amo.urlresolvers.clean_url_prefixes()
Esempio n. 46
0
 def setUp(self):
     super(TestCollections, self).setUp()
     self.user = UserProfile.objects.create(username='******', email='uh@hh')
     self.other = UserProfile.objects.exclude(id=self.user.id)[0]
     amo.set_user(self.user)