Beispiel #1
0
def SignOut(request):
    """ A simple view - No form, no complexity - just logout and pop the user back home """
    if request.user.is_authenticated():
        PageVisit.record(request)
        logout(request=request)

    return HttpResponseRedirect(reverse("Home"), {})
Beispiel #2
0
    def post(self, request):
        if not request.user.is_authenticated():
            logging.warning('Unauthorised attempt to access dashboard')
            return redirect( reverse("GetInvolved"))

        try:
            cyclist = cyclists.models.Cyclist.objects.get(user = request.user)
        except ObjectDoesNotExist:
            raise NoDashboard()

        if request.POST.get('confirmation',''):
            return redirect('Dashboard:MyDetails')

        form = RegisteredUsers.forms.PasswordReset(request.POST)

        if form.is_valid():
            user, pwd = form.save()

            user = authenticate(username=user.username, password=pwd)
            if user and user.is_active:
                login(request, user)
            else:
                return HttpResponseServerError("unable to re-authenticate user !!!!")

            PageVisit.record(request)

            return render(request, 'dashboard/pages/PasswordChange.html',
                          context={'confirmation': {'title':'Password Changed',
                                 'message': 'Your new password has been saved. Click OK to return to your dashboard'}})
        else:
            context = self.context.copy()
            context['form'] = form
            return render(request, 'dashboard/pages/PasswordChange.html', context=context)
Beispiel #3
0
def the_event(request):
    """The Event page - with a summary of the event"""
    PageVisit.record(request)

    legs = cyclists.models.Leg.objects.all().order_by('date', '-morning')

    if legs:
        stats = cyclists.models.Leg.Totals()
        first_leg = legs[0]
        last_leg = cyclists.models.Leg.objects.all().order_by(
            '-date', 'morning')[0]
    else:
        stats = {}
        first_leg = None
        last_leg = None

    return render(request,
                  "SuffolkCycleRide/pages/theevent.html",
                  context={
                      'event': {
                          'stats': stats,
                          'legs': legs,
                          'first_leg': first_leg,
                          'last_leg': last_leg
                      }
                  })
Beispiel #4
0
 def get(self, request):
     PageVisit.record(request)
     context = self.context.copy()
     context['form'] = context['form']()
     return render(request=request,
                   template_name='base/SingleForm.html',
                   context=context)
Beispiel #5
0
def fundme(request, username):

    cyclist = get_object_or_404(cyclists.models.Cyclist, user__username = username)

    PageVisit.record(request=request, document_name='FundMe', user = cyclist.user )

    return render(request, 'SuffolkCycleRide/pages/fundme.html', context={'cyclist':cyclist, 'no_menu':True})
Beispiel #6
0
    def get(self, request):
        if not request.user.is_authenticated():
            logging.warning('Unauthorised attempt to access dashboard')
            return redirect(reverse("GetInvolved"))

        try:
            cyclist = cyclists.models.Cyclist.objects.get(user=request.user)
        except ObjectDoesNotExist:
            raise NoDashboard()

        progress = sum(
            (1 if getattr(cyclist, attr_name) else 0) for attr_name in
            ['picture', 'statement', 'fundraising_site', 'targetAmount'])

        if cyclist.legs.all():
            progress += 1

        PageVisit.record(request)
        return render(request,
                      "dashboard/pages/dashboard.html",
                      context={
                          'cyclist': cyclist,
                          'progress': {
                              'count': progress,
                              'limit': 5
                          }
                      })
Beispiel #7
0
    def post(self, request):

        super(GetInvolved, self).post(request)

        if self.this_form.is_valid():

            if self.this_form.prefix == 'nl':
                PageVisit.record(request, sub_document='Newsletter SignUp')
                sub = self.this_form.save()

                return render(
                    request,
                    "newsletter/pages/subscription_confirmation.html",
                    context={'email': sub.email})

            if self.this_form.prefix == 'r':
                PageVisit.record(request, sub_document='New User Reqistration')
                user = self.this_form.save()
                send_mail( from_email = settings.DEFAULT_FROM_EMAIL,
                            recipient_list=[ user.email ],
                            subject="Welcome to the Great Suffolk Cycle Ride",
                            message=render_to_string( "RegisteredUsers/Email/NewUserConfirmation.txt",
                                    context=dict( {'user': user,
                                             'ResetUrl': request.build_absolute_uri( reverse("User:ResetRequest") ),
                                             'PrivacyUrl': request.build_absolute_uri( reverse("Privacy") ),
                                             'HOST': request.get_host() }.items() +\
                                             settings_base_url(request).items()
                                             )))
                self.this_form.login(request)
                logging.info('Successful Registration')
                return HttpResponseRedirect(reverse('Dashboard:Home'))

        return render(request, "base/VerticalForm.html", context=self.context)
