From 675392843429537d5863ecefd9cde347f43c7835 Mon Sep 17 00:00:00 2001 From: Mike Olund Date: Thu, 9 Mar 2017 12:19:18 -0800 Subject: [PATCH] Refactored code for getting the current logged in user --- edivorce/apps/core/views/main.py | 40 ++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/edivorce/apps/core/views/main.py b/edivorce/apps/core/views/main.py index 4f3063ff..fe3831e3 100644 --- a/edivorce/apps/core/views/main.py +++ b/edivorce/apps/core/views/main.py @@ -2,6 +2,7 @@ from django.conf import settings from django.shortcuts import render, redirect from django.utils import timezone from ..decorators import bceid_required +import datetime from ..models import BceidUser from ..utils.user_response import get_responses_from_db, get_responses_from_db_grouped_by_steps, \ get_responses_from_session, copy_session_to_db @@ -51,10 +52,11 @@ def login(request): if guid is None: return render(request, 'localdev/debug.html') - user, created = BceidUser.objects.get_or_create(user_guid=guid) + user = __get_bceid_user(request) - user.last_login = timezone.now() - user.save() + if timezone.now() - user.last_login > datetime.timedelta(minutes=1): + user.last_login = timezone.now() + user.save() copy_session_to_db(request, user) @@ -81,7 +83,8 @@ def prequalification(request, step): if not request.bceid_user.is_authenticated: responses_dict = get_responses_from_session(request) else: - user = BceidUser.objects.get(user_guid=request.bceid_user.guid) + user = __get_bceid_user(request) + responses_dict = get_responses_from_db(user) return render(request, template_name=template, context=responses_dict) @@ -102,12 +105,7 @@ def question(request, step): For review page, use response grouped by step to render page """ template = 'question/%s.html' % step - - # get the BceidUser record matching the BCeID login from the db - try: - user = BceidUser.objects.get(user_guid=request.bceid_user.guid) - except ObjectDoesNotExist: - return redirect(settings.FORCE_SCRIPT_NAME[:-1] + '/login') + user = __get_bceid_user(request) if step == "11_review": responses_dict = get_responses_from_db_grouped_by_steps(user) @@ -127,13 +125,7 @@ def overview(request): If user responded to questions for certain step, mark that step as "Started" otherwise "Not started" """ - - # get the BceidUser record matching the BCeID login from the db - try: - user = BceidUser.objects.get(user_guid=request.bceid_user.guid) - except ObjectDoesNotExist: - return redirect(settings.FORCE_SCRIPT_NAME[:-1] + '/login') - + user = __get_bceid_user(request) responses_dict = get_responses_from_db_grouped_by_steps(user) # To Show whether user has started to respond questions in each step started_dict = {} @@ -144,3 +136,17 @@ def overview(request): started_dict[step] = "Started" started_dict['active_page'] = 'overview' return render(request, 'overview.html', context=started_dict) + + +def __get_bceid_user(request): + user, created = BceidUser.objects.get_or_create(user_guid=request.bceid_user.guid) + + # update the last_login timestamp if it was more than 2 hours ago + # this ensures that it gets updated for users who bypass the /login url with a direct link + if user.last_login is None or timezone.now() - user.last_login > datetime.timedelta(hours=2): + user.last_login = timezone.now() + user.save() + + return user + +