Skip to content

Commit

Permalink
Added logging, session and token auth to all routes to API and token …
Browse files Browse the repository at this point in the history
…auth API requests to worker
  • Loading branch information
MitchellAV committed May 30, 2024
1 parent 672bbfd commit 0c677eb
Show file tree
Hide file tree
Showing 14 changed files with 307 additions and 198 deletions.
11 changes: 7 additions & 4 deletions valhub/accounts/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from boto3 import Session
from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
Expand All @@ -11,7 +12,10 @@
from rest_framework.views import APIView
from rest_framework.authtoken.models import Token
from rest_framework.permissions import IsAuthenticated
from rest_framework.authentication import TokenAuthentication
from rest_framework.authentication import (
TokenAuthentication,
SessionAuthentication,
)

from .serializers import AccountSerializer
from .models import Account
Expand Down Expand Up @@ -66,13 +70,12 @@ def login(request):
return HttpResponse("wrong password", status=400)


@method_decorator(csrf_exempt, name="dispatch")
class AccountDetail(APIView):
"""
Retrieve, update or delete a user.
"""

authentication_classes = [TokenAuthentication]
authentication_classes = [TokenAuthentication, SessionAuthentication]
permission_classes = [IsAuthenticated]

@csrf_exempt
Expand Down Expand Up @@ -101,7 +104,7 @@ def delete(self, request):


@api_view(["GET"])
@authentication_classes([TokenAuthentication])
@authentication_classes([TokenAuthentication, SessionAuthentication])
@permission_classes([IsAuthenticated])
def get_user_id(request):
user = request.user
Expand Down
8 changes: 4 additions & 4 deletions valhub/analyses/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class Meta:
model = Analysis
fields = ("analysis_id", "analysis_name")

def to_representation(self, instance):
data = super().to_representation(instance)
data["analysis_id"] = instance.analysis_id
return data
# def to_representation(self, instance):
# data = super().to_representation(instance)
# data["analysis_id"] = instance.analysis_id
# return data
6 changes: 3 additions & 3 deletions valhub/analyses/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def list_analysis(request):

@api_view(["GET"])
@csrf_exempt
@authentication_classes([TokenAuthentication])
@authentication_classes([TokenAuthentication, SessionAuthentication])
@permission_classes([IsAuthenticated])
def analysis_detail(request, analysis_id):
analysis = Analysis.objects.get(analysis_id=analysis_id)
Expand All @@ -67,7 +67,7 @@ def analysis_detail(request, analysis_id):

@api_view(["GET"])
@csrf_exempt
@authentication_classes([TokenAuthentication])
@authentication_classes([TokenAuthentication, SessionAuthentication])
@permission_classes([IsAuthenticated])
def leaderboard(request, analysis_id):
_analysis = Analysis.objects.get(analysis_id=analysis_id)
Expand All @@ -86,7 +86,7 @@ def leaderboard(request, analysis_id):

# Update this later to only accept route calls from within localhost or own container
@api_view(["POST"])
@authentication_classes([TokenAuthentication])
@authentication_classes([TokenAuthentication, SessionAuthentication])
@permission_classes([IsAuthenticated])
def create_new_analysis(request):
# Remove user_id related code
Expand Down
2 changes: 1 addition & 1 deletion valhub/base/logging_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"stdout": {
"class": "logging.StreamHandler",
"level": "INFO",
"formatter": "simple",
"formatter": "detailed",
"stream": "ext://sys.stdout"
},
"file": {
Expand Down
11 changes: 7 additions & 4 deletions valhub/error_report/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
permission_classes,
authentication_classes,
)
from rest_framework.authentication import TokenAuthentication
from rest_framework.authentication import (
TokenAuthentication,
SessionAuthentication,
)
from rest_framework.permissions import IsAuthenticated

from django.views.decorators.csrf import csrf_exempt
Expand Down Expand Up @@ -116,7 +119,7 @@ def get_queryset(self):

@api_view(["POST"])
@csrf_exempt
@authentication_classes([TokenAuthentication])
@authentication_classes([TokenAuthentication, SessionAuthentication])
@permission_classes([IsAuthenticated])
def ErrorReport(request: Request, *args, **kwargs):
try:
Expand Down Expand Up @@ -178,7 +181,7 @@ def ErrorReport(request: Request, *args, **kwargs):


