domain_name on user and project creation
[osm/LW-UI.git] / static / src / userhandler / user_list.js
1 /*
2 Copyright 2018 EveryUP srl
3
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
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
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.
15 */
16
17 function openModalCreateUser(args) {
18
19 select2_groups = $('#projects').select2({
20 placeholder: 'Select Projects',
21 width: '100%',
22 ajax: {
23 url: args.projects_list_url,
24 dataType: 'json',
25 processResults: function (data) {
26 projects = [];
27 if (data['projects']) {
28 for (d in data['projects']) {
29 var project = data['projects'][d];
30 projects.push({ id: project['_id'], text: project['name'] })
31 }
32 }
33
34 return {
35 results: projects
36 };
37 }
38 }
39 });
40
41 select2_groups = $('#domain_name').select2({
42 placeholder: 'Select Domain',
43 width: '100%',
44 ajax: {
45 url: args.domains_list_url,
46 dataType: 'json',
47 processResults: function (data) {
48 domains_list = [];
49
50 if (data['domains']) {
51 for (d in data['domains']) {
52 var domain = data['domains'][d];
53 if( domain.endsWith(':ro') === false) {
54 domains_list.push({ id: domain, text: domain })
55 }
56
57 }
58 }
59
60 return {
61 results: domains_list
62 };
63 }
64 }
65 });
66
67 $('#modal_new_user').modal('show');
68 }
69
70 function openModalEditUserCredentials(args) {
71 var url = '/admin/users/' + args.user_id;
72 var user_projects = args.projects ? args.projects.split(',') : [];
73 $("#formEditUser").attr("action", url);
74 $("#projects_old").val(user_projects.toString());
75 $('#projects_edit').val(null).trigger('change');
76 $('#default_project_edit').val(null).trigger('change');
77 $('#edit_password').val('');
78 if (user_projects.length > 0) {
79 // Create a DOM Option and pre-select by default
80 var newOption = new Option(user_projects[0], user_projects[0], true, true);
81 // Append it to the select
82 $('#default_project_edit').append(newOption).trigger('change');
83
84 for (var d in user_projects) {
85 var project = user_projects[d];
86 // Create a DOM Option and pre-select by default
87 var newOption = new Option(project, project, true, true);
88 // Append it to the select
89 $('#projects_edit').append(newOption).trigger('change');
90 }
91
92 }
93
94
95 $('#modal_edit_user_credentials').modal('show');
96 }
97
98 function openModalEditUserRoleMap(user_id) {
99 $("#formEditUserRoleMap").attr("action", '/admin/users/' + user_id);
100 var dialog = bootbox.dialog({
101 message: '<div class="text-center"><i class="fa fa-spin fa-spinner"></i> Loading...</div>',
102 closeButton: false
103 });
104 $.ajax({
105 url: '/admin/users/' + user_id + '/info',
106 dataType: "json",
107 contentType: "application/json;charset=utf-8",
108 success: function (result) {
109 dialog.modal('hide');
110 resetMapGroup(result);
111 $('#modal_edit_user_role_map').modal('show');
112 },
113 error: function (result) {
114 dialog.modal('hide');
115 bootbox.alert("An error occurred.");
116 }
117 });
118
119 }
120
121 function resetMapGroup(args) {
122 var $formGroup = $('#modal_edit_proj_role_map_body');
123 $formGroup.empty();
124 $formGroup.append('<div class="proj-role-map-group-head">' +
125
126 '<button type="button" class="btn btn-success btn-add btn-sm">+</button>' +
127 '</div></br>');
128 if (args['project_role_mappings'] && args['project_role_mappings'].length > 0) {
129
130 for (i = 0; i < args['project_role_mappings'].length; ++i) {
131 var mapping = args['project_role_mappings'][i];
132
133 $formGroup.append('<div class="proj-role-map-group"> <div class="form-group">' +
134 '<label class="col-sm-2">Project* </label><div class="col-sm-3">' +
135 '<input name="map_project_name" value="' + mapping.project_name + '" class="form-control input-sm" required></div>' +
136 '<label class="col-sm-2">Role* </label>' +
137 '<div class="col-sm-3">' +
138 '<input name="map_role_name" value="' + mapping.role_name + '" class="form-control input-sm" required>' +
139 '</div>' +
140 '<button type="button" class="btn btn-danger btn-remove btn-sm">-</button></div></div>');
141 }
142 }
143
144
145
146
147 }
148
149 var addMapGroup = function (event) {
150 event.preventDefault();
151
152 var $formGroup = $('#modal_edit_proj_role_map_body');
153 $formGroup.append('<div class="proj-role-map-group"> <div class="form-group">' +
154 '<label class="col-sm-2">Project* </label><div class="col-sm-3">' +
155 '<input name="map_project_name" class="form-control input-sm" required></div>' +
156 '<label class="col-sm-2">Role* </label>' +
157 '<div class="col-sm-3">' +
158 '<input name="map_role_name" class="form-control input-sm" required>' +
159 '</div>' +
160 '<button type="button" class="btn btn-danger btn-remove btn-sm">-</button></div></div>');
161
162 };
163
164 var removeMapGroup = function (event) {
165 event.preventDefault();
166 var $formGroup = $(this).closest('.proj-role-map-group');
167 $formGroup.remove();
168 };
169
170 function deleteUser(user_id, name) {
171 var delete_url = '/admin/users/' + user_id + '/delete';
172 bootbox.confirm("Are you sure want to delete " + name + "?", function (confirm) {
173 if (confirm) {
174 var dialog = bootbox.dialog({
175 message: '<div class="text-center"><i class="fa fa-spin fa-spinner"></i> Loading...</div>',
176 closeButton: false
177 });
178 $.ajax({
179 url: delete_url,
180 dataType: "json",
181 contentType: "application/json;charset=utf-8",
182 success: function (result) {
183 dialog.modal('hide');
184 table.ajax.reload();
185 },
186 error: function (result) {
187 dialog.modal('hide');
188 var data = result.responseJSON;
189 var title = "Error " + (data && data.code ? data.code : 'unknown');
190 var message = data && data.detail ? data.detail : 'No detail available.';
191 bootbox.alert({
192 title: title,
193 message: message
194 });
195 }
196 });
197 }
198 })
199
200 }
201
202 function validatePswOnCreate() {
203
204 var confirm_password = document.getElementById("password2");
205 if ($("#password").val() == $("#password2").val()) {
206 $("#pwmatch").removeClass("glyphicon-remove");
207 $("#pwmatch").addClass("glyphicon-ok");
208 $("#pwmatch").css("color", "#00A41E");
209 confirm_password.setCustomValidity("");
210 } else {
211 $("#pwmatch").removeClass("glyphicon-ok");
212 $("#pwmatch").addClass("glyphicon-remove");
213 $("#pwmatch").css("color", "#FF0004");
214 confirm_password.setCustomValidity("Passwords Don't Match");
215 }
216 }
217
218 function validatePswOnEdit() {
219
220 var confirm_password = document.getElementById("edit_password2");
221 if ($("#edit_password").val() == $("#edit_password2").val()) {
222 $("#pwmatch_edit").removeClass("glyphicon-remove");
223 $("#pwmatch_edit").addClass("glyphicon-ok");
224 $("#pwmatch_edit").css("color", "#00A41E");
225 confirm_password.setCustomValidity("");
226 } else {
227 $("#pwmatch_edit").removeClass("glyphicon-ok");
228 $("#pwmatch_edit").addClass("glyphicon-remove");
229 $("#pwmatch_edit").css("color", "#FF0004");
230 confirm_password.setCustomValidity("Passwords Don't Match");
231 }
232 }
233
234 $(document).ready(function () {
235 $("#formEditUserRoleMap").submit(function (event) {
236 event.preventDefault(); //prevent default action
237 var post_url = $(this).attr("action"); //get form action url
238 var request_method = $(this).attr("method"); //get form GET/POST method
239 var form_data = new FormData(this); //Encode form elements for submission
240 $.ajax({
241 url: post_url,
242 type: request_method,
243 data: form_data,
244 headers: {
245 "Accept": 'application/json'
246 },
247 contentType: false,
248 processData: false
249 }).done(function (response, textStatus, jqXHR) {
250 table.ajax.reload();
251 $('#modal_edit_user_role_map').modal('hide');
252 }).fail(function (result) {
253 var data = result.responseJSON;
254 var title = "Error " + (data.code ? data.code : 'unknown');
255 var message = data.detail ? data.detail : 'No detail available.';
256 bootbox.alert({
257 title: title,
258 message: message
259 });
260 });
261 });
262
263 })