You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

35 lines
1.3 KiB

from .models import Referral
from .utils import set_cookie, pop_cookie, get_cookie
class ReferralMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = None
if hasattr(self, 'process_request'):
response = self.process_request(request)
if not response:
response = self.get_response(request)
if hasattr(self, 'process_response'):
response = self.process_response(request, response)
return response
def process_request(self, request):
pass
def process_response(self, request, response):
if not request.user.is_authenticated:
code = request.GET.get('ref')
cookie_code = get_cookie(request.COOKIES, 'referral')
if code != cookie_code:
referral_code = request.GET.get('ref')
referral = Referral.active.filter(code__exact=referral_code).first()
if referral and referral.is_active:
referral.referralstats.visits += 1
referral.referralstats.save()
set_cookie(response, 'referral', referral_code)
elif request.user.is_authenticated:
pop_cookie(response, 'referral')
return response