136 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			136 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')
 |