Beispiel #8
0
def SignOut(request):
    """ A simple view - No form, no complexity - just logout and pop the user back home """
    if request.user.is_authenticated():
        PageVisit.record(request)
        logout(request=request)

    return HttpResponseRedirect(reverse("Home"), {})
Beispiel #9
0
    def post(self, request):

        c = self.context.copy()
        form = forms.PasswordResetRequest(request.POST)

        if form.is_valid():

            # The save form creates an instance of the PasswordResetRequestModel: expiry date is 14 days from 'today'
            reset = form.save()
            reset_local = reset.get_url()

            # Send the email to the identified user: Email contains a URL unique to that reset (128 bit UUID)
            send_mail( from_email = settings.DEFAULT_FROM_EMAIL,
                       recipient_list=[reset.user.email],
                        subject="Great Suffolk Cycle Ride : Password reset",
                        message=render_to_string("RegisteredUsers/Email/PasswordResetRequest.txt",
                                        context={'user': reset.user,
                                                 'ResetUrl': request.build_absolute_uri(reset_local),
                                                 'ExpireBy': reset.expiry,
                                                 'HOST': request.get_host()
                                                 })
                    )

            # This will record the page visit - but not who requested the reset - only record a successful attempt
            # Pop the user to the ResetConfirmation page
            PageVisit.record(request)
            return render(request, "RegisteredUsers/pages/ResetConfirmed.html",
                          context={
                              'email': reset.user.email,
                              'expiry': dt.strftime(reset.expiry, "%d %b %Y")
                          })
        else:
            # Remder the form with any errors
            c['form'] = form
            return render(request, "base/SingleForm.html", context=c)
Beispiel #10
0
    def post(self, request):

        super(GetInvolved, self).post(request)

        if self.this_form.is_valid():

            if self.this_form.prefix == 'nl':
                PageVisit.record(request, sub_document='Newsletter SignUp')
                sub = self.this_form.save()

                return render( request, "newsletter/pages/subscription_confirmation.html",
                               context = {'email': sub.email })

            if self.this_form.prefix == 'r':
                PageVisit.record(request, sub_document='New User Reqistration')
                user = self.this_form.save()
                send_mail( from_email = settings.DEFAULT_FROM_EMAIL,
                            recipient_list=[ user.email ],
                            subject="Welcome to the Great Suffolk Cycle Ride",
                            message=render_to_string( "RegisteredUsers/Email/NewUserConfirmation.txt",
                                    context=dict( {'user': user,
                                             'ResetUrl': request.build_absolute_uri( reverse("User:ResetRequest") ),
                                             'PrivacyUrl': request.build_absolute_uri( reverse("Privacy") ),
                                             'HOST': request.get_host() }.items() +\
                                             settings_base_url(request).items()
                                             )))
                self.this_form.login(request)
                logging.info('Successful Registration')
                return HttpResponseRedirect( reverse('Dashboard:Home') )

        return render(request, "base/VerticalForm.html", context=self.context)
Beispiel #11
0
def main(request):
    PageVisit.record(request)
    available = models.Opportunity.objects.filter(available=True, taken=False). \
        annotate(order_value=Coalesce('value', 'max_value')). \
        order_by('order_value')
    sponsors = models.Sponsor.objects.annotate(support_count=Count('supports')).filter(support_count__gt=0)

    return render(request, 'Sponsors/main.html', context={'sponsors': sponsors, 'available': available})
