From 627bff80748cd6947089ec9a92c37a5bec4a37d0 Mon Sep 17 00:00:00 2001 From: Ryan Westfall Date: Wed, 23 Apr 2025 09:33:58 -0500 Subject: [PATCH] Prod live updates --- scha/settings.py | 2 +- scha/urls.py | 1 + schasite/forms.py | 27 ++-- schasite/templates/schasite/dues2.html | 42 +------ schasite/templates/schasite/scha_board2.html | 6 +- schasite/views.py | 126 ++++++++++--------- 6 files changed, 90 insertions(+), 114 deletions(-) diff --git a/scha/settings.py b/scha/settings.py index 1891b62..344be14 100644 --- a/scha/settings.py +++ b/scha/settings.py @@ -53,7 +53,7 @@ MIDDLEWARE = [ ] ROOT_URLCONF = "scha.urls" - +CSRF_TRUSTED_ORIGINS = ["https://schawheaton.aimloperations.com","https://www.schawheaton.aimloperations.com", "https://www.schawheaton.com", "https://schawheaton.com"] TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", diff --git a/scha/urls.py b/scha/urls.py index cbc4b40..b1fee8b 100644 --- a/scha/urls.py +++ b/scha/urls.py @@ -23,6 +23,7 @@ from django.conf import settings from schasite.views import stripe_cancelled, stripe_success, stripe_webhook urlpatterns = [ + path("schasite/", include("schasite.urls")), path("", include("schasite.urls")), path("success/", stripe_success), path("cancelled/", stripe_cancelled), diff --git a/schasite/forms.py b/schasite/forms.py index 978250f..2c68303 100644 --- a/schasite/forms.py +++ b/schasite/forms.py @@ -11,21 +11,20 @@ from .models import ( from phonenumber_field.formfields import PhoneNumberField from django.core.exceptions import ValidationError -# from django_recaptcha.fields import ReCaptchaField -# from django.conf import settings -# from django_recaptcha.widgets import ReCaptchaV3 +from django_recaptcha.fields import ReCaptchaField +from django.conf import settings +from django_recaptcha.widgets import ReCaptchaV3 -# class CaptchaForm(forms.Form): -# captcha = ReCaptchaField( -# public_key=settings.RECAPTCHA_PUBLIC_KEY, -# private_key=settings.RECAPTCHA_PRIVATE_KEY, -# widget=ReCaptchaV3( -# attrs={ -# 'required_score':0.85, -# } -# ), - -# ) +class CaptchaForm(forms.Form): + captcha = ReCaptchaField( + public_key=settings.RECAPTCHA_PUBLIC_KEY, + private_key=settings.RECAPTCHA_PRIVATE_KEY, + widget=ReCaptchaV3( + attrs={ + 'required_score':0.85, + } + ), + ) class ChildrenForm(ModelForm): diff --git a/schasite/templates/schasite/dues2.html b/schasite/templates/schasite/dues2.html index bbf4c6e..6893f52 100644 --- a/schasite/templates/schasite/dues2.html +++ b/schasite/templates/schasite/dues2.html @@ -109,9 +109,8 @@

Credit/Debit Card

Pay securely with Visa, Mastercard, American Express, or Discover.

- - Pay with Card - + + @@ -192,39 +191,6 @@ - + -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/schasite/templates/schasite/scha_board2.html b/schasite/templates/schasite/scha_board2.html index 4fcb1d1..46570eb 100644 --- a/schasite/templates/schasite/scha_board2.html +++ b/schasite/templates/schasite/scha_board2.html @@ -62,7 +62,7 @@

{{ officer.position }}

- John Smith +
{{ officer.name }}
@@ -84,7 +84,7 @@

TBD

- John Smith +
TBD

TBD

TBD

