fix UUID problem with projects and roles; removed bower
[osm/LW-UI.git] / rolehandler / views.py
1 #
2 # Copyright 2019 EveryUP Srl
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 #
16
17 from django.shortcuts import render, redirect
18 from sf_t3d.decorators import login_required
19 from django.http import HttpResponse
20 import yaml
21 import json
22 import logging
23 import authosm.utils as osmutils
24 from lib.osm.osmclient.clientv2 import Client
25
26 logging.basicConfig(level=logging.DEBUG)
27 log = logging.getLogger(__name__)
28
29
30 @login_required
31 def role_list(request):
32 user = osmutils.get_user(request)
33 client = Client()
34 result = client.role_list(user.get_token())
35 result = {
36 'roles': result['data'] if result and result['error'] is False else []
37 }
38 return __response_handler(request, result, 'role_list.html')
39
40
41 @login_required
42 def create(request):
43 user = osmutils.get_user(request)
44 client = Client()
45 role_data ={
46 'name': request.POST['name'],
47 'root': True if request.POST.get('root') else False
48 }
49 try:
50 if 'definition' in request.POST and request.POST.get('definition') != '':
51 role_definition = yaml.load(request.POST.get('definition'))
52
53 if not isinstance(role_definition, dict):
54 raise ValueError('Role definition should be provided in a key-value fashion')
55 for key, value in role_definition.items():
56 if not isinstance(value, bool):
57 raise ValueError('Value in a role definition should be boolean')
58 role_data[key] = value
59 except Exception as e:
60 return __response_handler(request, {'status': 400, 'code': 'BAD_REQUEST', 'detail': e.message} , url=None, status=400)
61 result = client.role_create(user.get_token(), role_data)
62 if result['error']:
63 return __response_handler(request, result['data'], url=None,
64 status=result['data']['status'] if 'status' in result['data'] else 500)
65 else:
66 return __response_handler(request, {}, url=None, status=200)
67
68
69 @login_required
70 def delete(request, role_id=None):
71 user = osmutils.get_user(request)
72 try:
73 client = Client()
74 result = client.role_delete(user.get_token(), role_id)
75 except Exception as e:
76 log.exception(e)
77 result = {'error': True, 'data': str(e)}
78 if result['error']:
79 return __response_handler(request, result['data'], url=None,
80 status=result['data']['status'] if 'status' in result['data'] else 500)
81 else:
82 return __response_handler(request, {}, url=None, status=200)
83
84 @login_required
85 def update(request, role_id=None):
86 user = osmutils.get_user(request)
87 client = Client()
88 payload = {
89 '_id': role_id,
90 'name': request.POST['name'],
91 'root': True if request.POST.get('root') else False
92 }
93 try:
94 if 'definition' in request.POST and request.POST.get('definition') != '':
95 role_definition = yaml.load(request.POST.get('definition'))
96
97 if not isinstance(role_definition, dict):
98 raise ValueError('Role definition should be provided in a key-value fashion')
99 for key, value in role_definition.items():
100 if not isinstance(value, bool):
101 raise ValueError('Value in a role definition should be boolean')
102 payload[key] = value
103 except Exception as e:
104 return __response_handler(request, {'status': 400, 'code': 'BAD_REQUEST', 'detail': e.message} , url=None, status=400)
105 result = client.role_update(user.get_token(), role_id, payload)
106 if result['error']:
107 return __response_handler(request, result['data'], url=None,
108 status=result['data']['status'] if 'status' in result['data'] else 500)
109 else:
110 return __response_handler(request, {}, url=None, status=200)
111
112 @login_required
113 def get(request, role_id=None):
114 user = osmutils.get_user(request)
115 try:
116 client = Client()
117 get_res = client.role_get(user.get_token(), role_id)
118 except Exception as e:
119 log.exception(e)
120 get_res = {'error': True, 'data': str(e)}
121 if get_res['error']:
122 return __response_handler(request, get_res['data'], url=None,
123 status=get_res['data']['status'] if 'status' in get_res['data'] else 500)
124 else:
125 role = get_res['data']
126 result = {
127 '_id': role['_id'],
128 'name': role['name'],
129 'root': role['root'],
130 'definition': { key:value for key, value in role.items() if key not in ['_id', 'name', 'root', '_admin'] }
131 }
132 return __response_handler(request, result, url=None, status=200)
133
134
135 def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
136 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
137 if 'application/json' in raw_content_types or url is None:
138 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
139 elif to_redirect:
140 return redirect(url, *args, **kwargs)
141 else:
142 return render(request, url, data_res)