fix bug 823; fix bug 800
Change-Id: Idafe6cd3ab8db26cb763be9f334809429dbec913
Signed-off-by: lombardofr <lombardo@everyup.it>
diff --git a/userhandler/templates/modal/user_create.html b/userhandler/templates/modal/user_create.html
index 21afce0..5b8d73a 100644
--- a/userhandler/templates/modal/user_create.html
+++ b/userhandler/templates/modal/user_create.html
@@ -1,3 +1,18 @@
+<!--
+Copyright 2019 EveryUP srl
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
<div class="modal" id="modal_new_user" xmlns="http://www.w3.org/1999/html">
<div class="modal-dialog">
<div class="modal-content">
@@ -11,6 +26,7 @@
method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="modal-body" id="modal_new_user_body">
+
<div class="form-group">
<label for="username" class="col-sm-3 control-label">Username *</label>
<div class="col-sm-6">
@@ -23,19 +39,25 @@
<label for="password" class="col-sm-3 control-label">Password *</label>
<div class="col-sm-6">
<input class="form-control" id="password" name="password" type="password"
- placeholder="Password" required>
+ placeholder="Password" autocomplete="off" required>
</div>
</div>
+
<div class="form-group">
- <label for=projects" class="col-sm-3 control-label">Projects *</label>
- <div class="col-sm-6">
- <select required id="projects" class="js-example-basic-multiple form-control" name="projects"
- multiple="multiple">
- </select>
- </div>
+ <label for="password" class="col-sm-3 control-label">Conf. Password *</label>
+ <div class="col-sm-6">
+ <input class="form-control" id="password2" name="password2" type="password"
+ placeholder="Repeat Password" autocomplete="off" required>
+ <div class="row">
+ <div class="col-sm-12">
+ <span id="pwmatch" class="glyphicon glyphicon-remove" style="color:#FF0004;"></span> Passwords Match
+ </div>
+ </div>
+ </div>
</div>
+
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
diff --git a/userhandler/templates/modal/user_edit.html b/userhandler/templates/modal/user_credentials_edit.html
similarity index 63%
rename from userhandler/templates/modal/user_edit.html
rename to userhandler/templates/modal/user_credentials_edit.html
index 49eda46..b20da19 100644
--- a/userhandler/templates/modal/user_edit.html
+++ b/userhandler/templates/modal/user_credentials_edit.html
@@ -1,17 +1,32 @@
-<div class="modal" id="modal_edit_user" xmlns="http://www.w3.org/1999/html">
+<!--
+Copyright 2019 EveryUP srl
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div class="modal" id="modal_edit_user_credentials" xmlns="http://www.w3.org/1999/html">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span></button>
- <h4 class="modal-title">Edit User</h4>
+ <h4 class="modal-title">Edit User Credentials</h4>
</div>
<form id="formEditUser" action=""
class="form-horizontal"
method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="hidden" id="projects_old" name="projects_old" value="asdasd">
- <div class="modal-body" id="modal_edit_user_body">
+ <div class="modal-body" id="modal_edit_user_credentials_body">
{% comment %}<div class="form-group">
<label for="username_edit" class="col-sm-3 control-label">Username *</label>
<div class="col-sm-6">
@@ -27,6 +42,19 @@
</div>
</div>
<div class="form-group">
+ <label for="password" class="col-sm-3 control-label">Conf. Password</label>
+ <div class="col-sm-6">
+ <input class="form-control" id="edit_password2" name="password2" type="password"
+ placeholder="Repeat Password" autocomplete="off" required>
+ <div class="row">
+ <div class="col-sm-12">
+ <span id="pwmatch_edit" class="glyphicon glyphicon-remove" style="color:#FF0004;"></span> Passwords Match
+ </div>
+ </div>
+ </div>
+ </div>
+ {% comment %}
+ <div class="form-group">
<label for="projects" class="col-sm-3 control-label">Default project *</label>
<div class="col-sm-6">
<select required id="default_project_edit" class="js-example-basic form-control" name="default_project">
@@ -41,7 +69,7 @@
</select>
</div>
</div>
-
+ {% endcomment %}
</div>
<div class="modal-footer">
diff --git a/userhandler/templates/modal/user_proj_role_edit.html b/userhandler/templates/modal/user_proj_role_edit.html
new file mode 100644
index 0000000..e1df9d5
--- /dev/null
+++ b/userhandler/templates/modal/user_proj_role_edit.html
@@ -0,0 +1,44 @@
+<!--
+Copyright 2019 EveryUP srl
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div class="modal" id="modal_edit_user_role_map" xmlns="http://www.w3.org/1999/html">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">×</span></button>
+ <h4 class="modal-title">Edit Project Role Mapping</h4>
+ </div>
+ <form id="formEditUserRoleMap" action=""
+ class="form-horizontal"
+ method="post" enctype="multipart/form-data">
+ {% csrf_token %}
+ <div class="modal-body" id="modal_edit_proj_role_map_body">
+
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
+ <button class="btn btn-primary"
+ data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> Editing..."
+ id="edit_user_map">Apply
+ </button>
+
+ </div>
+ </form>
+ </div>
+ <!-- /.modal-content -->
+ </div>
+ <!-- /.modal-dialog -->
+</div>
diff --git a/userhandler/templates/user_list.html b/userhandler/templates/user_list.html
index 361784c..b287b76 100644
--- a/userhandler/templates/user_list.html
+++ b/userhandler/templates/user_list.html
@@ -1,3 +1,18 @@
+<!--
+Copyright 2019 EveryUP srl
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
{% extends "base.html" %}
{% load get %}
{% load date_tag %}
@@ -26,7 +41,9 @@
{{ block.super }}
{% include 'modal/user_details.html' %}
{% include 'modal/user_create.html' %}
- {% include 'modal/user_edit.html' %}
+ {% include 'modal/user_credentials_edit.html' %}
+ {% include 'modal/user_proj_role_edit.html' %}
+
{% csrf_token %}
<div class="row">
@@ -50,7 +67,6 @@
<thead>
<tr>
<th>Name</th>
- <th>Projects</th>
<th>Identifier</th>
<th>Modified</th>
<th>Created</th>
@@ -105,27 +121,22 @@
},
{
"render": function (data, type, row) {
- return row['projects'];
+
+ return row['_id'];
},
"targets": 1
},
{
"render": function (data, type, row) {
- return row['_id'];
+ return moment.unix(row["_admin"]['modified']).format('YYYY-MM-DD hh:mm:ss a');
},
"targets": 2
},
{
"render": function (data, type, row) {
- return moment.unix(row["_admin"]['modified']).format('YYYY-MM-DD hh:mm:ss a');
- },
- "targets": 3
- },
- {
- "render": function (data, type, row) {
return moment.unix(row["_admin"]['created']).format('YYYY-MM-DD hh:mm:ss a');
},
- "targets": 4
+ "targets": 3
},
{
"render": function (data, type, row) {
@@ -134,17 +145,19 @@
'data-toggle="dropdown" aria-expanded="false">Actions ' +
'<span class="fa fa-caret-down"></span></button> ' +
'<ul class="dropdown-menu">' +
- '<li> <a href="#" onclick="javascript:openModalEditUser({user_id:\'' + row['_id'] + '\', usernarme:\'' + row['username'] + '\', projects: \'' + row['projects'] + '\'})">' +
- '<i class="fa fa-edit"></i> Edit</a></li>' +
+ '<li> <a href="#" onclick="javascript:openModalEditUserCredentials({user_id:\'' + row['_id'] + '\', usernarme:\'' + row['username'] + '\'})">' +
+ '<i class="fa fa-lock"></i>Edit Credentials</a></li>' +
+ '<li> <a href="#" onclick="javascript:openModalEditUserRoleMap(\''+row['_id']+'\')">' +
+ '<i class="fa fa-user-tag"></i>Projects-Roles</a></li>' +
'<li> <a href="#" onclick="javascript:deleteUser(\'' + row['_id'] + '\', \'' + row['username'] + '\')"' +
'style="color:red"><i class="fa fa-trash"></i> Delete</a></li> </ul></div>';
},
- "targets": 5,
+ "targets": 4,
"orderable": false
}
]
});
-
+ /*
var select2_groups = $('#projects_edit').select2({
placeholder: 'Select Projects',
width: '100%',
@@ -169,8 +182,8 @@
};
}
}
- });
-
+ });*/
+ /*
var select2_single = $('#default_project_edit').select2({
placeholder: 'Select Default Project',
width: '100%',
@@ -194,7 +207,7 @@
};
}
}
- });
+ });*/
setInterval(function () {
table.ajax.reload();
@@ -250,7 +263,7 @@
contentType: false,
processData: false
}).done(function (response, textStatus, jqXHR) {
- $('#modal_edit_user').modal('hide');
+ $('#modal_edit_user_credentials').modal('hide');
table.ajax.reload();
bootbox.alert({
title: "Result",
@@ -268,6 +281,11 @@
});
});
+ $("#password2").keyup(validatePswOnCreate);
+ $("#edit_password2").keyup(validatePswOnEdit);
+
+ $(document).on('click', '.proj-role-map-group-head .btn-add', addMapGroup);
+ $(document).on('click', '.proj-role-map-group .btn-remove', removeMapGroup);
});
</script>
diff --git a/userhandler/urls.py b/userhandler/urls.py
index 4f38be8..25156f0 100644
--- a/userhandler/urls.py
+++ b/userhandler/urls.py
@@ -20,6 +20,7 @@
urlpatterns = [
url(r'^list$', views.user_list, name='list'),
url(r'^create$', views.create, name='create'),
+ url(r'^(?P<user_id>[-\w]+)/info', views.user_info, name='info'),
url(r'^(?P<user_id>[-\w]+)$', views.update, name='update'),
url(r'^(?P<user_id>[-\w]+)/delete$', views.delete, name='delete'),
diff --git a/userhandler/views.py b/userhandler/views.py
index 1703233..66fc22a 100644
--- a/userhandler/views.py
+++ b/userhandler/views.py
@@ -31,19 +31,8 @@
user = osmutils.get_user(request)
client = Client()
result = client.user_list(user.get_token())
- result_projects = client.project_list(user.get_token())
- p_map = {'admin': 'admin'}
- for p in result_projects['data']:
- p_map[p['_id']] = p['name']
- users = result['data'] if result and result['error'] is False else []
- for user in users:
- user_project_ids = user['projects']
- user_project_names = []
- for p_id in user_project_ids:
- if p_id in p_map:
- user_project_names.append(p_map[p_id])
- user['projects'] = user_project_names
+ users = result['data'] if result and result['error'] is False else []
result = {
'users': result['data'] if result and result['error'] is False else []
}
@@ -57,9 +46,9 @@
client = Client()
user_data ={
"username": request.POST['username'],
- "password": request.POST['password'],
- "projects": request.POST.getlist('projects')
+ "password": request.POST['password']
}
+
result = client.user_create(user.get_token(), user_data)
if result['error']:
return __response_handler(request, result['data'], url=None,
@@ -84,32 +73,41 @@
return __response_handler(request, {}, url=None, status=200)
@login_required
+def user_info(request, user_id=None):
+ user = osmutils.get_user(request)
+ try:
+ client = Client()
+
+ info_res = client.get_user_info(user.get_token(), user_id)
+ except Exception as e:
+ log.exception(e)
+ info_res = {'error': True, 'data': str(e)}
+ if info_res['error']:
+ return __response_handler(request, info_res['data'], url=None,
+ status=info_res['data']['status'] if 'status' in info_res['data'] else 500)
+ else:
+ return __response_handler(request, info_res['data'], url=None, status=200)
+
+@login_required
def update(request, user_id=None):
user = osmutils.get_user(request)
try:
client = Client()
- projects_old = request.POST.get('projects_old').split(',')
- projects_new = request.POST.getlist('projects')
- default_project = request.POST.get('default_project')
- projects_new.append(default_project)
- projects_to_add = list(set(projects_new) - set(projects_old))
- projects_to_remove = list(set(projects_old) - set(projects_new))
-
- project_payload = {}
-
- for p in projects_to_remove:
- project_payload["$"+str(p)] = None
- for p in projects_to_add:
- if p not in projects_old:
- project_payload["$+"+str(p)] = str(p)
- project_payload["$" + default_project] = None
- project_payload["$+[0]"] = default_project
payload = {}
- if project_payload:
- payload["projects"] = project_payload
+
if request.POST.get('password') and request.POST.get('password') is not '':
payload["password"] = request.POST.get('password')
+ if request.POST.getlist('map_project_name') and request.POST.getlist('map_role_name'):
+ project_param_name = request.POST.getlist('map_project_name')
+ role_param_ip = request.POST.getlist('map_role_name')
+ payload["project_role_mappings"] = []
+ for i, project in enumerate(project_param_name):
+ payload["project_role_mappings"].append({
+ 'project': project,
+ 'role': role_param_ip[i],
+ })
+
update_res = client.user_update(user.get_token(), user_id, payload)
except Exception as e:
log.exception(e)
@@ -119,7 +117,6 @@
status=update_res['data']['status'] if 'status' in update_res['data'] else 500)
else:
return __response_handler(request, {}, url=None, status=200)
- #return __response_handler(request, {}, 'users:list', to_redirect=True, )
def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):