Example #1
0
    def test_redirect(self):
        url = '/developers/'
        res = self.client.get(urlparams(reverse('users.logout'), to=url),
                              follow=True)
        self.assert3xx(res, url, status_code=302)

        # Test that we don't follow domains
        url = urlparams(reverse('users.logout'), to='http://ev.il/developers/')
        res = self.client.get(url, follow=True)
        self.assert3xx(res, '/', status_code=302)
Example #2
0
def authorize(request):
    if request.method == 'GET' and 'oauth_token' in request.GET:
        try:
            t = Token.objects.get(token_type=REQUEST_TOKEN,
                                  key=request.GET['oauth_token'])
        except Token.DoesNotExist:
            log.error('Invalid OAuth request for obtaining user authorization')
            return HttpResponse(status=401)
        return render(request, 'developers/oauth_authorize.html',
                      {'app_name': t.creds.app_name,
                       'oauth_token': request.GET['oauth_token']})
    elif request.method == 'POST':
        token = request.POST.get('oauth_token')
        try:
            t = Token.objects.get(token_type=REQUEST_TOKEN,
                                  key=token)
        except Token.DoesNotExist:
            return HttpResponse(status=401)
        if 'grant' in request.POST:
            t.user = request.user
            t.save()
            return HttpResponseRedirect(
                urlparams(t.creds.redirect_uri, oauth_token=token,
                          oauth_verifier=t.verifier))
        elif 'deny' in request.POST:
            t.delete()
            return HttpResponse(status=200)
    else:
        log.error('Invalid OAuth request for user access authorization')
        return HttpResponse(status=401)
Example #3
0
    def test_get_content_ratings_since(self):
        cr = ContentRating.objects.create(addon=self.app, ratings_body=0,
                                          rating=0)
        cr.update(modified=self.days_ago(100))

        res = self.client.get(urlparams(
            reverse('content-ratings-list', args=[self.app.app_slug]),
            since=self.days_ago(5)))
        eq_(res.status_code, 404)

        cr.update(modified=self.days_ago(1))
        res = self.client.get(urlparams(
            reverse('content-ratings-list', args=[self.app.id]),
            since=self.days_ago(5)))
        eq_(res.status_code, 200)
        eq_(len(json.loads(res.content)['objects']), 1)
Example #4
0
def _mini_manifest(addon, version_id, token=None):
    if not addon.is_packaged:
        raise http.Http404

    version = get_object_or_404(addon.versions, pk=version_id)
    file_ = version.all_files[0]
    manifest = addon.get_manifest_json(file_)

    package_path = absolutify(
        reverse('reviewers.signed', args=[addon.app_slug, version.id]))

    if token:
        # Generate a fresh token.
        token = Token(data={'app_id': addon.id})
        token.save()
        package_path = urlparams(package_path, token=token.token)

    data = {
        'name': manifest['name'],
        'version': version.version,
        'size': file_.size,
        'release_notes': version.releasenotes,
        'package_path': package_path,
    }
    for key in ['developer', 'icons', 'locales']:
        if key in manifest:
            data[key] = manifest[key]

    return json.dumps(data, cls=JSONEncoder)
Example #5
0
    def test_logout(self):
        data = self._test_login()

        r = self.client.delete(
            urlparams(self.logout_url, _user=data['token']),
            content_type='application/json')
        eq_(r.status_code, 204)
Example #6
0
def redirect(request, viewer, key):
    new = Token(data=[viewer.file.id, key])
    new.save()
    url = urljoin(settings.STATIC_URL,
                  reverse('mkt.files.serve', args=[viewer, key]))
    url = urlparams(url, token=new.token)
    return http.HttpResponseRedirect(url)
Example #7
0
def url(viewname, *args, **kwargs):
    """Helper for Django's ``reverse`` in templates."""
    host = kwargs.pop('host', '')
    src = kwargs.pop('src', '')
    url = '%s%s' % (host, reverse(viewname, args=args, kwargs=kwargs))
    if src:
        url = urlparams(url, src=src)
    return url
Example #8
0
    def test_logout(self):
        UserProfile.objects.create(email='*****@*****.**')
        data = self._test_login()

        r = self.client.delete(
            urlparams(self.logout_url, _user=data['token']),
            content_type='application/json')
        eq_(r.status_code, 204)
Example #9
0
def get_absolute_url(url, api_name='apps', absolute=True):
    # Gets an absolute url, except where you don't want that.
    url[1]['api_name'] = api_name
    res = reverse(url[0], kwargs=url[1])
    if absolute:
        res = urlparse.urljoin(settings.SITE_URL, res)
    if len(url) > 2:
        res = urlparams(res, **url[2])
    return res
Example #10
0
 def test_list_translation(self):
     res = self.anon.get(urlparams(reverse('regions-list'), lang='fr'))
     eq_(res.status_code, 200)
     data = json.loads(res.content)
     for row in data['objects']:
         region = mkt.regions.REGIONS_DICT.get(row['slug'])
         eq_(row['name'], region.name)
         eq_(row['slug'], region.slug)
         eq_(row['id'], region.id)
     eq_(len(data['objects']), len(mkt.regions.REGIONS_DICT))
     eq_(data['meta']['total_count'], len(mkt.regions.REGIONS_DICT))
     eq_(data['objects'][0]['name'], 'Afrique du Sud')