Beispiel #12
0
def Download(request, id ):
    PageVisit.record(request)
    nl = Newsletter.objects.get(reset_uuid=id)
    path = os.path.join(settings.MEDIA_ROOT, nl.content.name)
    name = os.path.basename(nl.content.name)
    d = open(path,"rb").read()
    response = HttpResponse(d, content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="{}"'.format(name)
    return response
Beispiel #13
0
def Download(request, id):
    PageVisit.record(request)
    nl = Newsletter.objects.get(reset_uuid=id)
    path = os.path.join(settings.MEDIA_ROOT, nl.content.name)
    name = os.path.basename(nl.content.name)
    d = open(path, "rb").read()
    response = HttpResponse(d, content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="{}"'.format(name)
    return response
Beispiel #14
0
    def get(self, request, opportunity_slug):
        opportunity = get_object_or_404(models.Opportunity, slug=opportunity_slug)

        PageVisit.record(request, sub_document=opportunity.name)

        form = forms.Communications(initial={'opportunity': opportunity.id})
        context = self.context.copy()
        context['form'] = form
        context['description'] = context['description'].format(opportunity.name)
        return render(request, 'Sponsors/communicate.html', context=context)
Beispiel #15
0
    def post(self, request):
        if not request.user.is_authenticated():
            logging.warning('Unauthorised attempt to access dashboard')
            return redirect(reverse("GetInvolved"))

        if request.POST.get('confirmation', ''):
            return redirect(reverse('Dashboard:MyDetails'))

        if request.POST['submit'] == 'Change Password':
            return redirect("Dashboard:PasswordReset")

        me = request.user
        try:
            cyclist = cyclists.models.Cyclist.objects.get(user=me)
        except:
            raise NoDashboard()

        form = forms.MyDetails(instance=[me, cyclist],
                               data=request.POST,
                               files=request.FILES)
        context = self.context.copy()

        if form.is_valid():

            PageVisit.record(request, 'Details Changed')

            for k in ['first_name', 'last_name', 'email']:
                if form.cleaned_data[k] != getattr(me, k):
                    setattr(me, k, form.cleaned_data[k])
            me.save()

            if 'picture-clear' in form.cleaned_data:
                cyclist.picture = ''
            else:
                if form.cleaned_data['picture'] != cyclist.picture:
                    cyclist.picture = form.cleaned_data['picture']
            cyclist.save()

            return render(
                request,
                'dashboard/pages/MyDetails.html',
                context={
                    'confirmation': {
                        'title':
                        'Personal details saved',
                        'message':
                        'Your changes have been saved. Click OK to return to your dashboard'
                    }
                })

        context['form'] = form
        context['cyclist'] = cyclist
        return render(request,
                      'dashboard/pages/MyDetails.html',
                      context=context)
Beispiel #16
0
def main(request):
    """The Read more page - a list of the newsletter posts"""
    PageVisit.record(request)
    dl_url = reverse('Newsletter:Download', kwargs={'id': '0000'}).strip('0')
    qs = Newsletter.objects.order_by('-pub_date')
    return render(request,
                  "newsletter/pages/newsletter.html",
                  context={
                      'newsletter': qs,
                      "dl_base": dl_url
                  })
Beispiel #17
0
    def post(self, request, email):
        form = NewsletterUnsubscribeForm(request.POST)

        if form.is_valid():
            PageVisit.record(request)  # Only record successfull unsubscribes
            success = form.save()
            if success:
                return render( request, "newsletter/pages/unsubscribe.html",
                               context={'email': form.cleaned_data['email']} )

        self.context['form'] = form
        return render(request, "base/SingleForm.html", context=self.context)
Beispiel #18
0
    def post(self, request, email):
        form = NewsletterUnsubscribeForm(request.POST)

        if form.is_valid():
            PageVisit.record(request)  # Only record successfull unsubscribes
            success = form.save()
            if success:
                return render(request,
                              "newsletter/pages/unsubscribe.html",
                              context={'email': form.cleaned_data['email']})

        self.context['form'] = form
        return render(request, "base/SingleForm.html", context=self.context)
Beispiel #19
0
def fundme(request, username):

    cyclist = get_object_or_404(cyclists.models.Cyclist,
                                user__username=username)

    PageVisit.record(request=request,
                     document_name='FundMe',
                     user=cyclist.user)

    return render(request,
                  'SuffolkCycleRide/pages/fundme.html',
                  context={
                      'cyclist': cyclist,
                      'no_menu': True
                  })
Beispiel #20
0
def home(request):
    """ The front page - where everybody first lands"""
    PageVisit.record(request)

    funds = cyclists.models.Cyclist.total_funds()
    if funds['target'] and funds['pledges']:
        funds['target'] = max(2000, funds['target'])
        funds['percentage'] = round(100*funds['pledges']/funds['target'])
    else:
        funds = {}

    return render(request, "SuffolkCycleRide/pages/home.html", context={
            'funding':{'pledges':"{:.0f}".format(funds['pledges']),
                       'target':"{:.0f}".format(funds['target']),
                       'percentage':"{:.0f}".format(funds['percentage']) } if funds else {} } )
Beispiel #21
0
    def get(self, request, page=0, tag_slug=None, year=None, month=None):

        PageVisit.record(request)
        # Dictionary for arguments to be passed to queryset and pages - need two distinct dictionaries
        query_args, page_args = {}, {}

        # Normalise the current page
        page = int(page) if page else 1

        if tag_slug:
            query_args['tags__slug'] = page_args['tag_slug'] = tag_slug
        else:
            if year:
                query_args['pub_date__year'] = page_args['year'] = year
                if month:
                    query_args['pub_date__month'] = page_args['month'] = month

        # Build the queryset - filter by the relevant arguments,
        qs = models.Entry.objects.filter(**query_args)

        # furthering filtering  depends on whether this user has their own unpublished posts
        if not request.user.is_anonymous():
            qs = qs.filter(
                Q(is_published=True)
                | Q(is_published=False, author=request.user))
        else:
            qs = qs.filter(is_published=True)

        qs = qs.order_by("is_published", "-pub_date")

        # Split the query set into pages : discard the page_count information for now.
        qs, page_args['prev_page'], page_args[
            'next_page'], _ = self.pagination(qs, page, page_args)

        return render(request,
                      self.template,
                      context={
                          'entries':
                          qs,
                          'archive':
                          self.get_archive(request,
                                           int(year) if year else None,
                                           int(month) if month else None),
                          'tags':
                          self.get_tag_cloud(),
                          'args':
                          page_args
                      })
Beispiel #22
0
 def test_012_privacy(self):
     ts = now()
     r = self.client.get(reverse('Privacy'))
     self.assertEqual(r.status_code, 200)
     self.assertEqual(r.resolver_match.func.__name__, views.privacy.__name__)
     self.assertEqual(r.templates[0].name, 'SuffolkCycleRide/pages/privacy.html')
     self.assertAlmostEqual(PageVisit.most_recent('Privacy').timestamp, ts, delta=timedelta(milliseconds=500))
Beispiel #23
0
    def test_022_ChangePasswordSubmit(self):
        """Test that the change Password works correctly"""
        ts = now()

        prr = RegisteredUsers.models.PasswordResetRequest(user=self.user,
                                                          expiry=date.today() +
                                                          timedelta(days=1))
        prr.save()

        self.client.force_login(user=self.user)
        r = self.client.post(reverse('Dashboard:PasswordReset'),
                             data={
                                 'uuid': str(prr.uuid),
                                 'newPassword': '******',
                                 'confirmPassword': '******'
                             })
        self.assertTemplateUsed(r, "dashboard/pages/PasswordChange.html")
        self.assertTrue('confirmation' in r.context[-1])

        # Check that the PasswordResetRequest instance is deleted
        with self.assertRaises(ObjectDoesNotExist):
            RegisteredUsers.models.PasswordResetRequest.objects.get(
                uuid=prr.uuid)
        self.assertEqual(authenticate(username='******', password='******'),
                         self.user)

        # Check the Password change is recorded in the stats
        self.assertAlmostEqual(PageVisit.most_recent(
            document='Dashboard:PasswordReset', user=self.user).timestamp,
                               ts,
                               delta=timedelta(milliseconds=500))
Beispiel #24
0
 def test_010_ContactUsGet(self):
     ts = now()
     r = self.client.get(reverse('ContactUs'))
     self.assertEqual(r.status_code, 200)
     self.assertEqual(r.resolver_match.func.__name__, views.ContactUs.as_view().__name__)
     self.assertEqual(r.templates[0].name, 'base/SingleForm.html')
     self.assertAlmostEqual(PageVisit.most_recent('ContactUs').timestamp, ts, delta=timedelta(milliseconds=100))
Beispiel #25
0
    def post(self, request):
        """ Process the Form contents """
        c = self.context.copy()
        form = forms.SignInForm(request.POST)

        # Is the form filled in correctly - including is it a valid username/password combo
        if form.is_valid():
            # This form.save logs the user in, and therefore needs the request as well as the form, and record this
            form.save(request=request)

            PageVisit.record(request)
            logging.info('Successful Signin')
            return HttpResponseRedirect(reverse("Dashboard:Home"))

        # If we get here we have errors
        c['form'] = form
        return render(request, "RegisteredUsers/pages/SignIn.html", context=c)
 def test_011_SignInPost(self):
     """Test that Posting valid details to the SignIn page results in a correctly logged in user"""
     ts = now()
     r = self.client.post(reverse('User:SignIn'), data={'username': '******', 'password': '******'})
     self.assertEqual(r.resolver_match.func.__name__, views.SignIn.as_view().__name__)
     self.assertTrue(self.client.session['_auth_user_id'], self.chester.pk)
     self.assertRedirects(r, reverse('Dashboard:Home'))
     self.assertAlmostEqual(PageVisit.most_recent('User:SignIn').timestamp, ts, delta=timedelta(milliseconds=200))
Beispiel #27
0
    def post(self, request):
        """ Process the Form contents """
        c = self.context.copy()
        form = forms.SignInForm(request.POST)

        # Is the form filled in correctly - including is it a valid username/password combo
        if form.is_valid():
            # This form.save logs the user in, and therefore needs the request as well as the form, and record this
            form.save(request=request)

            PageVisit.record(request)
            logging.info('Successful Signin')
            return HttpResponseRedirect(reverse("Dashboard:Home"))

        # If we get here we have errors
        c['form'] = form
        return render(request, "RegisteredUsers/pages/SignIn.html", context=c)
 def test_011_SignOutOk(self):
     """Sign Out when user is signed in - must result in correct logout"""
     ts = now()
     self.assertTrue(self.client.login(username='******', password='******'))
     self.assertTrue(self.client.session['_auth_user_id'], self.chester.pk)
     response = self.client.get(reverse('User:SignOut'))
     self.assertRedirects(response, reverse('Home'))
     self.assertFalse('_auth_user_id' in self.client.session)
     self.assertAlmostEqual(PageVisit.most_recent('User:SignOut').timestamp, ts, delta=timedelta(milliseconds=200))
 def test_010_SignOutNotSignedIn(self):
     """Sign Out when no-one is signed in - should not result in an error"""
     ts = now()
     self.assertFalse('_auth_user_id' in self.client.session)
     r = self.client.get(reverse('User:SignOut'))
     self.assertEqual(r.resolver_match.func.__name__, views.SignOut.__name__)
     self.assertRedirects(r, reverse('Home'))
     self.assertFalse('_auth_user_id' in self.client.session)
     self.assertTrue(PageVisit.most_recent(document='User:SignOut', user=None) is None)
Beispiel #30
0
    def post(self, request):
        if not request.user.is_authenticated():
            logging.warning('Unauthorised attempt to access dashboard')
            return redirect(reverse("GetInvolved"))

        try:
            cyclist = cyclists.models.Cyclist.objects.get(user=request.user)
        except ObjectDoesNotExist:
            raise NoDashboard()

        if request.POST.get('confirmation', ''):
            return redirect('Dashboard:MyDetails')

        form = RegisteredUsers.forms.PasswordReset(request.POST)

        if form.is_valid():
            user, pwd = form.save()

            user = authenticate(username=user.username, password=pwd)
            if user and user.is_active:
                login(request, user)
            else:
                return HttpResponseServerError(
                    "unable to re-authenticate user !!!!")

            PageVisit.record(request)

            return render(
                request,
                'dashboard/pages/PasswordChange.html',
                context={
                    'confirmation': {
                        'title':
                        'Password Changed',
                        'message':
                        'Your new password has been saved. Click OK to return to your dashboard'
                    }
                })
        else:
            context = self.context.copy()
            context['form'] = form
            return render(request,
                          'dashboard/pages/PasswordChange.html',
                          context=context)
Beispiel #31
0
def the_event(request):
    """The Event page - with a summary of the event"""
    PageVisit.record(request)

    legs = cyclists.models.Leg.objects.all().order_by('date','-morning')

    if legs:
        stats = cyclists.models.Leg.Totals()
        first_leg = legs[0]
        last_leg = cyclists.models.Leg.objects.all().order_by('-date','morning')[0]
    else:
        stats = {}
        first_leg = None
        last_leg = None

    return render(request, "SuffolkCycleRide/pages/theevent.html", context={'event':{ 'stats':stats,
                                                                                       'legs':legs,
                                                                                      'first_leg':first_leg,
                                                                                      'last_leg':last_leg }})
Beispiel #32
0
 def test_010_GetInvolvedGet(self):
     ts = now()
     r = self.client.get(reverse('GetInvolved'))
     self.assertEqual(r.status_code, 200)
     self.assertEqual(r.resolver_match.func.__name__, views.GetInvolved.as_view().__name__)
     self.assertEqual(r.templates[0].name, 'base/VerticalForm.html')
     # Issue 19 - Temporarily Disable Newsletter Capability
     # self.assertIsInstance(r.context[-1]['forms'][0]['form'], newsletter.forms.NewsletterSignUpForm)
     self.assertIsInstance(r.context[-1]['forms'][0]['form'], RegisteredUsers.forms.NewUserForm)
     self.assertAlmostEqual(PageVisit.most_recent('GetInvolved').timestamp, ts, delta=timedelta(milliseconds=100))
Beispiel #33
0
    def test_001_TestBasicAccess(self):
        ts = now()
        r = self.client.get( reverse('TheEvent'))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.resolver_match.func, views.the_event)
        self.assertEqual(r.templates[0].name, 'SuffolkCycleRide/pages/theevent.html')
        self.assertAlmostEqual(PageVisit.most_recent('TheEvent').timestamp, ts, delta=timedelta(milliseconds=100))

        # Confirm that no legs are passed to the template
        self.assertInContext(response=r, attr_name = 'event.legs', expected=[])
Beispiel #34
0
    def post(self, request):
        if not request.user.is_authenticated():
            logging.warning('Unauthorised attempt to access dashboard')
            return redirect( reverse("GetInvolved"))

        if request.POST.get('confirmation',''):
            return redirect(reverse('Dashboard:MyDetails'))

        if request.POST['submit'] == 'Change Password':
            return redirect("Dashboard:PasswordReset")

        me = request.user
        try:
            cyclist = cyclists.models.Cyclist.objects.get(user = me)
        except:
            raise NoDashboard()

        form = forms.MyDetails(instance=[me,cyclist], data=request.POST, files=request.FILES)
        context = self.context.copy()

        if form.is_valid():

            PageVisit.record(request, 'Details Changed')

            for k in ['first_name','last_name', 'email']:
                if form.cleaned_data[k] != getattr(me, k):
                    setattr(me, k, form.cleaned_data[k])
            me.save()

            if 'picture-clear' in form.cleaned_data:
                cyclist.picture = ''
            else:
                if form.cleaned_data['picture'] != cyclist.picture:
                    cyclist.picture = form.cleaned_data['picture']
            cyclist.save()

            return render(request, 'dashboard/pages/MyDetails.html',
                          context={'confirmation': {'title':'Personal details saved',
                                 'message': 'Your changes have been saved. Click OK to return to your dashboard'}})

        context['form'] =  form
        context['cyclist'] = cyclist
        return render(request, 'dashboard/pages/MyDetails.html', context=context )
Beispiel #35
0
    def get(self, request):
        if not request.user.is_authenticated():
            logging.warning('Unauthorised attempt to access dashboard')
            return redirect( reverse("GetInvolved"))

        try:
            cyclist = cyclists.models.Cyclist.objects.get(user = request.user)
        except ObjectDoesNotExist:
            raise NoDashboard()

        progress = sum( (1 if getattr(cyclist, attr_name) else 0) for attr_name in
                        ['picture', 'statement', 'fundraising_site', 'targetAmount'] )

        if cyclist.legs.all():
            progress += 1

        PageVisit.record(request)
        return render(request, "dashboard/pages/dashboard.html",
                      context={'cyclist': cyclist, 'progress': {'count':progress, 'limit':5}})
 def test_010_SignOutNotSignedIn(self):
     """Sign Out when no-one is signed in - should not result in an error"""
     ts = now()
     self.assertFalse('_auth_user_id' in self.client.session)
     r = self.client.get(reverse('User:SignOut'))
     self.assertEqual(r.resolver_match.func.__name__,
                      views.SignOut.__name__)
     self.assertRedirects(r, reverse('Home'))
     self.assertFalse('_auth_user_id' in self.client.session)
     self.assertTrue(
         PageVisit.most_recent(document='User:SignOut', user=None) is None)
Beispiel #37
0
def home(request):
    """ The front page - where everybody first lands"""
    PageVisit.record(request)

    funds = cyclists.models.Cyclist.total_funds()
    if funds['target'] and funds['pledges']:
        funds['target'] = max(2000, funds['target'])
        funds['percentage'] = round(100 * funds['pledges'] / funds['target'])
    else:
        funds = {}

    return render(request,
                  "SuffolkCycleRide/pages/home.html",
                  context={
                      'funding': {
                          'pledges': "{:.0f}".format(funds['pledges']),
                          'target': "{:.0f}".format(funds['target']),
                          'percentage': "{:.0f}".format(funds['percentage'])
                      } if funds else {}
                  })
Beispiel #38
0
    def get(self, request):
        if not request.user.is_authenticated():
            logging.warning('Unauthorised attempt to access dashboard')
            return redirect( reverse("GetInvolved"))

        context = self.context.copy()

        PageVisit.record(request)

        me = request.user
        try:
            cyclist = cyclists.models.Cyclist.objects.get(user = me)
        except ObjectDoesNotExist:
            raise NoDashboard()

        form = forms.MyDetails(instance=[me,cyclist])

        context['form'] = form
        context['cyclist'] = cyclist

        return render(request, 'dashboard/pages/MyDetails.html', context=context)
 def test_011_SignOutOk(self):
     """Sign Out when user is signed in - must result in correct logout"""
     ts = now()
     self.assertTrue(
         self.client.login(username='******',
                           password='******'))
     self.assertTrue(self.client.session['_auth_user_id'], self.chester.pk)
     response = self.client.get(reverse('User:SignOut'))
     self.assertRedirects(response, reverse('Home'))
     self.assertFalse('_auth_user_id' in self.client.session)
     self.assertAlmostEqual(PageVisit.most_recent('User:SignOut').timestamp,
                            ts,
                            delta=timedelta(milliseconds=200))
Beispiel #40
0
    def post(self, request):

        c = self.context.copy()
        form = forms.PasswordResetRequest(request.POST)

        if form.is_valid():

            # The save form creates an instance of the PasswordResetRequestModel: expiry date is 14 days from 'today'
            reset = form.save()
            reset_local = reset.get_url()

            # Send the email to the identified user: Email contains a URL unique to that reset (128 bit UUID)
            send_mail(from_email=settings.DEFAULT_FROM_EMAIL,
                      recipient_list=[reset.user.email],
                      subject="Great Suffolk Cycle Ride : Password reset",
                      message=render_to_string(
                          "RegisteredUsers/Email/PasswordResetRequest.txt",
                          context={
                              'user': reset.user,
                              'ResetUrl':
                              request.build_absolute_uri(reset_local),
                              'ExpireBy': reset.expiry,
                              'HOST': request.get_host()
                          }))

            # This will record the page visit - but not who requested the reset - only record a successful attempt
            # Pop the user to the ResetConfirmation page
            PageVisit.record(request)
            return render(request,
                          "RegisteredUsers/pages/ResetConfirmed.html",
                          context={
                              'email': reset.user.email,
                              'expiry': dt.strftime(reset.expiry, "%d %b %Y")
                          })
        else:
            # Remder the form with any errors
            c['form'] = form
            return render(request, "base/SingleForm.html", context=c)
Beispiel #41
0
    def get(self, request):
        if not request.user.is_authenticated():
            logging.warning('Unauthorised attempt to access dashboard')
            return redirect(reverse("GetInvolved"))

        context = self.context.copy()

        PageVisit.record(request)

        me = request.user
        try:
            cyclist = cyclists.models.Cyclist.objects.get(user=me)
        except ObjectDoesNotExist:
            raise NoDashboard()

        form = forms.MyDetails(instance=[me, cyclist])

        context['form'] = form
        context['cyclist'] = cyclist

        return render(request,
                      'dashboard/pages/MyDetails.html',
                      context=context)
Beispiel #42
0
    def test_BasicAccess(self):
        """Prove that access is available to the FundMe page - even when not logged in"""
        ts = now()
        r = self.client.get( reverse('FundMe', kwargs={'username':self.user.username}))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.resolver_match.func.__name__, views.fundme.__name__)
        self.assertEqual(r.templates[0].name, 'SuffolkCycleRide/pages/fundme.html')
        self.assertAlmostEqual(PageVisit.most_recent('FundMe', user=self.user).timestamp, ts, delta=timedelta(milliseconds=100))

        self.assertInContext(response=r, attr_name='cyclist', expected=self.cyclist)
        self.assertNotInContext(response=r, attr_name='mockup')

        # Prove that there is no site menu accessible on this page
        self.assertHTMLNotMatchSelector(r.content, 'ul.chevronbar')
