Skip to content
Snippets Groups Projects
Commit a4f1c47f authored by Ben Adida's avatar Ben Adida
Browse files

cleanup of session code, garbage collect variables once they are no longer...

cleanup of session code, garbage collect variables once they are no longer needed, ensured failed passwords retain return_url without error
parent 9f6fec5a
No related branches found
No related tags found
No related merge requests found
...@@ -45,18 +45,18 @@ def password_login_view(request): ...@@ -45,18 +45,18 @@ def password_login_view(request):
else: else:
form = LoginForm(request.POST) form = LoginForm(request.POST)
# set this in case we came here straight from the multi-login chooser
# and thus did not have a chance to hit the "start/password" URL
request.session['auth_system_name'] = 'password'
if request.POST.has_key('return_url'):
request.session['auth_return_url'] = request.POST.get('return_url')
if form.is_valid(): if form.is_valid():
username = form.cleaned_data['username'].strip() username = form.cleaned_data['username'].strip()
password = form.cleaned_data['password'].strip() password = form.cleaned_data['password'].strip()
try: try:
user = User.get_by_type_and_id('password', username) user = User.get_by_type_and_id('password', username)
if password_check(user, password): if password_check(user, password):
# set this in case we came here from another location than
# the normal login process
request.session['auth_system_name'] = 'password'
if request.POST.has_key('return_url'):
request.session['auth_return_url'] = request.POST.get('return_url')
request.session['password_user'] = user request.session['password_user'] = user
return HttpResponseRedirect(reverse(after)) return HttpResponseRedirect(reverse(after))
except User.DoesNotExist: except User.DoesNotExist:
...@@ -102,6 +102,7 @@ def get_auth_url(request, redirect_url = None): ...@@ -102,6 +102,7 @@ def get_auth_url(request, redirect_url = None):
def get_user_info_after_auth(request): def get_user_info_after_auth(request):
user = request.session['password_user'] user = request.session['password_user']
del request.session['password_user']
user_info = user.info user_info = user.info
return {'type': 'password', 'user_id' : user.user_id, 'name': user.name, 'info': user.info, 'token': None} return {'type': 'password', 'user_id' : user.user_id, 'name': user.name, 'info': user.info, 'token': None}
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
{% endif %} {% endif %}
<p> <p>
<form class="prettyform" action="" method="POST" id="create_election_form"> <form class="prettyform" action="" method="POST" id="login_form">
<input type="hidden" name="csrf_token" value="{{csrf_token}}" /> <input type="hidden" name="csrf_token" value="{{csrf_token}}" />
<table> <table>
{{form.as_table}} {{form.as_table}}
......
...@@ -90,7 +90,6 @@ def do_local_logout(request): ...@@ -90,7 +90,6 @@ def do_local_logout(request):
fields_to_save = dict([(name, request.session.get(name, None)) for name in field_names_to_save]) fields_to_save = dict([(name, request.session.get(name, None)) for name in field_names_to_save])
# let's not forget to save the list of fields to save # let's not forget to save the list of fields to save
field_names_to_save.append(FIELDS_TO_SAVE)
fields_to_save[FIELDS_TO_SAVE] = field_names_to_save fields_to_save[FIELDS_TO_SAVE] = field_names_to_save
request.session.flush() request.session.flush()
...@@ -98,6 +97,9 @@ def do_local_logout(request): ...@@ -98,6 +97,9 @@ def do_local_logout(request):
for name in field_names_to_save: for name in field_names_to_save:
request.session[name] = fields_to_save[name] request.session[name] = fields_to_save[name]
# copy the list of fields to save
request.session[FIELDS_TO_SAVE] = fields_to_save[FIELDS_TO_SAVE]
request.session['user_for_remote_logout'] = user request.session['user_for_remote_logout'] = user
def do_remote_logout(request, user, return_url="/"): def do_remote_logout(request, user, return_url="/"):
...@@ -105,8 +107,10 @@ def do_remote_logout(request, user, return_url="/"): ...@@ -105,8 +107,10 @@ def do_remote_logout(request, user, return_url="/"):
auth_system = AUTH_SYSTEMS[user['type']] auth_system = AUTH_SYSTEMS[user['type']]
# does the auth system have a special logout procedure? # does the auth system have a special logout procedure?
user_for_remote_logout = request.session.get('user_for_remote_logout', None)
del request.session['user_for_remote_logout']
if hasattr(auth_system, 'do_logout'): if hasattr(auth_system, 'do_logout'):
response = auth_system.do_logout(request.session.get('user_for_remote_logout', None)) response = auth_system.do_logout(user_for_remote_logout)
return response return response
def do_complete_logout(request, return_url="/"): def do_complete_logout(request, return_url="/"):
...@@ -186,5 +190,9 @@ def after(request): ...@@ -186,5 +190,9 @@ def after(request):
return HttpResponseRedirect(reverse(after_intervention)) return HttpResponseRedirect(reverse(after_intervention))
def after_intervention(request): def after_intervention(request):
return HttpResponseRedirect(request.session['auth_return_url'] or "/") return_url = "/"
if request.session.has_key('auth_return_url'):
return_url = request.session['auth_return_url']
del request.session['auth_return_url']
return HttpResponseRedirect(return_url)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment