From df4c0c3060778cd41f7f988ccce05686fe185c71 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Fri, 25 Dec 2020 10:31:42 +0100 Subject: [PATCH] in between commit to update for cc tests --- uncloud/urls.py | 4 +- uncloud_net/views.py | 12 ++-- uncloud_pay/admin.py | 2 +- uncloud_pay/models.py | 2 + uncloud_pay/templates/uncloud_pay/stripe.html | 72 +++++++++++++++++++ uncloud_pay/views.py | 23 ++++++ 6 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 uncloud_pay/templates/uncloud_pay/stripe.html diff --git a/uncloud/urls.py b/uncloud/urls.py index cce19be..169be7f 100644 --- a/uncloud/urls.py +++ b/uncloud/urls.py @@ -13,6 +13,7 @@ from rest_framework import routers from rest_framework.schemas import get_schema_view #from opennebula import views as oneviews +from uncloud import views as uncloudviews from uncloud_auth import views as authviews from uncloud_net import views as netviews from uncloud_pay import views as payviews @@ -87,6 +88,7 @@ urlpatterns = [ # path('web/vpn/create/', netviews.WireGuardVPNCreateView.as_view(), name="vpncreate"), path('login/', authviews.LoginView.as_view(), name="login"), path('logout/', authviews.LogoutView.as_view(), name="logout"), - path('admin/', admin.site.urls), + path('cc/reg/', payviews.RegisterCard.as_view(), name="cc_register"), + path('', uncloudviews.UncloudIndex.as_view(), name="uncloudindex"), ] diff --git a/uncloud_net/views.py b/uncloud_net/views.py index 8a5c6fb..77ba952 100644 --- a/uncloud_net/views.py +++ b/uncloud_net/views.py @@ -14,11 +14,6 @@ from .services import * from .forms import * from .tasks import * -# class VPNPoolViewSet(viewsets.ModelViewSet): -# serializer_class = VPNPoolSerializer -# permission_classes = [permissions.IsAdminUser] -# queryset = VPNPool.objects.all() - class WireGuardVPNViewSet(viewsets.ModelViewSet): serializer_class = WireGuardVPNSerializer permission_classes = [permissions.IsAuthenticated] @@ -66,3 +61,10 @@ class WireGuardVPNSizes(viewsets.ViewSet): print(sizes) return Response(WireGuardVPNSizesSerializer(sizes, many=True).data) + + + +# class VPNPoolViewSet(viewsets.ModelViewSet): +# serializer_class = VPNPoolSerializer +# permission_classes = [permissions.IsAdminUser] +# queryset = VPNPool.objects.all() diff --git a/uncloud_pay/admin.py b/uncloud_pay/admin.py index 2123397..2c72274 100644 --- a/uncloud_pay/admin.py +++ b/uncloud_pay/admin.py @@ -88,5 +88,5 @@ admin.site.register(Bill, BillAdmin) admin.site.register(ProductToRecurringPeriod) admin.site.register(Product, ProductAdmin) -for m in [ Order, BillRecord, BillingAddress, RecurringPeriod, VATRate ]: +for m in [ Order, BillRecord, BillingAddress, RecurringPeriod, VATRate, StripeCustomer ]: admin.site.register(m) diff --git a/uncloud_pay/models.py b/uncloud_pay/models.py index f0e469d..18e6f85 100644 --- a/uncloud_pay/models.py +++ b/uncloud_pay/models.py @@ -89,6 +89,8 @@ class StripeCustomer(models.Model): on_delete=models.CASCADE) stripe_id = models.CharField(max_length=32) + def __str__(self): + return self.owner.username ### # Payments and Payment Methods. diff --git a/uncloud_pay/templates/uncloud_pay/stripe.html b/uncloud_pay/templates/uncloud_pay/stripe.html new file mode 100644 index 0000000..3051bf0 --- /dev/null +++ b/uncloud_pay/templates/uncloud_pay/stripe.html @@ -0,0 +1,72 @@ +{% extends 'uncloud/base.html' %} + +{% block header %} + + +{% endblock %} + +{% block body %} +
+

Registering Stripe Credit Card

+ + + +
+
+ +
+ + +
+
+ + + + + + + +{% endblock %} diff --git a/uncloud_pay/views.py b/uncloud_pay/views.py index edfb189..53d6ef4 100644 --- a/uncloud_pay/views.py +++ b/uncloud_pay/views.py @@ -1,3 +1,7 @@ +from django.contrib.auth.mixins import LoginRequiredMixin +from django.views.generic.base import TemplateView + + from django.shortcuts import render from django.db import transaction from django.contrib.auth import get_user_model @@ -43,6 +47,25 @@ class OrderViewSet(viewsets.ReadOnlyModelViewSet): def get_queryset(self): return Order.objects.filter(owner=self.request.user) + +class RegisterCard(LoginRequiredMixin, TemplateView): + login_url = '/login/' + + # This is not supposed to be "static" -- + # the idea is to be able to switch the provider when needed + template_name = "uncloud_pay/stripe.html" + + def get_context_data(self, **kwargs): + customer_id = uncloud_stripe.get_customer_id_for(self.request.user) + setup_intent = uncloud_stripe.create_setup_intent(customer_id) + + context = super().get_context_data(**kwargs) + context['client_secret'] = setup_intent.client_secret + context['username'] = self.request.user + context['stripe_pk'] = uncloud_stripe.public_api_key + return context + + class PaymentMethodViewSet(viewsets.ModelViewSet): permission_classes = [permissions.IsAuthenticated]