Cleans up some HTML
[laas.git] / src / workflow / views.py
1 ##############################################################################
2 # Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others.
3 #
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9
10
11 from django.http import HttpResponse, HttpResponseGone
12 from django.shortcuts import render
13
14 import uuid
15
16 from workflow.workflow_manager import ManagerTracker, SessionManager
17
18 import logging
19 logger = logging.getLogger(__name__)
20
21
22 def attempt_auth(request):
23     try:
24         manager = ManagerTracker.managers[request.session['manager_session']]
25
26         return manager
27
28     except KeyError:
29         return None
30
31
32 def delete_session(request):
33     manager = attempt_auth(request)
34
35     if not manager:
36         return HttpResponseGone("No session found that relates to current request")
37
38     if manager.pop_workflow():
39         return HttpResponse('')
40     else:
41         del ManagerTracker.managers[request.session['manager_session']]
42         return render(request, 'workflow/exit_redirect.html')
43
44     try:
45         del ManagerTracker.managers[request.session['manager_session']]
46         return HttpResponse('')
47     except Exception:
48         return None
49
50
51 def step_view(request):
52     manager = attempt_auth(request)
53     if not manager:
54         # no manager found, redirect to "lost" page
55         return no_workflow(request)
56     if request.GET.get('step') is not None:
57         if request.GET.get('step') == 'next':
58             manager.go_next()
59         elif request.GET.get('step') == 'prev':
60             manager.go_prev()
61         else:
62             raise Exception("requested action for new step had malformed contents: " + request.GET.get('step'))
63     return manager.render(request)
64
65
66 def manager_view(request):
67     manager = attempt_auth(request)
68
69     if not manager:
70         return HttpResponseGone("No session found that relates to current request")
71
72     if request.method == 'GET':
73         # no need for this statement if only intercepting post requests
74
75         # return general context for viewport page
76         return manager.status(request)
77
78     if request.method == 'POST':
79         if request.POST.get('add') is not None:
80             logger.debug("add found")
81             target_id = None
82             if 'target' in request.POST:
83                 target_id = int(request.POST.get('target'))
84             manager.add_workflow(workflow_type=int(request.POST.get('add')), target_id=target_id)
85         elif request.POST.get('edit') is not None and request.POST.get('edit_id') is not None:
86             logger.debug("edit found")
87             manager.add_workflow(workflow_type=request.POST.get('edit'), edit_object=int(request.POST.get('edit_id')))
88         elif request.POST.get('cancel') is not None:
89             if not manager.pop_workflow():
90                 del ManagerTracker.managers[request.session['manager_session']]
91
92     return manager.status(request)
93
94
95 def viewport_view(request):
96     if not request.user.is_authenticated:
97         return login(request)
98
99     manager = attempt_auth(request)
100     if manager is None:
101         return no_workflow(request)
102
103     if request.method == 'GET':
104         return render(request, 'workflow/viewport-base.html')
105     else:
106         pass
107
108
109 def create_session(wf_type, request):
110     wf = int(wf_type)
111     smgr = SessionManager(request=request)
112     smgr.add_workflow(workflow_type=wf, target_id=request.POST.get("target"))
113     manager_uuid = uuid.uuid4().hex
114     ManagerTracker.getInstance().managers[manager_uuid] = smgr
115
116     return manager_uuid
117
118
119 def no_workflow(request):
120
121     logger.debug("There is no active workflow")
122
123     return render(request, 'workflow/no_workflow.html', {'title': "Not Found"})
124
125
126 def login(request):
127     return render(request, "dashboard/login.html", {'title': 'Authentication Required'})