@@ -99,4 +99,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/schasite/views.py b/schasite/views.py index ab1fb71..f689357 100644 --- a/schasite/views.py +++ b/schasite/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render, redirect -from .models import UsefulLinks, CalendarEvent, MembershipPerson, Payments, SCHAOfficer, Membership, CommunityPost +from .models import UsefulLinks, CalendarEvent, MembershipPerson, Payments, SCHAOfficer, Membership from .forms import ( ChildrenForm, CommunityPostForm, @@ -7,8 +7,8 @@ from .forms import ( PeopleForm, CommitteeForm, ServicesForm, - -) # , CaptchaForm + CaptchaForm +) from django.db import transaction, IntegrityError # Stripe required imports @@ -36,28 +36,27 @@ def stripe_config(request): @csrf_exempt def create_checkout_session(request): - if request.method == "GET": - domain_url = "http://localhost:8000/" + if request.method == 'GET': + domain_url ="https://www.schawheaton.com/" stripe.api_key = settings.STRIPE_SECRET_KEY try: checkout_session = stripe.checkout.Session.create( - success_url=domain_url + "success?session_id={CHECKOUT_SESSION_ID}", - cancel_url=domain_url + "cancelled/", - payment_method_types=["card"], + success_url = domain_url+'success?session_id={CHECKOUT_SESSION_ID}', + cancel_url = domain_url+'cancelled/', + payment_method_types=['card'], mode="payment", - line_items=[ - { - # 'name':'SCHA Dues', - "quantity": 1, - # 'currency': 'usd', - "price": "price_1OxZLfDV0RPXOyxG5ipjhUXk", - } - ], + line_items = [{ + # 'name':'SCHA Dues', + 'quantity': 1, + # 'currency': 'usd', + 'price':'price_1P5KBtIbGKYTLTtMJ0Rh1jMu', + #'price_1P5K7uIbGKYTLTtMFNxbkA8X' + #'price_1OxZLfDV0RPXOyxG5ipjhUXk', + }] ) - return JsonResponse({"sessionId": checkout_session["id"]}) + return JsonResponse({'sessionId': checkout_session['id']}) except Exception as e: - return JsonResponse({"error": str(e)}) - + return JsonResponse({'error': str(e)}) def stripe_success(request): return render(request, "schasite/dues_success.html", {}) @@ -72,11 +71,13 @@ def stripe_webhook(request): stripe.api_key = settings.STRIPE_SECRET_KEY endpoint_secret = settings.STRIPE_ENDPOINT_SECRET payload = request.body - sig_header = request.META["HTTP_STRIPE_SIGNATURE"] + sig_header = request.META['HTTP_STRIPE_SIGNATURE'] event = None try: - event = stripe.Webhook.construct_event(payload, sig_header, endpoint_secret) + event = stripe.Webhook.construct_event( + payload, sig_header, endpoint_secret + ) except ValueError as e: # Invalid payload return HttpResponse(status=400) @@ -85,17 +86,18 @@ def stripe_webhook(request): return HttpResponse(status=400) # Handle the checkout.session.completed event - if event["type"] == "checkout.session.completed": + if event['type'] == 'checkout.session.completed': email = None try: - email = event["data"]["object"]["customer_details"]["email"] + email = event['data']['object']['customer_details']['email'] except: pass - person = MembershipPerson.objects.filter( - email=email - ).first() # just take the first + person = MembershipPerson.objects.filter(email=email).first() # just take the first - payment = Payments.objects.create(email=email, person=person) + payment = Payments.objects.create( + email=email, + person = person + ) # try to link to a member payment.save() # TODO: run some custom code here @@ -170,8 +172,6 @@ def dues2(request): def membership_form2(request): - print(request) - print(request.POST) def sanitize_phone_number(data): if len(data) > 0: data = data.replace("-", "") @@ -241,51 +241,61 @@ def membership_form2(request): peopleForm1 = PeopleForm(person1_data) peopleForm2 = PeopleForm(person2_data) - print(peopleForm1) - breakpoint() - for form in [addressForm, servicesForm, committeeForm, peopleForm1, peopleForm2]: - print(f"is form valid: {form.is_valid()}") - if not form.is_valid(): - print(f"form Errors: {form.errors}") + print("Validating the captcha form") + print(request.POST.get("captcha","")) + captchaForm = CaptchaForm({ + "captcha": request.POST.get("captcha","") + }) + print(f"Captch form is: {captchaForm.is_valid()}") + + + print(f"peopleForm1 form is: {peopleForm1.is_valid()}") + print(f"peopleForm2 form is: {peopleForm2.is_valid()}") + print(f"servicesForm form is: {servicesForm.is_valid()}") - # captchaForm = CaptchaForm(post_data) if ( addressForm.is_valid() and committeeForm.is_valid() and (peopleForm1.is_valid() or peopleForm2.is_valid()) and servicesForm.is_valid() - ): # and captchaForm.is_valid(): + and captchaForm.is_valid() + ): with transaction.atomic(): - membership = Membership.objects.create() + print("starting to save") + try: + membership = Membership.objects.create() - if peopleForm1.is_valid(): - people1_obj = peopleForm1.save(commit=False) - people1_obj.membership = membership - people1_obj.save() + if peopleForm1.is_valid(): + people1_obj = peopleForm1.save(commit=False) + people1_obj.membership = membership + people1_obj.save() - if peopleForm2.is_valid(): - people2_obj = peopleForm2.save(commit=False) - people2_obj.membership = membership - people2_obj.save() + if peopleForm2.is_valid(): + people2_obj = peopleForm2.save(commit=False) + people2_obj.membership = membership + people2_obj.save() - committee_obj = committeeForm.save(commit=False) - committee_obj.membership = membership - committee_obj.save() + committee_obj = committeeForm.save(commit=False) + committee_obj.membership = membership + committee_obj.save() - services_obj = servicesForm.save(commit=False) - services_obj.membership = membership - services_obj.save() + services_obj = servicesForm.save(commit=False) + services_obj.membership = membership + services_obj.save() - address_obj = addressForm.save(commit=False) - address_obj.membership = membership - address_obj.save() + address_obj = addressForm.save(commit=False) + address_obj.membership = membership + address_obj.save() + except Exception as e: + print(e) return redirect("index2") else: + print("Some field is not valid") return render( request, "schasite/membership_form2.html", @@ -295,7 +305,7 @@ def membership_form2(request): "addressForm": addressForm, "committeeForm": committeeForm, "servicesForm": servicesForm, - # 'captchaForm': captchaForm, + 'captchaForm': captchaForm, }, ) else: @@ -307,7 +317,7 @@ def membership_form2(request): "peopleForm2": PeopleForm(prefix="person2"), "committeeForm": CommitteeForm(), "servicesForm": ServicesForm(), - # 'captchaForm': CaptchaForm(), + 'captchaForm': CaptchaForm(), "addressForm": AddressForm( initial={ "city": "Wheaton", @@ -523,4 +533,4 @@ def profile(request): if request.method == "POST": raise NotImplementedError() else: - return render(request, "schasite/profile.html",{}) \ No newline at end of file + return render(request, "schasite/profile.html",{})