def install(request): form = ReceiptForm(request.DATA) if not form.is_valid(): return Response({'error_message': form.errors}, status=400) obj = form.cleaned_data['app'] type_ = install_type(request, obj) if type_ == apps.INSTALL_TYPE_DEVELOPER: receipt = install_record(obj, request, apps.INSTALL_TYPE_DEVELOPER) else: # The app must be public and if its a premium app, you # must have purchased it. if not obj.is_public(): log.info('App not public: %s' % obj.pk) return Response('App not public.', status=403) if (obj.is_premium() and not obj.has_purchased(request.amo_user)): # Apps that are premium but have no charge will get an # automatic purchase record created. This will ensure that # the receipt will work into the future if the price changes. if obj.premium and not obj.premium.price.price: log.info('Create purchase record: {0}'.format(obj.pk)) AddonPurchase.objects.get_or_create(addon=obj, user=request.amo_user, type=CONTRIB_NO_CHARGE) else: log.info('App not purchased: %s' % obj.pk) return Response('You have not purchased this app.', status=402) receipt = install_record(obj, request, type_) record(request, obj) return Response({'receipt': receipt}, status=201)
def handle(self, bundle, request, **kwargs): form = ReceiptForm(bundle.data) if not form.is_valid(): raise self.form_errors(form) bundle.obj = form.cleaned_data['app'] # Developers get handled quickly. if check_ownership(request, bundle.obj, require_owner=False, ignore_disabled=True, admin=False): return self.record(bundle, request, apps.INSTALL_TYPE_DEVELOPER) # The app must be public and if its a premium app, you # must have purchased it. if not bundle.obj.is_public(): log.info('App not public: %s' % bundle.obj.pk) raise ImmediateHttpResponse(response=http.HttpForbidden()) if (bundle.obj.is_premium() and not bundle.obj.has_purchased(request.amo_user)): log.info('App not purchased: %s' % bundle.obj.pk) raise ImmediateHttpResponse(response=HttpPaymentRequired()) # Anonymous users will fall through, they don't need anything else # handling. if request.user.is_authenticated(): return self.record(bundle, request, apps.INSTALL_TYPE_USER)
def handle(self, bundle, request, **kwargs): form = ReceiptForm(bundle.data) if not form.is_valid(): raise self.form_errors(form) bundle.obj = form.cleaned_data["app"] type_ = install_type(request, bundle.obj) if type_ == apps.INSTALL_TYPE_DEVELOPER: return self.record(bundle, request, apps.INSTALL_TYPE_DEVELOPER) # The app must be public and if its a premium app, you # must have purchased it. if not bundle.obj.is_public(): log.info("App not public: %s" % bundle.obj.pk) raise http_error(http.HttpForbidden, "App not public.") if bundle.obj.is_premium() and not bundle.obj.has_purchased(request.amo_user): # Apps that are premium but have no charge will get an # automatic purchase record created. This will ensure that # the receipt will work into the future if the price changes. if bundle.obj.premium and not bundle.obj.premium.price.price: log.info("Create purchase record: {0}".format(bundle.obj.pk)) AddonPurchase.objects.get_or_create(addon=bundle.obj, user=request.amo_user, type=CONTRIB_NO_CHARGE) else: log.info("App not purchased: %s" % bundle.obj.pk) raise http_error(HttpPaymentRequired, "You have not purchased this app.") return self.record(bundle, request, type_)
def handle(self, bundle, request, **kwargs): form = ReceiptForm(bundle.data) if not form.is_valid(): raise self.form_errors(form) bundle.obj = form.cleaned_data['app'] type_ = install_type(request, bundle.obj) if type_ == apps.INSTALL_TYPE_DEVELOPER: return self.record(bundle, request, apps.INSTALL_TYPE_DEVELOPER) # The app must be public and if its a premium app, you # must have purchased it. if not bundle.obj.is_public(): log.info('App not public: %s' % bundle.obj.pk) raise http_error(http.HttpForbidden, 'App not public.') if (bundle.obj.is_premium() and not bundle.obj.has_purchased(request.amo_user)): # Apps that are premium but have no charge will get an # automatic purchase record created. This will ensure that # the receipt will work into the future if the price changes. if bundle.obj.premium and not bundle.obj.premium.price.price: log.info('Create purchase record: {0}'.format(bundle.obj.pk)) AddonPurchase.objects.get_or_create(addon=bundle.obj, user=request.amo_user, type=CONTRIB_NO_CHARGE) else: log.info('App not purchased: %s' % bundle.obj.pk) raise http_error(HttpPaymentRequired, 'You have not purchased this app.') # Anonymous users will fall through, they don't need anything else # handling. if request.user.is_authenticated(): return self.record(bundle, request, type_)
def handle(self, bundle, request, **kwargs): form = ReceiptForm(bundle.data) if not form.is_valid(): raise self.form_errors(form) bundle.obj = form.cleaned_data['app'] # Developers get handled quickly. if check_ownership(request, bundle.obj, require_owner=False, ignore_disabled=True, admin=False): return self.record(bundle, request, apps.INSTALL_TYPE_DEVELOPER) # The app must be public and if its a premium app, you # must have purchased it. if not bundle.obj.is_public(): log.info('App not public: %s' % bundle.obj.pk) raise http_error(http.HttpForbidden, 'App not public.') if (bundle.obj.is_premium() and not bundle.obj.has_purchased(request.amo_user)): # Apps that are premium but have no charge will get an # automatic purchase record created. This will ensure that # the receipt will work into the future if the price changes. if bundle.obj.premium and not bundle.obj.premium.has_price(): log.info('Create purchase record: {0}'.format(bundle.obj.pk)) AddonPurchase.objects.get_or_create(addon=bundle.obj, user=request.amo_user, type=CONTRIB_NO_CHARGE) else: log.info('App not purchased: %s' % bundle.obj.pk) raise http_error(HttpPaymentRequired, 'You have not purchased this app.') # Anonymous users will fall through, they don't need anything else # handling. if request.user.is_authenticated(): return self.record(bundle, request, apps.INSTALL_TYPE_USER)