66
77from django .db import IntegrityError
88from django .conf import settings
9- from django .contrib .auth import REDIRECT_FIELD_NAME
109from django .http import HttpResponse , HttpResponseForbidden , Http404 , HttpResponseRedirect
1110from django .shortcuts import get_object_or_404 , render , redirect
12- from django .utils .http import urlquote
1311from django .contrib .auth .decorators import login_required
1412
1513from ietf .community .models import CommunityList , Rule , EmailSubscription
1614from ietf .community .forms import RuleForm , DisplayForm , SubscribeForm , UnSubscribeForm
15+ from ietf .community .utils import can_manage_community_list_for_group
1716from ietf .group .models import Group
1817from ietf .doc .models import DocEvent , Document
1918
@@ -48,38 +47,37 @@ def _manage_list(request, clist):
4847 'rule_form' : rule_form })
4948
5049
50+ @login_required
5151def manage_personal_list (request ):
52- user = request .user
53- if not user .is_authenticated ():
54- path = urlquote (request .get_full_path ())
55- tup = settings .LOGIN_URL , REDIRECT_FIELD_NAME , path
56- return HttpResponseRedirect ('%s?%s=%s' % tup )
5752 clist = CommunityList .objects .get_or_create (user = request .user )[0 ]
58- if not clist .check_manager (request .user ):
59- path = urlquote (request .get_full_path ())
60- tup = settings .LOGIN_URL , REDIRECT_FIELD_NAME , path
61- return HttpResponseRedirect ('%s?%s=%s' % tup )
6253 return _manage_list (request , clist )
6354
6455
56+ @login_required
6557def manage_group_list (request , acronym ):
6658 group = get_object_or_404 (Group , acronym = acronym )
67- if group .type .slug not in ('area' , 'wg' ):
68- raise Http404
59+ if not can_manage_community_list_for_group (request .user , group ):
60+ return HttpResponseForbidden ("You do not have permission to access this view" )
61+
6962 clist = CommunityList .objects .get_or_create (group = group )[0 ]
70- if not clist .check_manager (request .user ):
71- path = urlquote (request .get_full_path ())
72- tup = settings .LOGIN_URL , REDIRECT_FIELD_NAME , path
73- return HttpResponseRedirect ('%s?%s=%s' % tup )
7463 return _manage_list (request , clist )
7564
7665@login_required
77- def track_document (request , name ):
66+ def track_document (request , name , acronym = None ):
7867 doc = get_object_or_404 (Document , docalias__name = name )
7968
8069 if request .method == "POST" :
81- clist = CommunityList .objects .get_or_create (user = request .user )[0 ]
70+ if acronym :
71+ group = get_object_or_404 (Group , acronym = acronym )
72+ if not can_manage_community_list_for_group (request .user , group ):
73+ return HttpResponseForbidden ("You do not have permission to access this view" )
74+
75+ clist = CommunityList .objects .get_or_create (group = group )[0 ]
76+ else :
77+ clist = CommunityList .objects .get_or_create (user = request .user )[0 ]
78+
8279 clist .added_ids .add (doc )
80+
8381 if request .is_ajax ():
8482 return HttpResponse (json .dumps ({ 'success' : True }), content_type = 'text/plain' )
8583 else :
@@ -90,9 +88,15 @@ def track_document(request, name):
9088 })
9189
9290@login_required
93- def untrack_document (request , name ):
91+ def untrack_document (request , name , acronym = None ):
9492 doc = get_object_or_404 (Document , docalias__name = name )
95- clist = get_object_or_404 (CommunityList , user = request .user )
93+ if acronym :
94+ group = get_object_or_404 (Group , acronym = acronym )
95+ if not can_manage_community_list_for_group (request .user , group ):
96+ return HttpResponseForbidden ("You do not have permission to access this view" )
97+ clist = get_object_or_404 (CommunityList , group = group )
98+ else :
99+ clist = get_object_or_404 (CommunityList , user = request .user )
96100
97101 if request .method == "POST" :
98102 clist .added_ids .remove (doc )
@@ -106,23 +110,13 @@ def untrack_document(request, name):
106110 })
107111
108112@login_required
109- def remove_document (request , list_id , name ):
113+ def remove_rule (request , list_id , rule_id ):
110114 clist = get_object_or_404 (CommunityList , pk = list_id )
111- if not clist .check_manager (request .user ):
112- return HttpResponseForbidden ("You do not have permission to access this view" )
113-
114- doc = get_object_or_404 (Document , docalias__name = name )
115- clist .added_ids .remove (doc )
116-
117- return HttpResponseRedirect (clist .get_manage_url ())
118115
116+ if ((clist .user and clist .user != request .user )
117+ or (clist .group and not can_manage_community_list_for_group (request .user , clist .group ))):
118+ return HttpResponseForbidden ("You do not have permission to access this view" )
119119
120- def remove_rule (request , list_id , rule_id ):
121- clist = get_object_or_404 (CommunityList , pk = list_id )
122- if not clist .check_manager (request .user ):
123- path = urlquote (request .get_full_path ())
124- tup = settings .LOGIN_URL , REDIRECT_FIELD_NAME , path
125- return HttpResponseRedirect ('%s?%s=%s' % tup )
126120 rule = get_object_or_404 (Rule , pk = rule_id )
127121 rule .delete ()
128122 return HttpResponseRedirect (clist .get_manage_url ())
@@ -218,30 +212,19 @@ def _csv_list(request, clist):
218212 writer .writerow (row )
219213 return response
220214
221-
215+ @ login_required
222216def csv_personal_list (request ):
223- user = request .user
224- if not user .is_authenticated ():
225- path = urlquote (request .get_full_path ())
226- tup = settings .LOGIN_URL , REDIRECT_FIELD_NAME , path
227- return HttpResponseRedirect ('%s?%s=%s' % tup )
228- clist = CommunityList .objects .get_or_create (user = user )[0 ]
229- if not clist .check_manager (user ):
230- path = urlquote (request .get_full_path ())
231- tup = settings .LOGIN_URL , REDIRECT_FIELD_NAME , path
232- return HttpResponseRedirect ('%s?%s=%s' % tup )
217+ clist = CommunityList .objects .get_or_create (user = request .user )[0 ]
233218 return _csv_list (request , clist )
234219
235220
221+ @login_required
236222def csv_group_list (request , acronym ):
237223 group = get_object_or_404 (Group , acronym = acronym )
238- if group .type .slug not in ('area' , 'wg' ):
239- raise Http404
224+ if not can_manage_community_list_for_group (request .user , group ):
225+ return HttpResponseForbidden ("You do not have permission to access this view" )
226+
240227 clist = CommunityList .objects .get_or_create (group = group )[0 ]
241- if not clist .check_manager (request .user ):
242- path = urlquote (request .get_full_path ())
243- tup = settings .LOGIN_URL , REDIRECT_FIELD_NAME , path
244- return HttpResponseRedirect ('%s?%s=%s' % tup )
245228 return _csv_list (request , clist )
246229
247230def view_csv_personal_list (request , secret ):
0 commit comments