def start_journey(request, hashid): Organization.get() me = get_me(request) pp = ProductPurchase.objects.get(hashid=hashid) Journey.objects.create(productpurchase=pp, start_date=timezone.now()) if pp.purchase.person != me: return redirect(reverse('logout')) me = get_me(request) return redirect(reverse("products:productpurchase", args=(pp.hashid, )))
def product_download(request, course_slug, resource_url): try: product = Product.get_from_slug(course_slug) me = get_me(request) if ProductPurchase.objects.filter( product=product, purchase__person=me, purchase__refunded=False, ).all().count() > 0: view_dir = os.path.abspath( os.path.dirname(os.path.dirname(__file__))) with open( os.path.join(view_dir, "products", "downloads", course_slug, resource_url), "rb") as f: content = f.read() mime_type = magic.from_buffer(content, mime=True) response = HttpResponse(content, content_type=mime_type) response['Content-Type'] = mime_type response['Content-Length'] = len(content) return response return redirect(reverse('login')) except: import traceback traceback.print_exc() return redirect(reverse('login'))
def checkout_help_edition(request, course_slug): o = Organization.get() product = Product.get_from_slug(course_slug) try: me = get_me(request) except: return redirect( "%s?help_edition=1" % reverse("products:course_purchase", args=(product.slug, ))) purchase, purchase_created = Purchase.objects.get_or_create( person=me, help_edition=True, ) purchase.total = Decimal(0.00) purchase.save() pp, pp_created = ProductPurchase.objects.get_or_create( product=product, purchase=purchase, ) pp.send_purchase_email() # pp = ProductPurchase.objects.get(hashid=hashid) # if pp.purchase.person != me: # return redirect(reverse('logout')) return TemplateResponse( request, 'products/%s/checkout_success.html' % (product.slug, ), locals())
def checkout_success(request, course_slug): o = Organization.get() product = Product.get_from_slug(course_slug) p = Person.objects.get(hashid=request.GET['ci']) me = get_me(request) sess = stripe.checkout.Session.retrieve(request.GET['session_id']) # print(sess) assert p == me purchase, purchase_created = Purchase.objects.get_or_create( person=p, stripe_session_id=sess["id"], stripe_payment_intent_id=sess["payment_intent"], ) purchase.total = Decimal(sess["amount_total"] / 100) purchase.save() pp, pp_created = ProductPurchase.objects.get_or_create( product=product, purchase=purchase, ) pp.send_purchase_email() # pp = ProductPurchase.objects.get(hashid=hashid) # if pp.purchase.person != me: # return redirect(reverse('logout')) return TemplateResponse( request, 'products/%s/checkout_success.html' % (product.slug, ), locals())
def course_purchase(request, course_slug): o = Organization.get() product = Product.get_from_slug(course_slug) purchased = False try: me = get_me(request) if me.products.filter(product=product).count() > 0: purchased = True pp = me.products.filter(product=product)[0] return redirect( reverse('products:productpurchase', args=(pp.hashid, ))) except: pass # if not me and request.method == 'GET': # cached_resp = cache.get("%s_purchase_not_logged_in%s" % (course_slug, request.META["QUERY_STRING"])) # if cached_resp: # return cached_resp # else: # resp = TemplateResponse( # request, 'products/%s/purchase.html' % ( # product.slug, # ), # locals() # ) # resp.render() # cache.set("%s_purchase_not_logged_in%s" % (course_slug, request.META["QUERY_STRING"]), resp) # return resp resp = TemplateResponse(request, 'products/%s/purchase.html' % (product.slug, ), locals()) # resp.render() return resp
def refund_confirm(request, hashid): o = Organization.get() me = get_me(request) pp = ProductPurchase.objects.get(hashid=hashid) pp.purchase.refund(feedback=request.POST.get('feedback', None)) return locals()
def account(request): o = Organization.get() me = get_me(request) products = Product.objects.filter() information_updated = False password_changed = False if request.method == "POST": if request.POST.get("type") == "information": # Process info update me.first_name = request.POST["first_name"] me.email = request.POST["email"] me.turned_off_product_emails = request.POST.get( "turned_off_product_emails", None) != "checked" me.save() information_updated = True elif request.POST.get("type") == "password": # Update password if request.POST.get("password"): password_message = "Password changed." me.set_password(request.POST["password"]) me.save() update_session_auth_hash(request, me) else: password_message = "Password was blank." return locals()
def confirm_delete_journey(request, hashid): o = Organization.get() me = get_me(request) journey = Journey.objects.get(hashid=hashid) if journey.productpurchase.purchase.person != me: return redirect(reverse('logout')) return locals()
def home(request): o = Organization.get() me = get_me(request) products = Product.objects.filter() if me.products.count() == 1: return redirect( reverse("products:productpurchase", args=(me.products.first().hashid, ))) return locals()
def journey(request, hashid): o = Organization.get() me = get_me(request) journey = Journey.objects.get(hashid=hashid) if journey.productpurchase.purchase.person != me: return redirect(reverse('logout')) # TODO: Add auth assertion return locals()
def send_feedback(request, course_slug): product = Product.get_from_slug(course_slug) me = get_me(request) ProductFeedback.objects.create( product=product, person=me, raw_data=json.dumps(json.loads(request.body)), ) return { "suceess": True, }
def confirm_delete_account(request): o = Organization.get() me = get_me(request) if request.POST.get("submit") == "yes": me.delete() user = request.user logout(request) user.delete() return redirect(reverse('products:account_deleted')) return locals()
def today(request): # TODO: Make this redirect to today's day. consumer_str = Factory.rand_str(length=20, include_emoji=False) if request.user.is_authenticated: me = get_me(request) else: return redirect(reverse('clubhouse:home')) date = datetime.datetime.today() return locals()
def course_beta_purchase(request, course_slug): o = Organization.get() product = Product.get_from_slug(course_slug) purchased = False try: me = get_me(request) if me.products.filter(product=product).count() > 0: purchased = True pp = me.products.filter(product=product)[0] except: pass return TemplateResponse( request, 'products/%s/purchase_beta.html' % (product.slug, ), locals())
def productpurchase(request, hashid): o = Organization.get() pp = ProductPurchase.objects.get(hashid=hashid) me = get_me(request) if pp.purchase.person != me: return redirect(reverse('logout')) purchase = pp.purchase product = pp.product post_purchase = True if product.is_downloadable: return TemplateResponse( request, 'products/%s/checkout_success.html' % (product.slug, ), locals()) return locals()
def purchase_complete(request, course_slug): try: o = Organization.get() product = Product.get_from_slug(course_slug) me = get_me(request) pp = ProductPurchase.objects.filter( product=product, purchase__person=me, purchase__refunded=False, ).all().first() return TemplateResponse( request, 'products/%s/checkout_success.html' % (product.slug, ), locals()) except: return redirect(reverse('login'))
def day(request, hashid): consumer_str = Factory.rand_str(length=20, include_emoji=False) o = Organization.get() day = JourneyDay.objects.get(hashid=hashid) me = get_me(request) if day.journey.productpurchase.purchase.person != me: return redirect(reverse('logout')) data_store_url = "/ws/journey/%s/%s" % ( day.journey.hashid, day.hashid, ) person_store_url = "/ws/p/%s" % (me.hashid, ) return TemplateResponse( request, 'products/%s/day-%s.html' % ( day.journey.productpurchase.product.slug, day.day_number, ), locals())
def delete_journey(request, hashid): o = Organization.get() me = get_me(request) try: journey = Journey.objects.get(hashid=hashid) pp_hashid = journey.productpurchase.hashid assert request.method == "POST" assert request.POST.get("do_delete") == "yes" if journey.productpurchase.purchase.person != me: return redirect(reverse('logout')) course_hashid = "%s" % journey.productpurchase.hashid journey.delete() return redirect(reverse('products:productpurchase', args=(pp_hashid, ))) except: return redirect(reverse('products:home')) pass return locals()
def data_export(request): me = get_me(request) return JsonResponse(me.gdpr_dump, content_type='application/json', json_dumps_params={'indent': 4})
def create_checkout_session(request, course_slug): product = Product.get_from_slug(course_slug) try: me = get_me(request) if request.method == 'GET': beta = request.GET.get('beta') == "yesplease" help_edition = request.GET.get('he') == "1" help_edition_price = request.GET.get('p') if help_edition and not help_edition_price: message = "%s" % ( "Please enter a price. For no cost, put in 0.", ) return {'error': message} test_price = request.GET.get('t') try: test_price = int(b64decode(test_price)[1:]) if test_price <= 0: test_price = None except: pass host = request.META["HTTP_HOST"] domain_url = 'https://%s%s' % (host, reverse('products:course_purchase', args=(product.slug, ))) price = product.stripe_price_id # mode = 'payment' price_data = None if beta: price = product.stripe_beta_price_id if test_price: price = "%s00" % test_price price_data = { "unit_amount": price, "currency": "usd", "product": product.stripe_product_id, } line_items = [{ # 'name': '7-Day Sprint', 'quantity': 1, # 'currency': 'usd', # 'amount': '10000', 'price_data': price_data, }] elif help_edition: price = int(help_edition_price.replace(".", "")) price_data = { "unit_amount": price, "currency": "usd", "product": product.stripe_product_id, } line_items = [{ # 'name': '7-Day Sprint', 'quantity': 1, # 'currency': 'usd', # 'amount': '10000', 'price_data': price_data, }] else: line_items = [{ # 'name': '7-Day Sprint', 'quantity': 1, # 'currency': 'usd', # 'amount': '10000', 'price': price, }] # mode = 'subscription' # print(price) try: # Create new Checkout Session for the order # Other optional params include: # [billing_address_collection] - to display billing address details on the page # [customer] - if you have an existing Stripe Customer ID # [payment_intent_data] - capture the payment later # [customer_email] - prefill the email input in the form # For full details see https://stripe.com/docs/api/checkout/sessions/create # ?session_id={CHECKOUT_SESSION_ID} means the redirect will have the session ID set as a query param client_reference_id = "%s.%s" % (me.hashid, product.hashid) checkout_session = stripe.checkout.Session.create( # submit_type='donate', client_reference_id=client_reference_id, customer_email=me.email, success_url=domain_url + '/purchase/success?session_id={CHECKOUT_SESSION_ID}&ci=%s' % me.hashid, cancel_url=domain_url + '/purchase/cancelled', payment_method_types=['card'], mode='payment', allow_promotion_codes=True, line_items=line_items, ) return {'sessionId': checkout_session['id']} except Exception as e: return {'error': str(e)} except: message = "%s%s%s" % ( "Hm. We ran into an error creating your account. Please check that you've entered a valid email above,", " and if it still doesn't work please email me at [email protected] so I can find this bug, and", " get you sorted out!") return {'error': message}
def refund(request, hashid): o = Organization.get() me = get_me(request) pp = ProductPurchase.objects.get(hashid=hashid) return locals()