Skip to content
This repository has been archived by the owner on Mar 15, 2018. It is now read-only.

Commit

Permalink
Revert "block downloads if you haven't paid (bug 952731)"
Browse files Browse the repository at this point in the history
This reverts commit 60390db.
  • Loading branch information
Andy McKay committed Jan 16, 2014
1 parent 0ff7133 commit 2a6a628
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 65 deletions.
12 changes: 3 additions & 9 deletions apps/amo/tests/__init__.py
Expand Up @@ -525,16 +525,10 @@ def create_flag(self, name=None, **kw):
kw.setdefault('everyone', True)
return Flag.objects.create(**kw)

def grant_permission(self, user, rules, name='Test Group'):
"""
Creates group with rule, and adds user to group.
:param user: can be a UserProfile object, or just the id.
"""
if isinstance(user, UserProfile):
user = user.id
def grant_permission(self, user_obj, rules, name='Test Group'):
"""Creates group with rule, and adds user to group."""
group = Group.objects.create(name=name, rules=rules)
GroupUser.objects.create(group=group, user_id=user)
GroupUser.objects.create(group=group, user=user_obj)

def days_ago(self, days):
return days_ago(days)
Expand Down
42 changes: 5 additions & 37 deletions mkt/downloads/tests/test_views.py
Expand Up @@ -9,19 +9,17 @@
from lib.crypto import packaged
from lib.crypto.tests import mock_sign
from mkt.submit.tests.test_views import BasePackagedAppTest
from users.models import UserProfile


class Download(BasePackagedAppTest):
class TestDownload(BasePackagedAppTest):
fixtures = ['base/apps', 'base/users', 'base/platforms',
'webapps/337141-steamcube']

def setUp(self):
super(Download, self).setUp()
super(Download, self).setup_files()
super(TestDownload, self).setUp()
super(TestDownload, self).setup_files()
self.url = reverse('downloads.file', args=[self.file.pk])


class TestDownload(Download):

@mock.patch.object(packaged, 'sign', mock_sign)
def test_download(self):
if not settings.XSENDFILE:
Expand Down Expand Up @@ -77,33 +75,3 @@ def test_file_blocklisted(self):
res = self.client.get(self.url)
eq_(res.status_code, 200)
assert settings.XSENDFILE_HEADER in res


class TestDownloadPremium(Download):

def setUp(self):
super(TestDownloadPremium, self).setUp()
self.make_premium(self.app)

def test_anon(self):
self.client.logout()
eq_(self.client.get(self.url).status_code, 403)

def test_not_purchased(self):
eq_(self.client.get(self.url).status_code, 402)

def test_purchased(self):
self.app.addonpurchase_set.create(user_id=999)
eq_(self.client.get(self.url).status_code, 200)

def test_developer(self):
self.app.addonuser_set.create(user_id=999, role=amo.AUTHOR_ROLE_VIEWER)
eq_(self.client.get(self.url).status_code, 200)

def test_reviewer(self):
self.grant_permission(999, 'Apps:Review')
eq_(self.client.get(self.url).status_code, 200)

def test_other_reviewer(self):
self.grant_permission(999, 'Themes:Review')
eq_(self.client.get(self.url).status_code, 402)
19 changes: 0 additions & 19 deletions mkt/downloads/views.py
Expand Up @@ -20,7 +20,6 @@ def download_file(request, file_id, type=None):
if webapp.is_disabled or file.status == amo.STATUS_DISABLED:
if not acl.check_addon_ownership(request, webapp, viewer=True,
ignore_disabled=True):
log.info('Download of %s denied: disabled.' % (webapp.id))
raise http.Http404()

# We treat blocked files like public files so users get the update.
Expand All @@ -30,28 +29,10 @@ def download_file(request, file_id, type=None):
else:
# This is someone asking for an unsigned packaged app.
if not acl.check_addon_ownership(request, webapp, dev=True):
log.info('Download of %s denied: not signed yet.' % (webapp.id))
raise http.Http404()

path = file.file_path

# If it's a paid app and its not been paid for stop it downloading unless..
if webapp.is_premium():
if not request.user.is_authenticated():
log.info('Download of %s denied: not logged in.' % (webapp.id))
return http.HttpResponseForbidden()

if not webapp.has_purchased(request.amo_user):
# User hasn't purchased, are they a developer of the app,
# or a reviewer?
log.info('Download of %s: not purchased by user.' % (webapp.id))
if (not request.check_ownership(webapp, require_owner=False,
ignore_disabled=True, admin=False)
and not acl.check_reviewer(request, only='app')):
log.info('Download of %s denied: not developer or reviewer.' %
(webapp.id))
return http.HttpResponse(status=402)

log.info('Downloading package: %s from %s' % (webapp.id, path))
return HttpResponseSendFile(request, path, content_type='application/zip',
etag=file.hash.split(':')[-1])

0 comments on commit 2a6a628

Please sign in to comment.