a13e28de8c0aa84e2b84fcf97a3eb433180e01b3
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'],
47 'root': True if request
.POST
.get('root') else False
50 if 'definition' in request
.POST
and request
.POST
.get('definition') != '':
51 role_definition
= yaml
.load(request
.POST
.get('definition'))
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
)
63 return __response_handler(request
, result
['data'], url
=None,
64 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
66 return __response_handler(request
, {}, url
=None, status
=200)
70 def delete(request
, role_id
=None):
71 user
= osmutils
.get_user(request
)
74 result
= client
.role_delete(user
.get_token(), role_id
)
75 except Exception as e
:
77 result
= {'error': True, 'data': str(e
)}
79 return __response_handler(request
, result
['data'], url
=None,
80 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
82 return __response_handler(request
, {}, url
=None, status
=200)
85 def update(request
, role_id
=None):
86 user
= osmutils
.get_user(request
)
90 'name': request
.POST
['name'],
91 'root': True if request
.POST
.get('root') else False
94 if 'definition' in request
.POST
and request
.POST
.get('definition') != '':
95 role_definition
= yaml
.load(request
.POST
.get('definition'))
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')
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
)
107 return __response_handler(request
, result
['data'], url
=None,
108 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
110 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 'root': role
['root'],
130 'definition': { key
:value
for key
, value
in role
.items() if key
not in ['_id', 'name', 'root', '_admin'] }
132 return __response_handler(request
, result
, url
=None, status
=200)
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
)
140 return redirect(url
, *args
, **kwargs
)
142 return render(request
, url
, data_res
)