Cleaning up look and feel
[pharos-tools.git] / dashboard / 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     try:
34         del ManagerTracker.managers[request.session['manager_session']]
35         return HttpResponse('')
36     except Exception:
37         return None
38
39
40 def step_view(request):
41     manager = attempt_auth(request)
42     if not manager:
43         # no manager found, redirect to "lost" page
44         return no_workflow(request)
45     if request.GET.get('step') is not None:
46         manager.goto(int(request.GET.get('step')))
47     return manager.render(request)
48
49
50 def manager_view(request):
51     manager = attempt_auth(request)
52
53     if not manager:
54         return HttpResponseGone("No session found that relates to current request")
55
56     if request.method == 'GET':
57         # no need for this statement if only intercepting post requests
58
59         # return general context for viewport page
60         return manager.status(request)
61
62     if request.method == 'POST':
63         if request.POST.get('add') is not None:
64             logger.debug("add found")
65             target_id = None
66             if 'target' in request.POST:
67                 target_id = int(request.POST.get('target'))
68             manager.add_workflow(workflow_type=int(request.POST.get('add')), target_id=target_id)
69         elif request.POST.get('edit') is not None and request.POST.get('edit_id') is not None:
70             logger.debug("edit found")
71             manager.add_workflow(workflow_type=request.POST.get('edit'), edit_object=int(request.POST.get('edit_id')))
72         elif request.POST.get('cancel') is not None:
73             del ManagerTracker.managers[request.session['manager_session']]
74
75     return manager.status(request)
76
77
78 def viewport_view(request):
79     if not request.user.is_authenticated:
80         return login(request)
81
82     manager = attempt_auth(request)
83     if manager is None:
84         return no_workflow(request)
85
86     if request.method == 'GET':
87         return render(request, 'workflow/viewport-base.html')
88     else:
89         pass
90
91
92 def create_session(wf_type, request):
93     wf = int(wf_type)
94     smgr = SessionManager(request=request)
95     smgr.add_workflow(workflow_type=wf, target_id=request.POST.get("target"))
96     manager_uuid = uuid.uuid4().hex
97     ManagerTracker.getInstance().managers[manager_uuid] = smgr
98
99     return manager_uuid
100
101
102 def no_workflow(request):
103
104     logger.debug("There is no active workflow")
105
106     return render(request, 'workflow/no_workflow.html', {'title': "Not Found"})
107
108
109 def login(request):
110     return render(request, "dashboard/login.html", {'title': 'Authentication Required'})