25371754c2d132742a7883dd1589748ebd928d69
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)
84 def update(request
, role_id
=None):
85 user
= osmutils
.get_user(request
)
88 'name': request
.POST
['name'],
91 if 'permissions' in request
.POST
and request
.POST
.get('permissions') != '':
92 role_permissions
= yaml
.load(request
.POST
.get('permissions'))
94 if not isinstance(role_permissions
, dict):
95 raise ValueError('Role permissions should be provided in a key-value fashion')
96 for key
, value
in role_permissions
.items():
97 if not isinstance(value
, bool):
98 raise ValueError('Value in a role permissions should be boolean')
100 except Exception as e
:
101 return __response_handler(request
, {'status': 400, 'code': 'BAD_REQUEST', 'detail': e
.message
} , url
=None, status
=400)
102 result
= client
.role_update(user
.get_token(), role_id
, payload
)
104 return __response_handler(request
, result
['data'], url
=None,
105 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
107 return __response_handler(request
, {}, url
=None, status
=200)
110 def get(request
, role_id
=None):
111 user
= osmutils
.get_user(request
)
114 get_res
= client
.role_get(user
.get_token(), role_id
)
115 except Exception as e
:
117 get_res
= {'error': True, 'data': str(e
)}
119 return __response_handler(request
, get_res
['data'], url
=None,
120 status
=get_res
['data']['status'] if 'status' in get_res
['data'] else 500)
122 role
= get_res
['data']
125 'name': role
['name'],
126 'permissions': { key
:value
for key
, value
in role
['permissions'].items() if key
not in ['_id', 'name', 'root', '_admin'] }
128 return __response_handler(request
, result
, url
=None, status
=200)
131 def __response_handler(request
, data_res
, url
=None, to_redirect
=None, *args
, **kwargs
):
132 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
133 if 'application/json' in raw_content_types
or url
is None:
134 return HttpResponse(json
.dumps(data_res
), content_type
="application/json", *args
, **kwargs
)
136 return redirect(url
, *args
, **kwargs
)
138 return render(request
, url
, data_res
)