diff --git a/gracedb/cli_views.py b/gracedb/cli_views.py index c8d678144e8abcb84c43b799abf75f3629333bfd..b3cfbeeedf882d754dc6c5ffa4f8fabf407feeeb 100644 --- a/gracedb/cli_views.py +++ b/gracedb/cli_views.py @@ -1,5 +1,5 @@ -from django.http import HttpResponse, HttpResponseBadRequest +from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden #from django.contrib.sites.models import Site from django.utils.html import strip_tags @@ -10,6 +10,7 @@ from utils.vfile import VersionedFile from view_logic import create_label, _createLog from view_utils import assembleLigoLw +from permission_utils import filter_events_for_user, user_has_perm import os from django.conf import settings @@ -26,6 +27,7 @@ def cli_search(request): form = SimpleSearchForm(request.POST) if form.is_valid(): objects = form.cleaned_data['query'] + objects = filter_events_for_user(objects, request.user, 'view') if 'ligolw' in request.POST or 'ligolw' in request.GET: from glue.ligolw import utils @@ -78,6 +80,10 @@ def cli_label(request): doxmpp = request.POST.get('alert') == "True" event = graceid and Event.getByGraceid(graceid) + + if not user_has_perm(request.user, 'change', event): + return HttpResponseForbidden() + d = create_label(event, labelName, request.user, doXMPP=doxmpp) msg = str(d) @@ -93,8 +99,11 @@ def cli_tag(request): tagname = request.POST.get('tag') event = graceid and Event.getByGraceid(graceid) - event.add_tag(tagname) + if not user_has_perm(request.user, 'change', event): + return HttpResponseForbidden() + + event.add_tag(tagname) msg = str({}) response = HttpResponse(mimetype='application/json') response.write(msg) @@ -113,9 +122,10 @@ def ping(request): d = {'output': ack} if 'extended' in request.POST: latest = Event.objects.order_by("-id")[0] - d['latest'] = {} - d['latest']['id'] = latest.graceid() - d['latest']['created'] = str(utc(latest.created)) + if user_has_perm(request.user, 'view', latest): + d['latest'] = {} + d['latest']['id'] = latest.graceid() + d['latest']['created'] = str(utc(latest.created)) d = json.dumps(d) response.write(d) response['Content-length'] = len(d) @@ -131,16 +141,26 @@ def upload(request): comment = request.POST.get('comment', None) uploadedfile = request.FILES['upload'] + try: + event = graceid and Event.getByGraceid(graceid) + except Event.DoesNotExist: + event = None + + if not event: + return HttpResponseBadRequest("Event does not exist.") + if not user_has_perm(request.user, 'change', event): + return HttpResponseForbidden() + if 'cli_version' in request.POST: return _createLog(request, graceid, comment, uploadedfile) # else: old, old client response = HttpResponse(mimetype='text/plain') + # uploadedFile.{name/chunks()} try: event = graceid and Event.getByGraceid(graceid) except Event.DoesNotExist: event = None - # uploadedFile.{name/chunks()} if not (comment and uploadedfile and graceid): msg = "ERROR: missing arg(s)" elif not event: @@ -180,6 +200,16 @@ def log(request): message = request.POST.get('message') graceid = request.POST.get('graceid') + try: + event = graceid and Event.getByGraceid(graceid) + except Event.DoesNotExist: + event = None + + if not event: + return HttpResponseBadRequest("Event does not exist.") + if not user_has_perm(request.user, 'change', event): + return HttpResponseForbidden() + if 'cli_version' in request.POST: return _createLog(request, graceid, message)