@api_view(["GET"])
@authentication_classes([TokenAuthentication])
@authentication_classes([TokenAuthentication, SessionAuthentication])
@permission_classes([IsAuthenticated])
@csrf_exempt
def ErrorReportPrivateList(request, pk):
Expand All @@ -199,7 +202,7 @@ def ErrorReportPrivateList(request, pk):
# @permission_classes([IsAuthenticated])
@api_view(["POST"])
@csrf_exempt
@authentication_classes([TokenAuthentication])
@authentication_classes([TokenAuthentication, SessionAuthentication])
@permission_classes([IsAuthenticated])
def ErrorReportNew(request, pk):
# queryset = ErrorReport.objects.all()
Expand Down
9 changes: 6 additions & 3 deletions valhub/file_metadata/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,21 @@
authentication_classes,
permission_classes,
)
from rest_framework.authentication import TokenAuthentication
from rest_framework.authentication import (
TokenAuthentication,
SessionAuthentication,
)
from rest_framework.permissions import IsAuthenticated


@authentication_classes([TokenAuthentication])
@authentication_classes([TokenAuthentication, SessionAuthentication])
@permission_classes([IsAuthenticated])
class FileMetadataList(generics.ListCreateAPIView):
queryset = FileMetadata.objects.all()
serializer_class = FileMetadataSerializer


@authentication_classes([TokenAuthentication])
@authentication_classes([TokenAuthentication, SessionAuthentication])
@permission_classes([IsAuthenticated])
class FileMetadataDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = FileMetadata.objects.all()
Expand Down
88 changes: 51 additions & 37 deletions valhub/submissions/serializers.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,24 @@
from rest_framework import serializers
from .models import Submission
from analyses.models import Analysis
from accounts.models import Account
from error_report.models import ErrorReport
from error_report.serializers import ErrorReportLeaderboardSerializer
import logging


class UserSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = ("uuid", "username")


class AnalysisSerializer(serializers.ModelSerializer):
class Meta:
model = Analysis
fields = ("analysis_id", "analysis_name")


class SubmissionSerializer(serializers.ModelSerializer):
"""
Serialize the Submission Model.
Expand All @@ -15,29 +29,29 @@ def __init__(self, *args, **kwargs):

class Meta:
model = Submission
fields = ("algorithm",)
fields = ("algorithm", "submission_id")

def to_representation(self, instance):
data = super(SubmissionSerializer, self).to_representation(instance)
data["submission_id"] = instance.submission_id
data["analysis"] = {
"analysis_id": instance.analysis.analysis_id,
"analysis_name": instance.analysis.analysis_name,
}
data["created_by"] = {
"uuid": instance.created_by.uuid,
"username": instance.created_by.username,
}
data["submitted_at"] = instance.submitted_at
data["result"] = instance.result
data["status"] = instance.status
error_report = ErrorReport.objects.filter(submission=instance).first()
data["error_rate"] = (
error_report.error_rate
if error_report and error_report.error_rate is not None
else 0
)
return data
# def to_representation(self, instance):
# data = super(SubmissionSerializer, self).to_representation(instance)
# data["submission_id"] = instance.submission_id
# data["analysis"] = {
# "analysis_id": instance.analysis.analysis_id,
# "analysis_name": instance.analysis.analysis_name,
# }
# data["created_by"] = {
# "uuid": instance.created_by.uuid,
# "username": instance.created_by.username,
# }
# data["submitted_at"] = instance.submitted_at
# data["result"] = instance.result
# data["status"] = instance.status
# error_report = ErrorReport.objects.filter(submission=instance).first()
# data["error_rate"] = (
# error_report.error_rate
# if error_report and error_report.error_rate is not None
# else 0
# )
# return data


class SubmissionDetailSerializer(serializers.ModelSerializer):
Expand All @@ -60,18 +74,18 @@ class Meta:
"data_requirements",
)

def to_representation(self, instance):
data = super(SubmissionDetailSerializer, self).to_representation(
instance
)
data["created_by"] = {
"uuid": instance.created_by.uuid,
"username": instance.created_by.username,
}
error_report = ErrorReport.objects.filter(submission=instance).first()
data["error_rate"] = (
error_report.error_rate
if error_report and error_report.error_rate is not None
else 0
)
return data
# def to_representation(self, instance):
# data = super(SubmissionDetailSerializer, self).to_representation(
# instance
# )
# data["created_by"] = {
# "uuid": instance.created_by.uuid,
# "username": instance.created_by.username,
# }
# error_report = ErrorReport.objects.filter(submission=instance).first()
# data["error_rate"] = (
# error_report.error_rate
# if error_report and error_report.error_rate is not None
# else 0
# )
# return data
4 changes: 2 additions & 2 deletions valhub/submissions/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@
name="submission_detail",
),
path(
"analysis/<int:analysis_id>/change_submission_status/<int:submission_id>",
"change_submission_status/<int:submission_id>",
views.change_submission_status,
name="change_submission_status",
),
path(
"analysis/<int:analysis_id>/update_submission_result/<int:submission_id>",
"update_submission_result/<int:submission_id>",
views.update_submission_result,
name="update_submission_result",
),
Expand Down
Loading

0 comments on commit 0c677eb

Please sign in to comment.