def record(request, addon): is_dev = request.check_ownership(addon, require_owner=False, ignore_disabled=True) if (not (addon.is_public() or acl.check_reviewer(request) or is_dev or not addon.is_webapp())): raise http.Http404 if addon.is_premium() and not addon.has_purchased(request.amo_user): return http.HttpResponseForbidden() installed, c = Installed.objects.safer_get_or_create(addon=addon, user=request.amo_user) send_request('install', request, { 'app-domain': addon.domain_from_url(addon.origin), 'app-id': addon.pk}) # Look up to see if its in the receipt cache and log if we have # to recreate it. receipt = memoize_get('create-receipt', installed.pk) error = '' cef(request, addon, 'request', 'Receipt requested') if not receipt: cef(request, addon, 'sign', 'Receipt signing') try: receipt = create_receipt(installed.pk) except SigningError: error = _('There was a problem installing the app.') return {'addon': addon.pk, 'receipt': receipt, 'error': error}
def application(environ, start_response): status = '200 OK' with statsd.timer('services.verify'): data = environ['wsgi.input'].read() try: addon_id = id_re.search(environ['PATH_INFO']).group('addon_id') except AttributeError: output = '' log_info({'receipt': '%s...' % data[:10], 'addon': 'empty'}, 'Wrong url %s' % environ['PATH_INFO'][:20]) start_response('500 Internal Server Error', []) return [output] try: verify = Verify(addon_id, data, environ) output = verify() start_response(status, verify.get_headers(len(output))) cef(environ, addon_id, 'verify', 'Receipt verification') except: output = '' log_exception({'receipt': '%s...' % data[:10], 'addon': addon_id}) cef(environ, addon_id, 'verify', 'Receipt verification error') start_response('500 Internal Server Error', []) return [output]
def expired(self, receipt): if settings.WEBAPPS_RECEIPT_EXPIRED_SEND: receipt['exp'] = (calendar.timegm(gmtime()) + settings.WEBAPPS_RECEIPT_EXPIRY_SECONDS) cef(self.environ, self.addon_id, 'sign', 'Expired signing request') return json.dumps({'status': 'expired', 'receipt': sign(receipt)}) return json.dumps({'status': 'expired'})
def _record(request, addon): logged = request.user.is_authenticated() premium = addon.is_premium() allow_anon_install = waffle.switch_is_active('anonymous-free-installs') # Require login for premium. if not logged and (premium or not allow_anon_install): return redirect(reverse('users.login')) ctx = {'addon': addon.pk} # Don't generate receipts if we're allowing logged-out install. if logged or not allow_anon_install: is_dev = request.check_ownership(addon, require_owner=False, ignore_disabled=True) is_reviewer = acl.check_reviewer(request) if (not addon.is_webapp() or not addon.is_public() and not (is_reviewer or is_dev)): raise http.Http404 if (premium and not addon.has_purchased(request.amo_user) and not is_reviewer and not is_dev): return http.HttpResponseForbidden() installed, c = Installed.objects.safer_get_or_create( addon=addon, user=request.amo_user) # Look up to see if its in the receipt cache and log if we have # to recreate it. receipt = memoize_get('create-receipt', installed.pk) error = '' cef(request, addon, 'request', 'Receipt requested') if not receipt: cef(request, addon, 'sign', 'Receipt signing') try: receipt = create_receipt(installed.pk) except SigningError: error = _('There was a problem installing the app.') ctx.update(receipt=receipt, error=error) else: if not addon.is_public() or not addon.is_webapp(): raise http.Http404 amo.log(amo.LOG.INSTALL_ADDON, addon) send_request('install', request, { 'app-domain': addon.domain_from_url(addon.origin), 'app-id': addon.pk }) return ctx
def _record(request, addon): logged = request.user.is_authenticated() premium = addon.is_premium() allow_anon_install = waffle.switch_is_active('anonymous-free-installs') # Require login for premium. if not logged and (premium or not allow_anon_install): return redirect(reverse('users.login')) ctx = {'addon': addon.pk} # Don't generate receipts if we're allowing logged-out install. if logged or not allow_anon_install: is_dev = request.check_ownership(addon, require_owner=False, ignore_disabled=True) is_reviewer = acl.check_reviewer(request) if (not addon.is_webapp() or not addon.is_public() and not (is_reviewer or is_dev)): raise http.Http404 if (premium and not addon.has_purchased(request.amo_user) and not is_reviewer and not is_dev): return http.HttpResponseForbidden() installed, c = Installed.objects.safer_get_or_create(addon=addon, user=request.amo_user) # Look up to see if its in the receipt cache and log if we have # to recreate it. receipt = memoize_get('create-receipt', installed.pk) error = '' cef(request, addon, 'request', 'Receipt requested') if not receipt: cef(request, addon, 'sign', 'Receipt signing') try: receipt = create_receipt(installed.pk) except SigningError: error = _('There was a problem installing the app.') ctx.update(receipt=receipt, error=error) else: if not addon.is_public() or not addon.is_webapp(): raise http.Http404 amo.log(amo.LOG.INSTALL_ADDON, addon) send_request('install', request, { 'app-domain': addon.domain_from_url(addon.origin), 'app-id': addon.pk }) return ctx
def issue(request, addon): user = request.amo_user review = acl.action_allowed_user(user, 'Apps', 'Review') if user else None author = addon.has_author(user) if not user or not (review or author): return http.HttpResponseForbidden() installed, c = Installed.objects.safer_get_or_create(addon=addon, user=request.amo_user) error = '' flavour = 'reviewer' if review else 'developer' cef(request, addon, 'sign', 'Receipt signing for %s' % flavour) try: receipt = create_receipt(installed.pk, flavour=flavour) except SigningError: error = _('There was a problem installing the app.') return {'addon': addon.pk, 'receipt': receipt, 'error': error}
def record(request, addon): if not (addon.is_public() or acl.check_reviewer(request)): raise http.Http404 if addon.is_webapp(): installed, c = Installed.objects.safer_get_or_create(addon=addon, user=request.amo_user) send_request("install", request, {"app-domain": addon.domain_from_url(addon.origin), "app-id": addon.pk}) # Look up to see if its in the receipt cache and log if we have # to recreate it. receipt = memoize_get("create-receipt", installed.pk) error = "" cef(request, addon, "request", "Receipt requested") if not receipt: cef(request, addon, "sign", "Receipt signing") try: receipt = create_receipt(installed.pk) except SigningError: error = _("There was a problem installing the app.") return {"addon": addon.pk, "receipt": receipt, "error": error}