Beispiel #43
0
    def get(self, request, page=0, tag_slug=None, year=None, month=None):

        PageVisit.record(request)
        # Dictionary for arguments to be passed to queryset and pages - need two distinct dictionaries
        query_args, page_args = {}, {}

        # Normalise the current page
        page = int(page) if page else 1

        if tag_slug:
            query_args['tags__slug'] = page_args['tag_slug'] = tag_slug
        else:
            if year:
                query_args['pub_date__year'] = page_args['year'] = year
                if month :
                    query_args['pub_date__month'] =  page_args['month'] = month

        # Build the queryset - filter by the relevant arguments,
        qs = models.Entry.objects.filter(**query_args)

        # furthering filtering  depends on whether this user has their own unpublished posts
        if not request.user.is_anonymous():
            qs = qs.filter( Q(is_published = True) | Q( is_published=False, author = request.user ))
        else:
            qs = qs.filter( is_published = True )

        qs = qs.order_by( "is_published", "-pub_date")

        # Split the query set into pages : discard the page_count information for now.
        qs, page_args['prev_page'], page_args['next_page'], _ = self.pagination(qs, page, page_args)

        return render(request,self.template, context={
                                    'entries': qs,
                                    'archive': self.get_archive( request, int(year) if year else None,
                                                                          int(month) if month else None ),
                                    'tags': self.get_tag_cloud(),
                                    'args': page_args })
 def test_011_SignInPost(self):
     """Test that Posting valid details to the SignIn page results in a correctly logged in user"""
     ts = now()
     r = self.client.post(reverse('User:SignIn'),
                          data={
                              'username': '******',
                              'password': '******'
                          })
     self.assertEqual(r.resolver_match.func.__name__,
                      views.SignIn.as_view().__name__)
     self.assertTrue(self.client.session['_auth_user_id'], self.chester.pk)
     self.assertRedirects(r, reverse('Dashboard:Home'))
     self.assertAlmostEqual(PageVisit.most_recent('User:SignIn').timestamp,
                            ts,
                            delta=timedelta(milliseconds=200))
