From 1b03d8b4db270e6b3a0ff55b80110d6d34110358 Mon Sep 17 00:00:00 2001 From: Brian Moe <brian.moe@ligo.org> Date: Wed, 5 Dec 2012 14:46:33 -0600 Subject: [PATCH] Minor fiddling. --- gracedb/api.py | 55 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/gracedb/api.py b/gracedb/api.py index 2e0ce7fd5..44529feca 100644 --- a/gracedb/api.py +++ b/gracedb/api.py @@ -8,7 +8,7 @@ from django.conf import settings import json -from gracedb.models import Event, Group, EventLog, Label +from gracedb.models import Event, Group, EventLog from translator import handle_uploaded_data import os @@ -33,7 +33,7 @@ from forms import CreateEventForm from views import _createEventFromForm from rest_framework import parsers # YAMLParser, MultiPartParser -#from rest_framework.permissions import IsAuthenticated +from rest_framework.permissions import IsAuthenticated #from rest_framework.permissions import AllowAny from rest_framework import authentication from rest_framework.views import APIView @@ -47,9 +47,14 @@ from forms import SimpleSearchForm class LigoAuthentication(authentication.BaseAuthentication): def authenticate(self, request): + # LIGOAuth middleware finds you from X509 cert, but + # Shib middleware clobbers (?) the Django user in request + # and identifies you as anonymous. Need to recover the + # Django user. try: user = DjangoUser.objects.get(username=request.ligouser.unixid) except DjangoUser.DoesNotExist: + # XXX Probably need to create a user. user = None return (user, None) @@ -97,9 +102,6 @@ def eventToDict(event, columns=None, request=None): request=request)) for labelling in event.labelling_set.all()]) rv['links'] = { -# "neighbors" : dict( -# [(e.gpstime, reverse("event-detail", args=[e.graceid()], request=request)) -# for e in event.neighbors()]), "neighbors" : reverse("neighbors", args=[graceid], request=request), "log" : reverse("eventlog-list", args=[graceid], request=request), "files" : reverse("files", args=[graceid], request=request), @@ -144,6 +146,7 @@ class EventList(APIView): ##permission_classes = (AllowAny,) ##authentication_classes = (authentication.SessionAuthentication,) authentication_classes = (LigoAuthentication,) + permission_classes = (IsAuthenticated,) parser_classes = (parsers.MultiPartParser,) # XXX Need a LIGOLW renderer @@ -271,6 +274,8 @@ class EventDetail(APIView): parser_classes = (LigoLwParser,) #parser_classes = (parsers.MultiPartParser,) serializer_class = EventSerializer + permission_classes = (IsAuthenticated,) + form = CreateEventForm def get(self, request, graceid): @@ -457,6 +462,7 @@ class EventLogList(APIView): POST param 'message' """ authentication_classes = (LigoAuthentication,) + permission_classes = (IsAuthenticated,) def get(self, request, graceid): try: @@ -488,6 +494,7 @@ class EventLogList(APIView): class EventLogDetail(APIView): authentication_classes = (LigoAuthentication,) + permission_classes = (IsAuthenticated,) def get(self, request, graceid, n): try: @@ -507,9 +514,11 @@ class GracedbRoot(APIView): Root of the Gracedb REST API """ authentication_classes = (LigoAuthentication,) + permission_classes = (IsAuthenticated,) parser_classes = () def get(self, request): - # XXX scummy way to get a URI template. Is there better? + # XXX This seems like a scummy way to get a URI template. + # Is there better? detail = reverse("event-detail", args=["G1200"], request=request) detail = detail.replace("G1200", "{graceid}") log = reverse("eventlog-list", args=["G1200"], request=request) @@ -527,21 +536,22 @@ class GracedbRoot(APIView): labels = labels.replace("G1200", "{graceid}") labels = labels.replace("thelabel", "{label}") - return Response({ - "resources" : { - "events" : reverse("event-list", request=request), - }, - "resource-templates" : { - "event-template" : detail, + templates = { + "event-detail-template" : detail, "event-log-template" : log, - "event-files-template" : files, - "event-filemeta-template" : filemeta, "event-label-template" : labels, - }, - "groups" : [group.name for group in Group.objects.all()], - "analysis-types" : dict(Event.ANALYSIS_TYPE_CHOICES), - "labels" : [label.name for label in Label.objects.all()], - }) + "files-template" : files, + "filemeta-template" : filemeta, + } + + return Response({ + "links" : { + "events" : reverse("event-list", request=request), + }, + "templates" : templates, + "groups" : [group.name for group in Group.objects.all()], + "analysis-types" : dict(Event.ANALYSIS_TYPE_CHOICES), + }) ################################################################## # Old. Must support this. @@ -608,10 +618,10 @@ class Files(APIView): """Files Resource""" authentication_classes = (LigoAuthentication,) - parser_classes = (parsers.MultiPartParser,) + permission_classes = (IsAuthenticated,) - def get(self, request, graceid, filename=None): - # Do not let filename be None. That messes up later os.path.join + def get(self, request, graceid, filename=""): + # Do not filename to be None. That messes up later os.path.join filename = filename or "" try: @@ -803,4 +813,5 @@ class Files(APIView): class FileMeta(APIView): """File Metadata Resource""" authentication_classes = (LigoAuthentication,) + permission_classes = (IsAuthenticated,) pass -- GitLab