17032330092e4b5773f0cbf15aa97ce413760e43
2 # Copyright 2018 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
22 import authosm
.utils
as osmutils
23 from lib
.osm
.osmclient
.clientv2
import Client
25 logging
.basicConfig(level
=logging
.DEBUG
)
26 log
= logging
.getLogger(__name__
)
30 def user_list(request
):
31 user
= osmutils
.get_user(request
)
33 result
= client
.user_list(user
.get_token())
34 result_projects
= client
.project_list(user
.get_token())
35 p_map
= {'admin': 'admin'}
36 for p
in result_projects
['data']:
37 p_map
[p
['_id']] = p
['name']
38 users
= result
['data'] if result
and result
['error'] is False else []
40 user_project_ids
= user
['projects']
41 user_project_names
= []
42 for p_id
in user_project_ids
:
44 user_project_names
.append(p_map
[p_id
])
45 user
['projects'] = user_project_names
48 'users': result
['data'] if result
and result
['error'] is False else []
51 return __response_handler(request
, result
, 'user_list.html')
56 user
= osmutils
.get_user(request
)
59 "username": request
.POST
['username'],
60 "password": request
.POST
['password'],
61 "projects": request
.POST
.getlist('projects')
63 result
= client
.user_create(user
.get_token(), user_data
)
65 return __response_handler(request
, result
['data'], url
=None,
66 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
68 return __response_handler(request
, {}, url
=None, status
=200)
72 def delete(request
, user_id
=None):
73 user
= osmutils
.get_user(request
)
76 result
= client
.user_delete(user
.get_token(), user_id
)
77 except Exception as e
:
79 result
= {'error': True, 'data': str(e
)}
81 return __response_handler(request
, result
['data'], url
=None,
82 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
84 return __response_handler(request
, {}, url
=None, status
=200)
87 def update(request
, user_id
=None):
88 user
= osmutils
.get_user(request
)
91 projects_old
= request
.POST
.get('projects_old').split(',')
92 projects_new
= request
.POST
.getlist('projects')
93 default_project
= request
.POST
.get('default_project')
94 projects_new
.append(default_project
)
95 projects_to_add
= list(set(projects_new
) - set(projects_old
))
96 projects_to_remove
= list(set(projects_old
) - set(projects_new
))
100 for p
in projects_to_remove
:
101 project_payload
["$"+str(p
)] = None
102 for p
in projects_to_add
:
103 if p
not in projects_old
:
104 project_payload
["$+"+str(p
)] = str(p
)
105 project_payload
["$" + default_project
] = None
106 project_payload
["$+[0]"] = default_project
109 payload
["projects"] = project_payload
110 if request
.POST
.get('password') and request
.POST
.get('password') is not '':
111 payload
["password"] = request
.POST
.get('password')
113 update_res
= client
.user_update(user
.get_token(), user_id
, payload
)
114 except Exception as e
:
116 update_res
= {'error': True, 'data': str(e
)}
117 if update_res
['error']:
118 return __response_handler(request
, update_res
['data'], url
=None,
119 status
=update_res
['data']['status'] if 'status' in update_res
['data'] else 500)
121 return __response_handler(request
, {}, url
=None, status
=200)
122 #return __response_handler(request, {}, 'users:list', to_redirect=True, )
125 def __response_handler(request
, data_res
, url
=None, to_redirect
=None, *args
, **kwargs
):
126 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
127 if 'application/json' in raw_content_types
or url
is None:
128 return HttpResponse(json
.dumps(data_res
), content_type
="application/json", *args
, **kwargs
)
130 return redirect(url
, *args
, **kwargs
)
132 return render(request
, url
, data_res
)