Beispiel #45
0
    def test_002_TestEventList(self):
        self.create_legs()
        ts = now()
        r = self.client.get( reverse('TheEvent'))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.resolver_match.func, views.the_event)
        self.assertEqual(r.templates[0].name, 'SuffolkCycleRide/pages/theevent.html')
        self.assertAlmostEqual(PageVisit.most_recent('TheEvent').timestamp, ts, delta=timedelta(milliseconds=100))

        # Test that the legs appear in the right order
        self.assertInContext(response=r, attr_name = 'event.legs', expected=self.legs)

        # Test the distance and start/end location appear
        st = BeautifulSoup(r.content, 'html5lib')
        summary = st.select('div.summary')[0].select('p')
        self.assertIn(self.legs[0].start, unicode(summary[0].text))
        self.assertIn(self.legs[-1].end, unicode(summary[0].text))
    def test_012_MyDetailsMainSubmit(self):
        """Test that the Details Page gets Posted Correctly - just change the email address for now"""
        ts = now()
        self.client.force_login(user=self.user)
        r = self.client.post(reverse('Dashboard:MyDetails'),
                             data={'email': '*****@*****.**',
                                   'submit': u'Save'})
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.resolver_match.func.__name__, views.MyDetails.__name__)
        self.assertTemplateUsed(r, "dashboard/pages/MyDetails.html")
        self.assertTrue('confirmation' in r.context[-1])

        # Test that the db has changed
        self.user.refresh_from_db()
        self.assertEqual(self.user.email, '*****@*****.**')

        # Test that the Page Visit has been recorded
        self.assertAlmostEqual(PageVisit.most_recent(document='Details Changed').timestamp, ts,
                               delta=timedelta(milliseconds=500))
    def test_022_ChangePasswordSubmit(self):
        """Test that the change Password works correctly"""
        ts = now()

        prr = RegisteredUsers.models.PasswordResetRequest(user=self.user, expiry=date.today() + timedelta(days=1))
        prr.save()

        self.client.force_login(user=self.user)
        r = self.client.post(reverse('Dashboard:PasswordReset'),
                             data={'uuid': str(prr.uuid), 'newPassword': '******', 'confirmPassword': '******'})
        self.assertTemplateUsed(r, "dashboard/pages/PasswordChange.html")
        self.assertTrue('confirmation' in r.context[-1])

        # Check that the PasswordResetRequest instance is deleted
        with self.assertRaises(ObjectDoesNotExist):
            RegisteredUsers.models.PasswordResetRequest.objects.get(uuid=prr.uuid)
        self.assertEqual(authenticate(username='******', password='******'), self.user)

        # Check the Password change is recorded in the stats
        self.assertAlmostEqual(PageVisit.most_recent(document='Dashboard:PasswordReset', user=self.user).timestamp, ts,
                               delta=timedelta(milliseconds=500))
