137 lines
5.2 KiB
Python
137 lines
5.2 KiB
Python
|
from django.shortcuts import render, redirect
|
||
|
from django.views.generic import View
|
||
|
from django.views.decorators.cache import cache_control
|
||
|
from django.conf import settings
|
||
|
from django.db.models import Q
|
||
|
from django.utils.translation import get_language
|
||
|
from django.contrib.auth import logout
|
||
|
from django.http import HttpResponseRedirect
|
||
|
from django.contrib.auth import login
|
||
|
|
||
|
from .models import CustomUser, StripeCustomer
|
||
|
from .forms import LoginForm, RegisterForm, PaymentForm
|
||
|
from utils.stripe_utils import StripeUtils
|
||
|
|
||
|
|
||
|
def validate_email(request, validate_slug):
|
||
|
validated = CustomUser.validate_url(validate_slug)
|
||
|
if validated:
|
||
|
return render(request, 'templates/validated_email.html', {'msg': True})
|
||
|
else:
|
||
|
return render(request, 'templates/error.html', {'msg': 'Validation failed.'})
|
||
|
|
||
|
|
||
|
def reset(request, time):
|
||
|
request.session['next'] = 0
|
||
|
return redirect('payment', time=time)
|
||
|
|
||
|
|
||
|
class CreditCardView(View):
|
||
|
def _get_context(self, request, time):
|
||
|
request.session['time'] = time
|
||
|
context = {}
|
||
|
context['name'] = request.user.name
|
||
|
if time == 'month':
|
||
|
context['time'] = "1 month"
|
||
|
context['price'] = "35"
|
||
|
context['free'] = "1"
|
||
|
elif time == 'year':
|
||
|
context['time'] = '1 year'
|
||
|
context['price'] = '360'
|
||
|
context['free'] = "2"
|
||
|
context['stripe_key'] = settings.STRIPE_API_PUBLIC_KEY
|
||
|
context['form'] = PaymentForm()
|
||
|
return context
|
||
|
|
||
|
@cache_control(no_cache=True, must_revalidate=True)
|
||
|
def get(self, request, time=None):
|
||
|
context = self._get_context(request, time)
|
||
|
next = request.session.get('next')
|
||
|
if next == 1 or next == 0:
|
||
|
template = 'templates/creditcard.html'
|
||
|
request.session['next'] += 1
|
||
|
elif next == 2:
|
||
|
customer = StripeCustomer.get_or_create(email=request.user.email, token=request.session['token'])
|
||
|
stripe_utils = StripeUtils()
|
||
|
charge = stripe_utils.make_charge(request.session['amount'], customer=customer.stripe_id)
|
||
|
template = 'templates/validated.html'
|
||
|
resp = charge.get('response_object')
|
||
|
context['msg'] = resp.get('status', None)
|
||
|
request.session['next'] = None
|
||
|
return render(request, template, context)
|
||
|
|
||
|
def post(self, request, time=None):
|
||
|
form = PaymentForm(request.POST)
|
||
|
stripe_token = request.POST['stripeToken']
|
||
|
|
||
|
if form.is_valid():
|
||
|
form.save(request.user)
|
||
|
amount = 35 if time == 'month' else 360
|
||
|
request.session['token'] = stripe_token
|
||
|
request.session['amount'] = amount
|
||
|
request.session['next'] += 1
|
||
|
return render(request, 'templates/confirm.html',
|
||
|
context={'name': request.user.name, 'email': request.user.email})
|
||
|
else:
|
||
|
context = self._get_context(request, time)
|
||
|
context['form'] = form
|
||
|
return render(request, 'templates/creditcard.html', context=context)
|
||
|
|
||
|
|
||
|
class LoginRegistrationView(View):
|
||
|
def get(self, request):
|
||
|
login_form = LoginForm()
|
||
|
register_form = RegisterForm()
|
||
|
request.session['next'] = None
|
||
|
if request.user.is_authenticated():
|
||
|
return redirect("membership")
|
||
|
else:
|
||
|
return render(request, 'templates/login.html',
|
||
|
{'login_form': login_form, 'register_form': register_form})
|
||
|
|
||
|
def post(self, request):
|
||
|
is_login = request.POST.get('is_login', False)
|
||
|
|
||
|
if not is_login:
|
||
|
form = RegisterForm(request.POST)
|
||
|
if form.is_valid():
|
||
|
email = form.validated_data.get('email')
|
||
|
password = form.validated_data.get('password')
|
||
|
name = form.validated_data.get('name')
|
||
|
user = CustomUser.register(name, password, email)
|
||
|
if user:
|
||
|
return render(request, 'templates/success.html')
|
||
|
else:
|
||
|
return render(request, 'templates/error.html')
|
||
|
else:
|
||
|
login_form = LoginForm()
|
||
|
return render(request, 'templates/login.html',
|
||
|
context={'login_form': login_form, 'register_form': form})
|
||
|
else:
|
||
|
form = LoginForm(request.POST)
|
||
|
if form.is_valid():
|
||
|
user = form.login(request)
|
||
|
if user:
|
||
|
login(request, user)
|
||
|
return redirect('membership')
|
||
|
else:
|
||
|
registration_form = RegisterForm()
|
||
|
return render(request, 'templates/login.html',
|
||
|
context={'login_form': form, 'register_form': registration_form})
|
||
|
|
||
|
|
||
|
class MembershipView(View):
|
||
|
def get(self, request):
|
||
|
# if the user has payed already
|
||
|
member_payed = request.user.creditcards_set.filter(Q(payment_type='month') | Q(payment_type='year'))
|
||
|
if member_payed:
|
||
|
return redirect('/')
|
||
|
request.session['next'] = 0
|
||
|
language = get_language()
|
||
|
return render(request, 'templates/membership.html', context={'language_code': language})
|
||
|
|
||
|
|
||
|
def logout_glarus(request):
|
||
|
logout(request)
|
||
|
return HttpResponseRedirect('/digitalglarus')
|