2 # Copyright 2019 EveryUP Srl
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
8 # http://www.apache.org/licenses/LICENSE-2.0
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.
17 from django
.shortcuts
import render
, redirect
18 from sf_t3d
.decorators
import login_required
19 from django
.http
import HttpResponse
23 import authosm
.utils
as osmutils
24 from lib
.osm
.osmclient
.clientv2
import Client
26 logging
.basicConfig(level
=logging
.DEBUG
)
27 log
= logging
.getLogger(__name__
)
31 def role_list(request
):
32 user
= osmutils
.get_user(request
)
34 result
= client
.role_list(user
.get_token())
36 'roles': result
['data'] if result
and result
['error'] is False else []
38 return __response_handler(request
, result
, 'role_list.html')
43 user
= osmutils
.get_user(request
)
46 'name': request
.POST
['name'],
49 if 'permissions' in request
.POST
and request
.POST
.get('permissions') != '':
50 role_permissions
= yaml
.load(request
.POST
.get('permissions'))
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
)
62 return __response_handler(request
, result
['data'], url
=None,
63 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
65 return __response_handler(request
, {}, url
=None, status
=200)
69 def delete(request
, role_id
=None):
70 user
= osmutils
.get_user(request
)
73 result
= client
.role_delete(user
.get_token(), role_id
)
74 except Exception as e
:
76 result
= {'error': True, 'data': str(e
)}
78 return __response_handler(request
, result
['data'], url
=None,
79 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
81 return __response_handler(request
, {}, url
=None, status
=200)
85 def update(request
, role_id
=None):
86 user
= osmutils
.get_user(request
)
89 'name': request
.POST
['name'],
93 if 'permissions' in request
.POST
and request
.POST
.get('permissions') != '':
94 role_permissions
= yaml
.load(request
.POST
.get('permissions'))
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
)
106 return __response_handler(request
, result
['data'], url
=None,
107 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
109 return __response_handler(request
, {}, url
=None, status
=200)
113 def get(request
, role_id
=None):
114 user
= osmutils
.get_user(request
)
117 get_res
= client
.role_get(user
.get_token(), role_id
)
118 except Exception as e
:
120 get_res
= {'error': True, 'data': str(e
)}
122 return __response_handler(request
, get_res
['data'], url
=None,
123 status
=get_res
['data']['status'] if 'status' in get_res
['data'] else 500)
125 role
= get_res
['data']
128 'name': role
['name'],
129 'permissions': {key
: value
for key
, value
in role
['permissions'].items() if key
not in ['_id', 'name', 'root', '_admin'] }
131 return __response_handler(request
, result
, url
=None, status
=200)
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
)
139 return redirect(url
, *args
, **kwargs
)
141 return render(request
, url
, data_res
)