Skip to content

Commit 0ad5828

Browse files
committed
fix check_permissions decorator to handle not authenticated users
- Legacy-Id: 8641
1 parent 46b21a4 commit 0ad5828

3 files changed

Lines changed: 10 additions & 19 deletions

File tree

ietf/secr/proceedings/views.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
from django.conf import settings
1010
from django.contrib import messages
11-
from django.contrib.auth.decorators import login_required
1211
from django.core.exceptions import ObjectDoesNotExist
1312
from django.core.urlresolvers import reverse
1413
from django.db.models import Max
@@ -331,7 +330,6 @@ def build(request,meeting_num,acronym):
331330
url = reverse('proceedings_upload_unified', kwargs={'meeting_num':meeting_num,'acronym':acronym})
332331
return HttpResponseRedirect(url)
333332

334-
@login_required
335333
@check_permissions
336334
def delete_material(request,slide_id):
337335
'''
@@ -396,7 +394,6 @@ def delete_interim_meeting(request, meeting_num):
396394
url = reverse('proceedings_interim', kwargs={'acronym':group.acronym})
397395
return HttpResponseRedirect(url)
398396

399-
@login_required
400397
@check_permissions
401398
def edit_slide(request, slide_id):
402399
'''
@@ -531,7 +528,6 @@ def main(request):
531528
RequestContext(request,{}),
532529
)
533530

534-
@login_required
535531
@check_permissions
536532
def move_slide(request, slide_id, direction):
537533
'''
@@ -674,7 +670,6 @@ def recording_edit(request, meeting_num, name):
674670
RequestContext(request, {}),
675671
)
676672

677-
@login_required
678673
@check_permissions
679674
def replace_slide(request, slide_id):
680675
'''
@@ -853,7 +848,6 @@ def select_interim(request):
853848
RequestContext(request,{}),
854849
)
855850

856-
@login_required
857851
@check_permissions
858852
def upload_unified(request, meeting_num, acronym=None, session_id=None):
859853
'''

ietf/secr/sreq/views.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import datetime
22

33
from django.contrib import messages
4-
from django.contrib.auth.decorators import login_required
54
from django.db.models import Q
65
from django.http import Http404
76
from django.shortcuts import render_to_response, get_object_or_404, redirect
@@ -164,7 +163,6 @@ def session_conflicts_as_string(group, meeting):
164163
# -------------------------------------------------
165164
# View Functions
166165
# -------------------------------------------------
167-
@login_required
168166
@check_permissions
169167
def approve(request, acronym):
170168
'''
@@ -185,7 +183,6 @@ def approve(request, acronym):
185183
messages.error(request, 'Not authorized to approve the third session')
186184
return redirect('sessions_view', acronym=acronym)
187185

188-
@login_required
189186
@check_permissions
190187
def cancel(request, acronym):
191188
'''
@@ -331,7 +328,6 @@ def session_save(session):
331328
# send an email to iesg-secretariat to alert to change
332329
pass
333330

334-
@login_required
335331
@check_permissions
336332
def edit_mtg(request, num, acronym):
337333
'''
@@ -534,7 +530,6 @@ def main(request):
534530
RequestContext(request, {}),
535531
)
536532

537-
@login_required
538533
@check_permissions
539534
def new(request, acronym):
540535
'''
@@ -596,7 +591,6 @@ def new(request, acronym):
596591
RequestContext(request, {}),
597592
)
598593

599-
@login_required
600594
@check_permissions
601595
def no_session(request, acronym):
602596
'''

ietf/secr/utils/decorators.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
from functools import wraps
22

3-
from django.http import HttpResponseRedirect
3+
from django.conf import settings
4+
from django.contrib.auth import REDIRECT_FIELD_NAME
5+
from django.http import HttpResponseRedirect, HttpResponseForbidden
46
from django.shortcuts import render_to_response, get_object_or_404
7+
from django.utils.http import urlquote
58

69
from ietf.ietfauth.utils import has_role
710
from ietf.doc.models import Document
811
from ietf.group.models import Group, Role
912
from ietf.meeting.models import Session
1013
from ietf.secr.utils.meeting import get_timeslot
1114

12-
1315
def clear_non_auth(session):
1416
"""
1517
Clears non authentication related keys from the session object
@@ -35,7 +37,7 @@ def inner(request, *args, **kwargs):
3537

3638
def check_permissions(func):
3739
"""
38-
This decorator checks that the user making the request has access to the
40+
View decorator for checking that the user is logged in and has access to the
3941
object being requested. Expects one of the following four keyword
4042
arguments:
4143
@@ -44,6 +46,9 @@ def check_permissions(func):
4446
meeting_id, slide_id
4547
"""
4648
def wrapper(request, *args, **kwargs):
49+
if not request.user.is_authenticated():
50+
return HttpResponseRedirect('%s?%s=%s' % (settings.LOGIN_URL, REDIRECT_FIELD_NAME, urlquote(request.get_full_path())))
51+
4752
session = None
4853
# short circuit. secretariat user has full access
4954
if has_role(request.user,'Secretariat'):
@@ -74,10 +79,8 @@ def wrapper(request, *args, **kwargs):
7479
return func(request, *args, **kwargs)
7580

7681
# if we get here access is denied
77-
return render_to_response('unauthorized.html',{
78-
'user_name':login,
79-
'group_name':group.acronym}
80-
)
82+
return HttpResponseForbidden("User not authorized to access group: %s" % group.acronym)
83+
8184
return wraps(func)(wrapper)
8285

8386
def sec_only(func):

0 commit comments

Comments
 (0)