Fix bug 1262 - Updated requirements to use mysqlclient
[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 }
48 try:
49 if 'permissions' in request.POST and request.POST.get('permissions') != '':
50 role_permissions = yaml.load(request.POST.get('permissions'))
51
52 if not isinstance(role_permissions, dict):
53 raise ValueError('Role permissions should be provided in a key-value fashion')
54 for key, value in role_permissions.items():
55 if not isinstance(value, bool):
56 raise ValueError("Value of '{}' in a role permissionss should be boolean".format(key))
57 role_data[key] = value
58 except Exception as e:
59 return __response_handler(request, {'status': 400, 'code': 'BAD_REQUEST', 'detail': e.message}, url=None, status=400)
60 result = client.role_create(user.get_token(), role_data)
61 if result['error']:
62 return __response_handler(request, result['data'], url=None,
63 status=result['data']['status'] if 'status' in result['data'] else 500)
64 else:
65 return __response_handler(request, {}, url=None, status=200)
66
67
68 @login_required
69 def delete(request, role_id=None):
70 user = osmutils.get_user(request)
71 try:
72 client = Client()
73 result = client.role_delete(user.get_token(), role_id)
74 except Exception as e:
75 log.exception(e)
76 result = {'error': True, 'data': str(e)}
77 if result['error']:
78 return __response_handler(request, result['data'], url=None,
79 status=result['data']['status'] if 'status' in result['data'] else 500)
80 else:
81 return __response_handler(request, {}, url=None, status=200)
82
83
84 @login_required
85 def update(request, role_id=None):
86 user = osmutils.get_user(request)
87 client = Client()
88 payload = {
89 'name': request.POST['name'],
90 'permissions': {}
91 }
92 try:
93 if 'permissions' in request.POST and request.POST.get('permissions') != '':
94 role_permissions = yaml.load(request.POST.get('permissions'))
95
96 if not isinstance(role_permissions, dict):
97 raise ValueError('Role permissions should be provided in a key-value fashion')
98 for key, value in role_permissions.items():
99 if not isinstance(value, bool):
100 raise ValueError('Value in a role permissions should be boolean')
101 payload['permissions'][key] = value
102 except Exception as e:
103 return __response_handler(request, {'status': 400, 'code': 'BAD_REQUEST', 'detail': e.message}, url=None, status=400)
104 result = client.role_update(user.get_token(), role_id, payload)
105 if result['error']:
106 return __response_handler(request, result['data'], url=None,
107 status=result['data']['status'] if 'status' in result['data'] else 500)
108 else:
109 return __response_handler(request, {}, url=None, status=200)
110
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 'permissions': {key: value for key, value in role['permissions'].items() if key not in ['_id', 'name', 'root', '_admin'] }
130 }
131 return __response_handler(request, result, url=None, status=200)
132
133
134 def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
135 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
136 if 'application/json' in raw_content_types or url is None:
137 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
138 elif to_redirect:
139 return redirect(url, *args, **kwargs)
140 else:
141 return render(request, url, data_res)