Example #11
0
def media(context, url, key='MEDIA_URL'):
    """Get a MEDIA_URL link with a cache buster querystring."""
    if 'BUILD_ID' in context:
        build = context['BUILD_ID']
    else:
        if url.endswith('.js'):
            build = context['BUILD_ID_JS']
        elif url.endswith('.css'):
            build = context['BUILD_ID_CSS']
        else:
            build = context['BUILD_ID_IMG']
    return urljoin(context[key], urlparams(url, b=build))
Example #12
0
 def test_list(self):
     res = self.anon.get(urlparams(reverse('regions-list')))
     eq_(res.status_code, 200)
     data = json.loads(res.content)
     for row in data['objects']:
         region = mkt.regions.REGIONS_DICT.get(row['slug'])
         eq_(row['name'], region.name)
         eq_(row['slug'], region.slug)
         eq_(row['id'], region.id)
         eq_(row['default_currency'], region.default_currency)
     eq_(len(data['objects']), len(mkt.regions.REGIONS_DICT))
     eq_(data['meta']['total_count'], len(mkt.regions.REGIONS_DICT))
Example #13
0
    def patch(self, request, *args, **kwargs):
        form = FailureForm(request.DATA)
        if not form.is_valid():
            return Response(form.errors, status=status.HTTP_400_BAD_REQUEST)

        obj = self.get_object()
        data = {
            'transaction_id': obj,
            'transaction_url': absolutify(
                urlparams(reverse('mkt.developers.transactions'),
                          transaction_id=obj.uuid)),
            'url': form.cleaned_data['url'],
            'retries': form.cleaned_data['attempts']}
        owners = obj.addon.authors.values_list('email', flat=True)
        send_mail_jinja('Payment notification failure.',
                        'webpay/failure.txt',
                        data, recipient_list=owners)
        return Response(status=status.HTTP_202_ACCEPTED)
Example #14
0
def product_as_dict(request, product, purchased=None, receipt_type=None,
                    src=''):
    receipt_url = (reverse('receipt.issue', args=[product.app_slug]) if
                   receipt_type else product.get_detail_url('record'))
    token_url = reverse('generate-reviewer-token', args=[product.app_slug])

    src = src or request.GET.get('src', '')
    reviewer = receipt_type == 'reviewer'

    # This is the only info. we need to render the app buttons on the
    # Reviewer Tools pages.
    ret = {
        'id': product.id,
        'name': product.name,
        'categories': product.categories,
        'manifest_url': product.get_manifest_url(reviewer),
        'recordUrl': urlparams(receipt_url, src=src),
        'tokenUrl': token_url,
        'is_packaged': product.is_packaged,
        'src': src
    }

    if product.premium:
        ret.update({
            'price': product.get_price(region=request.REGION.id),
            'priceLocale': product.get_price_locale(region=request.REGION.id),
        })

        if request.user.is_authenticated():
            ret['isPurchased'] = purchased

    # Jinja2 escape everything except this list so that bool is retained
    # for the JSON encoding.
    wl = ('categories', 'currencies', 'isPurchased', 'is_packaged', 'previews',
          'price', 'priceLocale')
    return dict([k, jinja2.escape(v) if k not in wl else v]
                for k, v in ret.items())
Example #15
0
def manifest(request):
    ctx = RequestContext(request)
    data = {
        'name': getattr(settings, 'WEBAPP_MANIFEST_NAME',
                        'Firefox Marketplace'),
        'description': 'The Firefox Marketplace',
        'developer': {
            'name': 'Mozilla',
            'url': 'http://mozilla.org',
        },
        'icons': {
            # Using the default addon image until we get a marketplace logo.
            '128': media(ctx, 'img/mkt/logos/128.png'),
            '64': media(ctx, 'img/mkt/logos/64.png'),
            '32': media(ctx, 'img/mkt/logos/32.png'),
        },
        'activities': {
            'marketplace-app': {'href': '/'},
            'marketplace-app-rating': {'href': '/'},
            'marketplace-category': {'href': '/'},
            'marketplace-search': {'href': '/'},
        }
    }
    if get_carrier():
        data['launch_path'] = urlparams('/', carrier=get_carrier())

    manifest_content = json.dumps(data)
    manifest_etag = hashlib.sha256(manifest_content).hexdigest()

    @etag(lambda r: manifest_etag)
    def _inner_view(request):
        response = HttpResponse(
            manifest_content,
            content_type='application/x-web-app-manifest+json')
        return response

    return _inner_view(request)
Example #16
0
 def get_refund_url(self):
     return urlparams(self.addon.get_dev_url('issue_refund'),
                      transaction_id=self.transaction_id)
Example #17
0
 def get_url_path(self, src):
     url = os.path.join(reverse('downloads.file', args=[self.id]),
                        self.filename)
     # Firefox's Add-on Manager needs absolute urls.
     return absolutify(urlparams(url, src=src))
Example #18
0
def test_urlparams_unicode():
    url = u'/xx?evil=reco\ufffd\ufffd\ufffd\u02f5'
    urlparams(url)