from django.shortcuts import redirect from django.http import HttpResponse from django.contrib import messages from rowers.mytypes import otwtypes #from rowers.tasks import handle_sendemail_expired from django.utils import timezone from rowers.models import Workout, PowerTimeFitnessMetric, Rower, PaidPlan import datetime from rowers.utils import myqueue import django_rq queue = django_rq.get_queue('default') queuelow = django_rq.get_queue('low') def getrower(user): try: r = Rower.objects.get(user=user) except Rower.DoesNotExist: r = Rower(user=user) r.save() return r allowed_paths = [ '/rowers/me/delete', '/', '/logout', '/logout/', '/rowers/me/gdpr-optin/', '/rowers/me/gdpr-optin-confirm/', '/rowers/me/gdpr-optin', '/rowers/me/gdpr-optin-confirm' '/rowers/exportallworkouts/', '/rowers/exportallworkouts', '/rowers/survey/', '/rowers/me/prefs/' ] class SurveyMiddleWare(object): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): if request.user.is_authenticated and request.path not in allowed_paths: r = getrower(request.user) nexturl = request.path if 'survey' in nexturl: # pragma: no cover nexturl = '/rowers/list-workouts' mustseesurvey = request.user.date_joined <= timezone.now( )-datetime.timedelta(days=14) and not r.surveydone if mustseesurvey: # pragma: no cover return redirect( '/rowers/survey/?next=%s' % nexturl ) response = self.get_response(request) return response class FTPMiddleWare(object): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): if request.user.is_authenticated and request.path not in allowed_paths: r = getrower(request.user) nexturl = request.path if 'ftp' in nexturl: # pragma: no cover nexturl = '/rowers/me/prefs/' mustsetftp = not r.ftpset if mustsetftp: # pragma: no cover return redirect( '/rowers/me/prefs/?next=%s' % nexturl ) response = self.get_response(request) return response class GDPRMiddleWare(object): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): if request.user.is_authenticated and request.path not in allowed_paths: r = getrower(request.user) nexturl = request.path if 'optin' in nexturl: # pragma: no cover nexturl = '/rowers/list-workouts' if not r.gdproptin: return redirect( '/rowers/me/gdpr-optin/?next=%s' % nexturl ) response = self.get_response(request) return response class RowerPlanMiddleWare(object): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): if request.user.is_authenticated and request.user.rower.rowerplan != 'basic': if request.user.rower.paymenttype == 'single': if request.user.rower.planexpires < timezone.now().date(): # pragma: no cover messg = 'Your paid plan has expired. We have reset you to a free basic plan.' messages.error(request, messg) r = getrower(request.user) r.rowerplan = 'basic' r.paymenttype = 'single' basicplans = PaidPlan.objects.filter(shortname='basic', price=0, paymentprocessor='braintree') r.paidplan = basicplans[0] r.save() # remove from Free Coach groups # send email from rowers.tasks import handle_sendemail_expired _ = myqueue(queue, handle_sendemail_expired, r.user.email, r.user.first_name, r.user.last_name, str(r.planexpires)) response = self.get_response(request) return response