Lab as a Service 2.0
[laas.git] / src / api / views.py
1 ##############################################################################
2 # Copyright (c) 2016 Max Breitenfeldt and others.
3 # Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others.
4 #
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
10
11
12 from django.contrib.auth.decorators import login_required
13 from django.shortcuts import redirect
14 from django.utils.decorators import method_decorator
15 from django.views import View
16 from django.http.response import JsonResponse
17 from rest_framework import viewsets
18 from rest_framework.authtoken.models import Token
19 from django.views.decorators.csrf import csrf_exempt
20
21 import json
22
23 from api.serializers.booking_serializer import *
24 from api.serializers.old_serializers import NotifierSerializer, UserSerializer
25 from account.models import UserProfile
26 from booking.models import Booking
27 from notifier.models import Notifier
28 from api.models import *
29
30
31 class BookingViewSet(viewsets.ModelViewSet):
32     queryset = Booking.objects.all()
33     serializer_class = BookingSerializer
34     filter_fields = ('resource', 'id')
35
36
37 class NotifierViewSet(viewsets.ModelViewSet):
38     queryset = Notifier.objects.none()
39     serializer_class = NotifierSerializer
40
41
42 class UserViewSet(viewsets.ModelViewSet):
43     queryset = UserProfile.objects.all()
44     serializer_class = UserSerializer
45
46
47 @method_decorator(login_required, name='dispatch')
48 class GenerateTokenView(View):
49     def get(self, request, *args, **kwargs):
50         user = self.request.user
51         token, created = Token.objects.get_or_create(user=user)
52         if not created:
53             token.delete()
54             Token.objects.create(user=user)
55         return redirect('account:settings')
56
57
58 def lab_inventory(request, lab_name=""):
59     lab_token = request.META.get('HTTP_AUTH_TOKEN')
60     lab_manager = LabManagerTracker.get(lab_name, lab_token)
61     return JsonResponse(lab_manager.get_inventory(), safe=False)
62
63
64 def lab_status(request, lab_name=""):
65     lab_token = request.META.get('HTTP_AUTH_TOKEN')
66     lab_manager = LabManagerTracker.get(lab_name, lab_token)
67     if request.method == "POST":
68         return JsonResponse(lab_manager.set_status(request.POST), safe=False)
69     return JsonResponse(lab_manager.get_status(), safe=False)
70
71
72 def lab_profile(request, lab_name=""):
73     lab_token = request.META.get('HTTP_AUTH_TOKEN')
74     lab_manager = LabManagerTracker.get(lab_name, lab_token)
75     return JsonResponse(lab_manager.get_profile(), safe=False)
76
77
78 @csrf_exempt
79 def specific_task(request, lab_name="", job_id="", task_id=""):
80     lab_token = request.META.get('HTTP_AUTH_TOKEN')
81     LabManagerTracker.get(lab_name, lab_token)  # Authorize caller, but we dont need the result
82
83     if request.method == "POST":
84         task = get_task(task_id)
85         if 'status' in request.POST:
86             task.status = request.POST.get('status')
87         if 'message' in request.POST:
88             task.message = request.POST.get('message')
89         task.save()
90         d = {}
91         d['task'] = task.config.get_delta()
92         m = {}
93         m['status'] = task.status
94         m['job'] = str(task.job)
95         m['message'] = task.message
96         d['meta'] = m
97         response = json.dumps(d)
98         return JsonResponse(response)
99     elif request.method == "GET":
100         return JsonResponse(get_task(task_id).config.get_delta())
101
102
103 def specific_job(request, lab_name="", job_id=""):
104     lab_token = request.META.get('HTTP_AUTH_TOKEN')
105     lab_manager = LabManagerTracker.get(lab_name, lab_token)
106     if request.method == "POST":
107         return JsonResponse(lab_manager.update_job(job_id, request.POST), safe=False)
108     return JsonResponse(lab_manager.get_job(job_id), safe=False)
109
110
111 def new_jobs(request, lab_name=""):
112     lab_token = request.META.get('HTTP_AUTH_TOKEN')
113     lab_manager = LabManagerTracker.get(lab_name, lab_token)
114     return JsonResponse(lab_manager.get_new_jobs(), safe=False)
115
116
117 def current_jobs(request, lab_name=""):
118     lab_token = request.META.get('HTTP_AUTH_TOKEN')
119     lab_manager = LabManagerTracker.get(lab_name, lab_token)
120     return JsonResponse(lab_manager.get_current_jobs(), safe=False)
121
122
123 def done_jobs(request, lab_name=""):
124     lab_token = request.META.get('HTTP_AUTH_TOKEN')
125     lab_manager = LabManagerTracker.get(lab_name, lab_token)
126     return JsonResponse(lab_manager.get_done_jobs(), safe=False)