Beispiel #48
0
    def test_012_MyDetailsMainSubmit(self):
        """Test that the Details Page gets Posted Correctly - just change the email address for now"""
        ts = now()
        self.client.force_login(user=self.user)
        r = self.client.post(reverse('Dashboard:MyDetails'),
                             data={
                                 'email': '*****@*****.**',
                                 'submit': u'Save'
                             })
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.resolver_match.func.__name__,
                         views.MyDetails.__name__)
        self.assertTemplateUsed(r, "dashboard/pages/MyDetails.html")
        self.assertTrue('confirmation' in r.context[-1])

        # Test that the db has changed
        self.user.refresh_from_db()
        self.assertEqual(self.user.email, '*****@*****.**')

        # Test that the Page Visit has been recorded
        self.assertAlmostEqual(
            PageVisit.most_recent(document='Details Changed').timestamp,
            ts,
            delta=timedelta(milliseconds=500))
Beispiel #49
0
 def test_001_012_PageVisit(self):
     ts = now()
     p = self.client.get(reverse('Blog:Home'))
     self.assertAlmostEqual(PageVisit.most_recent('Blog:Home').timestamp,
                            ts,
                            delta=timedelta(milliseconds=60))
 def test_001_012_PageVisit(self):
     ts = now()
     p = self.client.get(reverse('Blog:Home'))
     self.assertAlmostEqual(PageVisit.most_recent('Blog:Home').timestamp, ts, delta=timedelta(milliseconds=60))
Beispiel #51
0
    def get(self, request):
        super(GetInvolved, self).get(request)

        PageVisit.record(request)

        return render(request, "base/VerticalForm.html", context=self.context)
Beispiel #52
0
 def get(self, request):
     PageVisit.record(request)
     self.context['form'] = NewsletterUploadForm()
     return render(request, 'base/SingleForm.html', context=self.context)
Beispiel #53
0
def main(request):
    """The Read more page - a list of the newsletter posts"""
    PageVisit.record(request)
    dl_url = reverse('Newsletter:Download',kwargs = {'id':'0000'}).strip('0')
    qs = Newsletter.objects.order_by('-pub_date')
    return render(request, "newsletter/pages/newsletter.html", context={'newsletter':qs, "dl_base":dl_url})
Beispiel #54
0
def privacy(request):
    """The Read more page - a list of the newsletter posts"""
    PageVisit.record(request)
    return render(request, "SuffolkCycleRide/pages/privacy.html")