From c8b37207fcfd9fa3ea93904534b93c733ef78571 Mon Sep 17 00:00:00 2001 From: Ace Date: Thu, 21 Jul 2016 15:03:17 +0530 Subject: [PATCH 1/8] Fixing context issue in service-invoker --- .../public/js/invoker-lib.js | 3 +-- .../service-invoker-utility.hbs | 14 +++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/public/js/invoker-lib.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/public/js/invoker-lib.js index 30f2be1c64e..a63dcbd5b0a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/public/js/invoker-lib.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/public/js/invoker-lib.js @@ -26,10 +26,9 @@ var invokerUtil = function () { restAPIRequestDetails["requestMethod"] = requestMethod; restAPIRequestDetails["requestURL"] = requestURL; restAPIRequestDetails["requestPayload"] = JSON.stringify(requestPayload); - var appContext = devicemgtProps["appContext"]; var request = { - url: appContext + "api/invoker/execute/", + url: context + "/api/invoker/execute/", type: "POST", contentType: "application/json", data: JSON.stringify(restAPIRequestDetails), diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/service-invoker-utility.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/service-invoker-utility.hbs index 16595376577..af0fa53631b 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/service-invoker-utility.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/service-invoker-utility.hbs @@ -15,10 +15,7 @@ specific language governing permissions and limitations under the License. }} -{{#zone "bottomJs"}} - {{js "js/js.cookie.js"}} - {{js "js/invoker-lib.js"}} - +{{#zone "content"}}
@@ -34,4 +31,11 @@
-{{/zone}} \ No newline at end of file +{{/zone}} +{{#zone "bottomJs"}} + + {{js "js/js.cookie.js"}} + {{js "js/invoker-lib.js"}} +{{/zone}} From 177b7cf3dfc81ad063477ae228f852943caddfaa Mon Sep 17 00:00:00 2001 From: dilanua Date: Thu, 21 Jul 2016 17:58:59 +0530 Subject: [PATCH 2/8] Refactoring data-tables-extended-unit --- .../data-tables-extended.hbs | 3 +- .../dataTables.extended.serversidepaging.js | 281 ++++++++++++++++++ 2 files changed, 283 insertions(+), 1 deletion(-) create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.data-tables-extended/public/js/dataTables.extended.serversidepaging.js diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.data-tables-extended/data-tables-extended.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.data-tables-extended/data-tables-extended.hbs index ebe533ca136..0bb33aa8cb8 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.data-tables-extended/data-tables-extended.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.data-tables-extended/data-tables-extended.hbs @@ -19,9 +19,10 @@ {{~css "css/dataTables.bootstrap.css"}} {{~css "css/dataTables.responsive.css"}} {{/zone}} -{{~#zone "bottomJs"}} +{{#zone "bottomJs"}} {{~js "js/jquery.dataTables.min.js"}} {{~js "js/dataTables.bootstrap.js"}} {{~js "js/dataTables.responsive.min.js"}} {{~js "js/dataTables.extended.js"}} + {{~js "js/dataTables.extended.serversidepaging.js"}} {{/zone}} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.data-tables-extended/public/js/dataTables.extended.serversidepaging.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.data-tables-extended/public/js/dataTables.extended.serversidepaging.js new file mode 100644 index 00000000000..1ac4db312d2 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.data-tables-extended/public/js/dataTables.extended.serversidepaging.js @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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 + * "AS IS" 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. + */ + +/* + * ========================================================= + * data-tables extended function (Server-side Pagination) + * ========================================================= + */ + +/** + * @namespace $ + * The $ is just a function. + * It is actually an alias for the function called jQuery. + * For ex: $(this) means jQuery(this) and S.fn.x means jQuery.fn.x + */ + + $.fn.datatables_extended_serverside_paging = function (settings , url, dataFilter, + columns, fnCreatedRow, fnDrawCallback) { + var elem = $(this); + + // EMM related function + if (initiateViewOption) { + $(".viewEnabledIcon").bind("click", initiateViewOption); + } + //--- End of EMM related codes + + $(elem).DataTable( + $.extend({},{ + serverSide: true, + bSortCellsTop: true, + ajax : { + url: "/emm/api/data-tables/invoker", + data : function (params) { + var filter = ""; + var i; + for (i = 0; i < params.columns.length; i++) { + // console.log(i); + filter += "&" + params.columns[i].data + "=" + params.columns[i].search.value; + } + // console.log(filter); + params.offset = params.start; + params.limit = params.length; + params.filter = filter; + params.url = url; + }, + dataFilter: dataFilter + }, + columns: columns, + responsive: false, + autoWidth: false, + dom:'<"dataTablesTop"' + + 'f' + + '<"dataTables_toolbar">' + + '>' + + 'rt' + + '<"dataTablesBottom"' + + 'lip' + + '>', + language: { + searchPlaceholder: 'Search by Role name', + search: '' + }, + fnCreatedRow: fnCreatedRow, + "fnDrawCallback": fnDrawCallback, + initComplete: function () { + this.api().columns().every(function () { + + var column = this; + var filterColumn = $('.filter-row th', elem); + + /** + * Create & add select/text filters to each column + */ + if (filterColumn.eq(column.index()).hasClass('select-filter')) { + var select = $('') + .appendTo(filterColumn.eq(column.index()).empty()) + .on('change', function () { + var val = $.fn.dataTable.util.escapeRegex( + $(this).val() + ); + + column + //.search(val ? '^' + val + '$' : '', true, false) + .search(val ? val : '', true, false) + .draw(); + + if (filterColumn.eq(column.index()).hasClass('data-platform')) { + if (val == null || val == undefined || val == "") { + $("#operation-bar").hide(); + $("#operation-guide").show(); + } else { + $("#operation-guide").hide(); + $("#operation-bar").show(); + loadOperationBar(val); + } + } + }); + + $(column).each(function () { + if ($(column.nodes()).attr('data-search')) { + var titles = []; + column.nodes().unique().sort().each(function (d, j) { + var title = $(d).attr('data-display'); + if ($.inArray(title, titles) < 0) { + titles.push(title); + if (title !== undefined) { + select.append('') + } + } + }); + } else { + column.data().unique().sort().each(function (d, j) { + select.append('') + }); + } + }); + } else if (filterColumn.eq(column.index()).hasClass('text-filter')) { + var title = filterColumn.eq(column.index()).attr('data-for'); + $(filterColumn.eq(column.index()).empty()).html(''); + + filterColumn.eq(column.index()).find('input').on('keyup change', function () { + column.search($(this).val()).draw(); + if ($('.dataTables_empty').length > 0) { + $('.bulk-action-row').addClass("hidden"); + } else { + $('.bulk-action-row').removeClass("hidden"); + } + }); + } + + }); + + /** + * search input default styles override + */ + var search_input = $(this).closest('.dataTables_wrapper').find('div[id$=_filter] input'); + search_input.before('').removeClass('input-sm'); + + /** + * create sorting dropdown menu for list table advance operations + */ + var dropdownmenu = $(''); + $('.sort-row th', elem).each(function () { + if (!$(this).hasClass('no-sort')) { + dropdownmenu.append('
  • ' + $(this).html() + '
  • '); + } + }); + + /** + * append advance operations to list table toolbar + */ + $('.dataTable.list-table').closest('.dataTables_wrapper').find('.dataTablesTop .dataTables_toolbar').html('' + + '' + ); + + /** + * sorting dropdown menu select function + */ + $('.dataTables_wrapper .sort-list li a').click(function () { + $(this).closest('li').siblings('li').find('a').removeClass('sorting_asc').removeClass('sorting_desc'); + + var thisTable = $(this).closest('.dataTables_wrapper').find('.dataTable').dataTable(); + + if (!($(this).hasClass('sorting_asc')) && !($(this).hasClass('sorting_desc'))) { + $(this).addClass('sorting_asc'); + thisTable.fnSort([[$(this).attr('data-column'), 'asc']]); + } + else if ($(this).hasClass('sorting_asc')) { + $(this).switchClass('sorting_asc', 'sorting_desc'); + thisTable.fnSort([[$(this).attr('data-column'), 'desc']]); + } + else if ($(this).hasClass('sorting_desc')) { + $(this).switchClass('sorting_desc', 'sorting_asc'); + thisTable.fnSort([[$(this).attr('data-column'), 'asc']]); + } + }); + + var rowSelectedClass = 'DTTT_selected selected'; + + /** + * Enable/Disable selection on rows + */ + $('.dataTables_wrapper [data-click-event=toggle-selectable]').click(function () { + var button = this, + thisTable = $(this).closest('.dataTables_wrapper').find('.dataTable').dataTable(); + if ($(button).html() == 'Select') { + thisTable.addClass("table-selectable"); + $(button).addClass("active").html('Cancel'); + $(button).parent().next().children("button").removeClass("disabled"); + // EMM related code + $(".viewEnabledIcon").unbind("click"); + //--- End of EMM related codes + } else if ($(button).html() == 'Cancel') { + thisTable.removeClass("table-selectable"); + $(button).addClass("active").html('Select'); + $(button).parent().next().children().addClass("disabled"); + // EMM related function + $(".viewEnabledIcon").bind("click", initiateViewOption); + //--- End of EMM related codes + } + }); + /** + * select/deselect all rows function + */ + $('.dataTables_wrapper [data-click-event=toggle-selected]').click(function () { + var button = this, + thisTable = $(this).closest('.dataTables_wrapper').find('.dataTable').dataTable(); + if (!$(button).hasClass('disabled')) { + if ($(button).html() == 'Select All') { + thisTable.api().rows().every(function () { + $(this.node()).addClass(rowSelectedClass); + $(button).html('Deselect All'); + }); + } + else if ($(button).html() == 'Deselect All') { + thisTable.api().rows().every(function () { + $(this.node()).removeClass(rowSelectedClass); + $(button).html('Select All'); + }); + } + } + }); + + /** + * on row click select/deselect row function + */ + $('body').on('click', '[data-type=selectable]', function () { + var rowSelectedClass = 'DTTT_selected selected'; + $(this).toggleClass(rowSelectedClass); + var button = this, + thisTable = $(this).closest('.dataTables_wrapper').find('.dataTable').dataTable(); + + thisTable.api().rows().every(function () { + if (!$(this.node()).hasClass(rowSelectedClass)) { + $(button).closest('.dataTables_wrapper').find('[data-click-event=toggle-selected]').html('Select All'); + } + }); + }); + + /** + * list table list/grid view toggle function + */ + var toggleButton = $('[data-click-event=toggle-list-view]'); + toggleButton.click(function () { + if ($(this).attr('data-view') == 'grid') { + $(this).closest('.dataTables_wrapper').find('.dataTable').addClass('grid-view'); + //$(this).closest('li').hide(); + //$(this).closest('li').siblings().show(); + } + else { + $(this).closest('.dataTables_wrapper').find('.dataTable').removeClass('grid-view'); + //$(this).closest('li').hide(); + //$(this).closest('li').siblings().show(); + } + }) + } + },settings) + ); + +}; From da6ff6e7fa0c2f8f9cf2372083f0c4aaaee18991 Mon Sep 17 00:00:00 2001 From: dilanua Date: Thu, 21 Jul 2016 18:04:51 +0530 Subject: [PATCH 3/8] Refactoring user-listing page --- .../cdmf.page.users/public/js/listing.js | 274 ++++++++++-------- .../public/templates/listing.hbs | 5 + .../app/pages/cdmf.page.users/users.hbs | 7 +- .../app/pages/cdmf.page.users/users.js | 7 +- 4 files changed, 171 insertions(+), 122 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/js/listing.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/js/listing.js index 6c29b73a401..2ef13959c3a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/js/listing.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/js/listing.js @@ -1,21 +1,23 @@ /* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you 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 + * 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 - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the + * "AS IS" 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. */ +var deviceMgtAPIsBasePath = "/api/device-mgt/v1.0"; + /** * Checks if provided input is valid against RegEx input. * @@ -35,10 +37,10 @@ function inputIsValid(regExp, inputString) { $(function () { var sortableElem = '.wr-sortable'; $(sortableElem).sortable({ - beforeStop: function () { - var sortedIDs = $(this).sortable('toArray'); - } - }); + beforeStop: function () { + $(this).sortable('toArray'); + } + }); $(sortableElem).disableSelection(); }); @@ -46,11 +48,9 @@ var modalPopup = ".wr-modalpopup"; var modalPopupContainer = modalPopup + " .modalpopup-container"; var modalPopupContent = modalPopup + " .modalpopup-content"; var body = "body"; -var isInit = true; +//var isInit = true; $(".icon .text").res_text(0.2); -var resetPasswordServiceURL = "/devicemgt_admin/users/reset-password"; - /* * set popup maximum height function. */ @@ -80,11 +80,9 @@ function hidePopup() { */ function getSelectedUsernames() { var usernameList = []; - var userList = $("#user-grid").find('> tbody > tr'); + var userList = $("#user-grid").find('tr.DTTT_selected'); userList.each(function () { - if ($(this).hasClass('DTTT_selected')) { - usernameList.push($(this).attr('data-username')); - } + usernameList.push($(this).data('username')); }); return usernameList; } @@ -96,7 +94,7 @@ function getSelectedUsernames() { */ $("a.invite-user-link").click(function () { var usernameList = getSelectedUsernames(); - var inviteUserAPI = "/devicemgt_admin/users/email-invitation"; + var inviteUserAPI = deviceMgtAPIsBasePath + "/users/send-invitation"; if (usernameList.length == 0) { $(modalPopupContent).html($("#errorUsers").html()); @@ -108,20 +106,25 @@ $("a.invite-user-link").click(function () { $("a#invite-user-yes-link").click(function () { invokerUtil.post( - inviteUserAPI, - usernameList, - function () { + inviteUserAPI, + usernameList, + // The success callback + function (data, textStatus, jqXHR) { + if (jqXHR.status == 200) { $(modalPopupContent).html($('#invite-user-success-content').html()); $("a#invite-user-success-link").click(function () { hidePopup(); }); - }, - function () { - $(modalPopupContent).html($('#invite-user-error-content').html()); - $("a#invite-user-error-link").click(function () { - hidePopup(); - }); } + }, + // The error callback + function (jqXHR) { + console.log("error in invite-user API, status code: " + jqXHR.status); + $(modalPopupContent).html($('#invite-user-error-content').html()); + $("a#invite-user-error-link").click(function () { + hidePopup(); + }); + } ); }); @@ -137,16 +140,17 @@ $("a.invite-user-link").click(function () { */ function removeUser(uname, uid) { var username = uname; - var userid = uid; - var removeUserAPI = "/devicemgt_admin/users?username=" + username; + var userId = uid; + var removeUserAPI = deviceMgtAPIsBasePath + "/users/" + username; $(modalPopupContent).html($('#remove-user-modal-content').html()); showPopup(); $("a#remove-user-yes-link").click(function () { invokerUtil.delete( - removeUserAPI, - function () { - $("#" + userid).remove(); + removeUserAPI, + function (data, textStatus, jqXHR) { + if (jqXHR.status == 200) { + $("#" + userId).remove(); // get new user-list-count var newUserListCount = $(".user-list > span").length; // update user-listing-status-msg with new user-count @@ -156,13 +160,16 @@ function removeUser(uname, uid) { $("a#remove-user-success-link").click(function () { hidePopup(); }); - }, - function () { - $(modalPopupContent).html($('#remove-user-error-content').html()); - $("a#remove-user-error-link").click(function () { - hidePopup(); - }); } + }, + // The error callback + function (jqXHR) { + console.log("error in remove-user API, status code: " + jqXHR.status); + $(modalPopupContent).html($('#remove-user-error-content').html()); + $("a#remove-user-error-link").click(function () { + hidePopup(); + }); + } ); }); @@ -202,29 +209,30 @@ function resetPassword(uname) { $(errorMsgWrapper).removeClass("hidden"); } else { var resetPasswordFormData = {}; - resetPasswordFormData.username = user; - resetPasswordFormData.newPassword = window.btoa(unescape(encodeURIComponent(confirmedPassword))); + //resetPasswordFormData.username = user; + resetPasswordFormData.newPassword = unescape(confirmedPassword); + + var resetPasswordServiceURL = deviceMgtAPIsBasePath + "/admin/users/"+ user +"/credentials"; invokerUtil.post( - resetPasswordServiceURL, - resetPasswordFormData, - function (data) { // The success callback - data = JSON.parse(data); - if (data.statusCode == 201) { - $(modalPopupContent).html($('#reset-password-success-content').html()); - $("a#reset-password-success-link").click(function () { - hidePopup(); - }); - } - }, function (data) { // The error callback - if (data.statusCode == 400) { - $(errorMsg).text("Old password does not match with the provided value."); - $(errorMsgWrapper).removeClass("hidden"); - } else { - $(errorMsg).text("An unexpected error occurred. Please try again later."); - $(errorMsgWrapper).removeClass("hidden"); - } + resetPasswordServiceURL, + resetPasswordFormData, + // The success callback + function (data, textStatus, jqXHR) { + if (jqXHR.status == 200) { + $(modalPopupContent).html($('#reset-password-success-content').html()); + $("a#reset-password-success-link").click(function () { + hidePopup(); + }); } + }, + // The error callback + function (jqXHR) { + console.log("error in reset-password API, status code: " + jqXHR.status); + var payload = JSON.parse(jqXHR.responseText); + $(errorMsg).text(payload.message); + $(errorMsgWrapper).removeClass("hidden"); + } ); } }); @@ -250,7 +258,7 @@ $("#search-btn").click(function () { * when a user clicks on the list item * initial mode and with out select mode. */ -function InitiateViewOption() { +function initiateViewOption() { if ($("#can-view").val()) { $(location).attr('href', $(this).data("url")); } else { @@ -259,74 +267,112 @@ function InitiateViewOption() { } } -function loadUsers(searchParam) { - $("#loading-content").show(); - var userListing = $("#user-listing"); - var userListingSrc = userListing.attr("src"); - $.template("user-listing", userListingSrc, function (template) { - var serviceURL = "/devicemgt_admin/users"; - if (searchParam) { - serviceURL = serviceURL + "/view-users?username=" + searchParam; - } - var successCallback = function (data) { - if (!data) { - $('#ast-container').addClass('hidden'); - $('#user-listing-status-msg').text('No users are available to be displayed.'); - return; +function loadUsers() { + var loadingContentIcon = "#loading-content"; + $(loadingContentIcon).show(); + + var dataFilter = function (data) { + data = JSON.parse(data); + + var objects = []; + + $(data.users).each(function (index) { + objects.push({ + username: data.users[index].username, + firstname: data.users[index].firstname ? data.users[index].firstname: '' , + lastname: data.users[index].lastname ? data.users[index].lastname : '', + emailAddress : data.users[index].emailAddress ? data.users[index].emailAddress: '', + DT_RowId : "role-" + data.users[index].username}) + }); + + var json = { + "recordsTotal": data.count, + "recordsFiltered": data.count, + "data": objects + }; + + return JSON.stringify(json); + }; + + var fnCreatedRow = function(nRow, aData, iDataIndex) { + console.log(JSON.stringify(aData)); + $(nRow).attr('data-type', 'selectable'); + $(nRow).attr('data-username', aData["username"]); + }; + + var columns = [ + { + class: "remove-padding icon-only content-fill", + data: null, + defaultContent: + '
    ' + + '' + + '
    ' + }, + { + class: "fade-edge", + data: null, + render: function (data, type, row, meta) { + return '

    ' + data.firstname + ' ' + data.lastname + '

    '; } - var canRemove = $("#can-remove").val(); - var canEdit = $("#can-edit").val(); - var canResetPassword = $("#can-reset-password").val(); - data = JSON.parse(data); - data = data.responseContent; - var viewModel = {}; - viewModel.users = data; - for (var i = 0; i < viewModel.users.length; i++) { - viewModel.users[i].userid = viewModel.users[i].username.replace(/[^\w\s]/gi, ''); - if (canRemove) { - viewModel.users[i].canRemove = true; - } - if (canEdit) { - viewModel.users[i].canEdit = true; - } - if (canResetPassword) { - viewModel.users[i].canResetPassword = true; - } - viewModel.users[i].adminUser = $("#user-table").data("user"); + }, + { + class: "fade-edge remove-padding-top", + data: null, + render: function (data, type, row, meta) { + return ' ' + data.username; } - if (data.length > 0) { - $('#ast-container').removeClass('hidden'); - $('#user-listing-status-msg').text(""); - var content = template(viewModel); - $("#ast-container").html(content); - } else { - $('#ast-container').addClass('hidden'); - $('#user-listing-status-msg').text('No users are available to be displayed.'); + }, + { + class: "fade-edge remove-padding-top", + data: null, + render: function (data, type, row, meta) { + return ' ' + + data.emailAddress + ' '; } - $("#loading-content").hide(); - if (isInit) { - $('#user-grid').datatables_extended(); - isInit = false; + }, + { + class: "text-right content-fill text-left-on-grid-view no-wrap", + data: null, + render: function (data, type, row, meta) { + return ' ' + + '' + + '' + + ' ' + + + '' + + ' ' + + ' ' + + + ' ' + + '' + + ' ' + + '<' + + '/i> ' + + ' ' } - $(".icon .text").res_text(0.2); - }; - invokerUtil.get(serviceURL, - successCallback, - function (message) { - $('#ast-container').addClass('hidden'); - $('#user-listing-status-msg').text('Invalid search query. Try again with a valid search query'); - } - ); - }); + } + + ]; + + $('#user-grid').datatables_extended_serverside_paging(null, '/api/device-mgt/v1.0/users', dataFilter, columns, fnCreatedRow, null); + + $("#loading-content").hide(); } $(document).ready(function () { loadUsers(); $(".viewEnabledIcon").click(function () { - InitiateViewOption(); + initiateViewOption(); }); + if (!$("#can-invite").val()) { $("#invite-user-button").remove(); } -}); \ No newline at end of file +}); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/templates/listing.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/templates/listing.hbs index 6414e6de93f..db67d769730 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/templates/listing.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/templates/listing.hbs @@ -52,6 +52,11 @@ + + + + + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/users.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/users.hbs index 493f395a702..d54c3a1d558 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/users.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/users.hbs @@ -298,15 +298,13 @@ Enter new password

    - +

    Retype new password

    - +

    @@ -338,6 +336,7 @@ + {{/zone}} {{#zone "common-navigation"}} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/users.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/users.js index 74f3d583fc2..d0085bd39df 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/users.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/users.js @@ -26,13 +26,13 @@ function onRequest(context) { return options.fn(this); } }); + var page = {}; var userModule = require("/app/modules/user.js")["userModule"]; var deviceMgtProps = require("/app/conf/devicemgt-props.js").config(); + + page["adminUser"] = deviceMgtProps["adminUser"]; page["permissions"] = userModule.getUIPermissions(); - if (userModule.isAuthorized("/permission/admin/device-mgt/users/delete")) { - page["removePermitted"] = true; - } if (userModule.isAuthorized("/permission/admin/device-mgt/users/remove")) { page["removePermitted"] = true; @@ -51,6 +51,5 @@ function onRequest(context) { page["resetPasswordPermitted"] = true; } - page["adminUser"] = deviceMgtProps.adminUser; return page; } \ No newline at end of file From d79de070f17a3aaee91819a973a86629859b9b25 Mon Sep 17 00:00:00 2001 From: madhawap Date: Fri, 22 Jul 2016 10:58:50 +0530 Subject: [PATCH 4/8] fix to iOS device enrolment --- .../framework/authenticator/CertificateAuthenticator.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/CertificateAuthenticator.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/CertificateAuthenticator.java index 067405622d4..a402f18e7cc 100644 --- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/CertificateAuthenticator.java +++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/CertificateAuthenticator.java @@ -29,7 +29,7 @@ public class CertificateAuthenticator implements WebappAuthenticator { private static final String CERTIFICATE_AUTHENTICATOR = "CertificateAuth"; private static final String MUTUAL_AUTH_HEADER = "mutual-auth-header"; private static final String PROXY_MUTUAL_AUTH_HEADER = "proxy-mutual-auth-header"; - private static final String CERTIFICATE_VERIFICATION_HEADER = "certificate-verification-header"; + private static final String CERTIFICATE_VERIFICATION_HEADER = "Mdm-Signature"; private static final String CLIENT_CERTIFICATE_ATTRIBUTE = "javax.servlet.request.X509Certificate"; @Override @@ -55,7 +55,6 @@ public class CertificateAuthenticator implements WebappAuthenticator { authenticationInfo.setStatus(Status.CONTINUE); } - String certVerificationHeader = request.getContext().findParameter(CERTIFICATE_VERIFICATION_HEADER); try { // When there is a load balancer terminating mutual SSL, it should pass this header along and // as the value of this header, the client certificate subject dn should be passed. @@ -78,7 +77,7 @@ public class CertificateAuthenticator implements WebappAuthenticator { } } else if (request.getHeader(CERTIFICATE_VERIFICATION_HEADER) != null) { - String certHeader = request.getHeader(certVerificationHeader); + String certHeader = request.getHeader(CERTIFICATE_VERIFICATION_HEADER); if (certHeader != null && AuthenticatorFrameworkDataHolder.getInstance().getCertificateManagementService(). verifySignature(certHeader)) { From 74658d1e8519d9bf7837fd1f606b0be14d4f42a2 Mon Sep 17 00:00:00 2001 From: hasuniea Date: Fri, 22 Jul 2016 11:42:55 +0530 Subject: [PATCH 5/8] adding certificate scripts --- .../src/main/resources/dbscripts/cdm/certs/h2.sql | 8 ++++++++ .../src/main/resources/dbscripts/cdm/certs/mssql.sql | 8 ++++++++ .../src/main/resources/dbscripts/cdm/certs/mysql.sql | 8 ++++++++ .../src/main/resources/dbscripts/cdm/certs/oracle.sql | 8 ++++++++ .../main/resources/dbscripts/cdm/certs/postgresql.sql | 7 +++++++ .../src/main/resources/p2.inf | 3 ++- .../src/main/resources/dbscripts/cdm/h2.sql | 9 --------- .../src/main/resources/dbscripts/cdm/mssql.sql | 9 --------- .../src/main/resources/dbscripts/cdm/mysql.sql | 9 --------- .../src/main/resources/dbscripts/cdm/oracle.sql | 10 ---------- .../src/main/resources/dbscripts/cdm/postgresql.sql | 8 -------- 11 files changed, 41 insertions(+), 46 deletions(-) create mode 100644 features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/h2.sql create mode 100644 features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/mssql.sql create mode 100644 features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/mysql.sql create mode 100644 features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/oracle.sql create mode 100644 features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/postgresql.sql diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/h2.sql b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/h2.sql new file mode 100644 index 00000000000..6705b595f0e --- /dev/null +++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/h2.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE ( + ID INTEGER auto_increment NOT NULL, + SERIAL_NUMBER VARCHAR(500) DEFAULT NULL, + CERTIFICATE BLOB DEFAULT NULL, + TENANT_ID INTEGER DEFAULT 0, + USERNAME VARCHAR(500) DEFAULT NULL, + PRIMARY KEY (ID) +); \ No newline at end of file diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/mssql.sql b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/mssql.sql new file mode 100644 index 00000000000..888ee030c87 --- /dev/null +++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/mssql.sql @@ -0,0 +1,8 @@ +CREATE TABLE DM_DEVICE_CERTIFICATE ( + ID INTEGER IDENTITY NOT NULL, + SERIAL_NUMBER VARCHAR(500) DEFAULT NULL, + CERTIFICATE VARBINARY(max) DEFAULT NULL, + TENANT_ID INTEGER DEFAULT 0, + USERNAME VARCHAR(500) DEFAULT NULL, + PRIMARY KEY (ID) +); diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/mysql.sql b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/mysql.sql new file mode 100644 index 00000000000..3bdf0a5a176 --- /dev/null +++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/mysql.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE ( + ID INTEGER auto_increment NOT NULL, + SERIAL_NUMBER VARCHAR(500) DEFAULT NULL, + CERTIFICATE BLOB DEFAULT NULL, + TENANT_ID INTEGER DEFAULT 0, + USERNAME VARCHAR(500) DEFAULT NULL, + PRIMARY KEY (ID) +)ENGINE = InnoDB; \ No newline at end of file diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/oracle.sql b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/oracle.sql new file mode 100644 index 00000000000..75732199f61 --- /dev/null +++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/oracle.sql @@ -0,0 +1,8 @@ +CREATE TABLE DM_DEVICE_CERTIFICATE ( + ID NUMBER(10) NOT NULL, + SERIAL_NUMBER VARCHAR2(500) DEFAULT NULL, + CERTIFICATE BLOB DEFAULT NULL, + TENANT_ID NUMBER(10) DEFAULT 0, + USERNAME VARCHAR2(500) DEFAULT NULL, + PRIMARY KEY (ID) +) \ No newline at end of file diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/postgresql.sql b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/postgresql.sql new file mode 100644 index 00000000000..c23791abf04 --- /dev/null +++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/dbscripts/cdm/certs/postgresql.sql @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE ( + ID BIGSERIAL NOT NULL PRIMARY KEY, + SERIAL_NUMBER VARCHAR(500) DEFAULT NULL, + CERTIFICATE BYTEA DEFAULT NULL, + TENANT_ID INTEGER DEFAULT 0, + USERNAME VARCHAR(500) DEFAULT NULL +); \ No newline at end of file diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/p2.inf b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/p2.inf index 7bae1dd04a1..44e5960b63c 100644 --- a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/p2.inf +++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/src/main/resources/p2.inf @@ -1,3 +1,4 @@ instructions.configure = \ org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.certificate.mgt.server_${feature.version}/conf/wso2certs.jks,target:${installFolder}/../../resources/security/wso2certs.jks,overwrite:true);\ -org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.certificate.mgt.server_${feature.version}/conf/certificate-config.xml,target:${installFolder}/../../conf/certificate-config.xml,overwrite:true);\ \ No newline at end of file +org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.certificate.mgt.server_${feature.version}/conf/certificate-config.xml,target:${installFolder}/../../conf/certificate-config.xml,overwrite:true);\ +org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.certificate.mgt.server_${feature.version}/dbscripts/cdm/,target:${installFolder}/../../../dbscripts/cdm,overwrite:true);\ \ No newline at end of file diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql index 3e40d109bd7..e9894b79977 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql @@ -17,15 +17,6 @@ CREATE TABLE IF NOT EXISTS DM_GROUP ( PRIMARY KEY (ID) ); -CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE ( - ID INTEGER auto_increment NOT NULL, - SERIAL_NUMBER VARCHAR(500) DEFAULT NULL, - CERTIFICATE BLOB DEFAULT NULL, - TENANT_ID INTEGER DEFAULT 0, - USERNAME VARCHAR(500) DEFAULT NULL, - PRIMARY KEY (ID) -); - CREATE TABLE IF NOT EXISTS DM_DEVICE ( ID INTEGER auto_increment NOT NULL, DESCRIPTION TEXT DEFAULT NULL, diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql index a67d67f9e00..66ce12dc875 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql @@ -17,15 +17,6 @@ CREATE TABLE DM_GROUP ( PRIMARY KEY (ID) ); -CREATE TABLE DM_DEVICE_CERTIFICATE ( - ID INTEGER IDENTITY NOT NULL, - SERIAL_NUMBER VARCHAR(500) DEFAULT NULL, - CERTIFICATE VARBINARY(max) DEFAULT NULL, - TENANT_ID INTEGER DEFAULT 0, - USERNAME VARCHAR(500) DEFAULT NULL, - PRIMARY KEY (ID) -); - CREATE TABLE DM_DEVICE ( ID INTEGER identity NOT NULL, DESCRIPTION VARCHAR(max) DEFAULT NULL, diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mysql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mysql.sql index 40535450acf..1d2013cbc42 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mysql.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mysql.sql @@ -6,15 +6,6 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE ( PRIMARY KEY (ID) )ENGINE = InnoDB; -CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE ( - ID INTEGER auto_increment NOT NULL, - SERIAL_NUMBER VARCHAR(500) DEFAULT NULL, - CERTIFICATE BLOB DEFAULT NULL, - TENANT_ID INTEGER DEFAULT 0, - USERNAME VARCHAR(500) DEFAULT NULL, - PRIMARY KEY (ID) -)ENGINE = InnoDB; - CREATE TABLE IF NOT EXISTS DM_DEVICE ( ID INTEGER AUTO_INCREMENT NOT NULL, DESCRIPTION TEXT DEFAULT NULL, diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql index 41f539cee05..18ed9c2abe4 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql @@ -44,16 +44,6 @@ WHEN (NEW.ID IS NULL) SELECT DM_GROUP_seq.NEXTVAL INTO :NEW.ID FROM DUAL; END; / - -CREATE TABLE DM_DEVICE_CERTIFICATE ( - ID NUMBER(10) NOT NULL, - SERIAL_NUMBER VARCHAR2(500) DEFAULT NULL, - CERTIFICATE BLOB DEFAULT NULL, - TENANT_ID NUMBER(10) DEFAULT 0, - USERNAME VARCHAR2(500) DEFAULT NULL, - PRIMARY KEY (ID) -) -/ -- Generate ID using sequence and trigger CREATE SEQUENCE DM_DEVICE_CERTIFICATE_seq START WITH 1 INCREMENT BY 1 NOCACHE / diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/postgresql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/postgresql.sql index c29d18e0214..2da059d3a77 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/postgresql.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/postgresql.sql @@ -5,14 +5,6 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE ( SHARED_WITH_ALL_TENANTS BOOLEAN NOT NULL DEFAULT FALSE ); -CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE ( - ID BIGSERIAL NOT NULL PRIMARY KEY, - SERIAL_NUMBER VARCHAR(500) DEFAULT NULL, - CERTIFICATE BYTEA DEFAULT NULL, - TENANT_ID INTEGER DEFAULT 0, - USERNAME VARCHAR(500) DEFAULT NULL -); - CREATE TABLE IF NOT EXISTS DM_DEVICE ( ID BIGSERIAL NOT NULL PRIMARY KEY, DESCRIPTION TEXT DEFAULT NULL, From b636738be30c767471d4ee76c6f9985923164c04 Mon Sep 17 00:00:00 2001 From: dilanua Date: Fri, 22 Jul 2016 11:54:35 +0530 Subject: [PATCH 6/8] Fixing issue: user-list not getting updated upon user-removal --- .../jaggeryapps/devicemgt/app/modules/user.js | 4 ++-- .../pages/cdmf.page.users/public/js/listing.js | 17 ++++++----------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js index b0eb98c5548..2a1eccdbed0 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js @@ -17,14 +17,14 @@ */ /* - * This module contains user and roles related functionality + * This module contains user and roles related functionality. */ var userModule = function () { var log = new Log("/app/modules/user.js"); var constants = require("/app/modules/constants.js"); var utility = require("/app/modules/utility.js")["utility"]; - var devicemgtProps = require('/app/conf/devicemgt-props.js').config(); + var devicemgtProps = require("/app/conf/devicemgt-props.js").config(); var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker; /* Initializing user manager */ diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/js/listing.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/js/listing.js index 2ef13959c3a..dfc9d6acd9f 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/js/listing.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.users/public/js/listing.js @@ -138,9 +138,7 @@ $("a.invite-user-link").click(function () { * when a user clicks on "Remove" link * on User Listing page in WSO2 Devicemgt Console. */ -function removeUser(uname, uid) { - var username = uname; - var userId = uid; +function removeUser(username) { var removeUserAPI = deviceMgtAPIsBasePath + "/users/" + username; $(modalPopupContent).html($('#remove-user-modal-content').html()); showPopup(); @@ -148,21 +146,18 @@ function removeUser(uname, uid) { $("a#remove-user-yes-link").click(function () { invokerUtil.delete( removeUserAPI, + // success callback function (data, textStatus, jqXHR) { if (jqXHR.status == 200) { - $("#" + userId).remove(); - // get new user-list-count - var newUserListCount = $(".user-list > span").length; - // update user-listing-status-msg with new user-count - $("#user-listing-status-msg").text("Total number of Users found : " + newUserListCount); // update modal-content with success message $(modalPopupContent).html($('#remove-user-success-content').html()); $("a#remove-user-success-link").click(function () { hidePopup(); + location.reload(); }); } }, - // The error callback + // error callback function (jqXHR) { console.log("error in remove-user API, status code: " + jqXHR.status); $(modalPopupContent).html($('#remove-user-error-content').html()); @@ -282,7 +277,7 @@ function loadUsers() { firstname: data.users[index].firstname ? data.users[index].firstname: '' , lastname: data.users[index].lastname ? data.users[index].lastname : '', emailAddress : data.users[index].emailAddress ? data.users[index].emailAddress: '', - DT_RowId : "role-" + data.users[index].username}) + DT_RowId : "user-" + data.users[index].username}) }); var json = { @@ -360,7 +355,7 @@ function loadUsers() { ]; - $('#user-grid').datatables_extended_serverside_paging(null, '/api/device-mgt/v1.0/users', dataFilter, columns, fnCreatedRow, null); + $("#user-grid").datatables_extended_serverside_paging(null, '/api/device-mgt/v1.0/users', dataFilter, columns, fnCreatedRow, null); $("#loading-content").hide(); } From 24d846a328ba221da1bbec633c8fff464b0d8b84 Mon Sep 17 00:00:00 2001 From: dilanua Date: Fri, 22 Jul 2016 15:25:33 +0530 Subject: [PATCH 7/8] Refactoring user-create page and related modules --- .../jaggeryapps/devicemgt/app/modules/user.js | 502 +++++++++--------- .../pages/cdmf.page.user.create/create.hbs | 16 +- .../app/pages/cdmf.page.user.create/create.js | 24 +- .../pages/cdmf.page.user.create/create.json | 2 +- .../public/js/bottomJs.js | 127 +++-- 5 files changed, 340 insertions(+), 331 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js index 2a1eccdbed0..0a3d1573908 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js @@ -1,17 +1,17 @@ /* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you 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 + * 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 - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the + * "AS IS" 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. */ @@ -25,32 +25,30 @@ var userModule = function () { var constants = require("/app/modules/constants.js"); var utility = require("/app/modules/utility.js")["utility"]; var devicemgtProps = require("/app/conf/devicemgt-props.js").config(); - var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker; + var serviceInvokers = require("/app/modules/backend-service-invoker.js")["backendServiceInvoker"]; /* Initializing user manager */ - var carbon = require('carbon'); - var tenantId = carbon.server.tenantId(); - var url = carbon.server.address('https') + "/admin/services"; + var carbon = require("carbon"); + var url = carbon.server.address("https") + "/admin/services"; var server = new carbon.server.Server(url); - var userManager = new carbon.user.UserManager(server, tenantId); - var deviceManagementService = utility.getDeviceManagementService(); - var EmailMessageProperties = Packages.org.wso2.carbon.device.mgt.common.EmailMessageProperties; + //var deviceManagementService = utility.getDeviceManagementService(); + //var EmailMessageProperties = Packages.org.wso2.carbon.device.mgt.common.EmailMessageProperties; var publicMethods = {}; var privateMethods = {}; /** - * Get the carbon user object from the session. If not found - it will throw a user not found error. - * @returns {carbon user object} + * Get the carbon user object from the session. If not found - it will throw a user not found error. + * @returns {object} carbon user object */ privateMethods.getCarbonUser = function () { - var carbon = require('carbon'); - var carbonUser = session.get(constants.USER_SESSION_KEY); - var utility = require('/app/modules/utility.js').utility; + var carbon = require("carbon"); + var carbonUser = session.get(constants["USER_SESSION_KEY"]); + var utility = require("/modules/utility.js")["utility"]; if (!carbonUser) { log.error("User object was not found in the session"); - throw constants.ERRORS.USER_NOT_FOUND; + throw constants["ERRORS"]["USER_NOT_FOUND"]; } return carbonUser; }; @@ -59,31 +57,25 @@ var userModule = function () { * Only GET method is implemented for now since there are no other type of methods used this method. * @param url - URL to call the backend without the host * @param method - HTTP Method (GET, POST) - * @returns { - * 'status': 'success'|'error', - * 'content': {} - * } + * @returns An object with 'status': 'success'|'error', 'content': {} */ privateMethods.callBackend = function (url, method) { - if (constants.HTTP_GET == method) { - var response = serviceInvokers.XMLHttp.get(url, function (responsePayload) { - var response = {}; - response.content = responsePayload["responseContent"]; - if (responsePayload["responseContent"] == null && responsePayload != null) { - response.content = responsePayload; + if (constants["HTTP_GET"] == method) { + return serviceInvokers.XMLHttp.get(url, + function (backendResponse) { + var response = {}; + response.content = backendResponse.responseText; + if (backendResponse.status == 200) { + response.status = "success"; + } else if (backendResponse.status == 400 || backendResponse.status == 401 || + backendResponse.status == 404 || backendResponse.status == 500) { + response.status = "error"; + } + return response; } - response.status = "success"; - return response; - }, - function (responsePayload) { - var response = {}; - response.content = responsePayload; - response.status = "error"; - return response; - }); - return response; + ); } else { - log.error("Programming error : This method only support HTTP GET requests."); + log.error("Runtime error : This method only support HTTP GET requests."); } }; @@ -101,43 +93,43 @@ var userModule = function () { * * @returns {number} HTTP Status code 201 if succeeded, 409 if user already exists */ - publicMethods.addUser = function (username, firstname, lastname, emailAddress, userRoles) { - var statusCode, carbon = require('carbon'); - var carbonUser = session.get(constants.USER_SESSION_KEY); - var utility = require('/app/modules/utility.js').utility; - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants.ERRORS.USER_NOT_FOUND; - } - try { - utility.startTenantFlow(carbonUser); - var tenantId = carbon.server.tenantId(); - var userManager = new carbon.user.UserManager(server, tenantId); - if (userManager.userExists(username)) { - if (log.isDebugEnabled()) { - log.debug("A user with name '" + username + "' already exists."); - } - // http status code 409 refers to - conflict. - statusCode = 409; - } else { - var initialUserPassword = privateMethods.generateInitialUserPassword(); - var defaultUserClaims = privateMethods.buildDefaultUserClaims(firstname, lastname, emailAddress); - - userManager.addUser(username, initialUserPassword, userRoles, defaultUserClaims, "default"); - privateMethods.inviteUserToEnroll(username, initialUserPassword); - if (log.isDebugEnabled()) { - log.debug("A new user with name '" + username + "' was created."); - } - // http status code 201 refers to - created. - statusCode = 201; - } - return statusCode; - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; +// publicMethods.addUser = function (username, firstname, lastname, emailAddress, userRoles) { +// var statusCode, carbon = require("carbon"); +// var carbonUser = session.get(constants["USER_SESSION_KEY"]); +// var utility = require("/app/modules/utility.js")["utility"]; +// if (!carbonUser) { +// log.error("User object was not found in the session"); +// throw constants["ERRORS"]["USER_NOT_FOUND"]; +// } +// try { +// utility.startTenantFlow(carbonUser); +// var tenantId = carbon.server.tenantId(); +// var userManager = new carbon.user.UserManager(server, tenantId); +// if (userManager.userExists(username)) { +// if (log.isDebugEnabled()) { +// log.debug("A user with name '" + username + "' already exists."); +// } +// // http status code 409 refers to - conflict. +// statusCode = 409; +// } else { +// var initialUserPassword = privateMethods.generateInitialUserPassword(); +// var defaultUserClaims = privateMethods.buildDefaultUserClaims(firstname, lastname, emailAddress); +// +// userManager.addUser(username, initialUserPassword, userRoles, defaultUserClaims, "default"); +// privateMethods.inviteUserToEnroll(username, initialUserPassword); +// if (log.isDebugEnabled()) { +// log.debug("A new user with name '" + username + "' was created."); +// } +// // http status code 201 refers to - created. +// statusCode = 201; +// } +// return statusCode; +// } catch (e) { +// throw e; +// } finally { +// utility.endTenantFlow(); +// } +// }; /** * Register user to dc-user-store. @@ -188,39 +180,39 @@ var userModule = function () { * @param username Username of the user * @returns {number} HTTP Status code 200 if succeeded, 409 if the user does not exist */ - publicMethods.removeUser = function (username) { - var statusCode, carbon = require('carbon'); - var carbonUser = session.get(constants.USER_SESSION_KEY); - var utility = require('/app/modules/utility.js').utility; - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants.ERRORS.USER_NOT_FOUND; - } - try { - utility.startTenantFlow(carbonUser); - var tenantId = carbon.server.tenantId(); - var userManager = new carbon.user.UserManager(server, tenantId); - if (userManager.userExists(username)) { - userManager.removeUser(username); - if (log.isDebugEnabled()) { - log.debug("An existing user with name '" + username + "' was removed."); - } - // http status code 200 refers to - success. - statusCode = 200; - } else { - if (log.isDebugEnabled()) { - log.debug("A user with name '" + username + "' does not exist to remove."); - } - // http status code 409 refers to - conflict. - statusCode = 409; - } - return statusCode; - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; +// publicMethods.removeUser = function (username) { +// var statusCode, carbon = require('carbon'); +// var carbonUser = session.get(constants.USER_SESSION_KEY); +// var utility = require("/app/modules/utility.js").utility; +// if (!carbonUser) { +// log.error("User object was not found in the session"); +// throw constants.ERRORS.USER_NOT_FOUND; +// } +// try { +// utility.startTenantFlow(carbonUser); +// var tenantId = carbon.server.tenantId(); +// var userManager = new carbon.user.UserManager(server, tenantId); +// if (userManager.userExists(username)) { +// userManager.removeUser(username); +// if (log.isDebugEnabled()) { +// log.debug("An existing user with name '" + username + "' was removed."); +// } +// // http status code 200 refers to - success. +// statusCode = 200; +// } else { +// if (log.isDebugEnabled()) { +// log.debug("A user with name '" + username + "' does not exist to remove."); +// } +// // http status code 409 refers to - conflict. +// statusCode = 409; +// } +// return statusCode; +// } catch (e) { +// throw e; +// } finally { +// utility.endTenantFlow(); +// } +// }; /* @Deprecated @@ -232,25 +224,25 @@ var userModule = function () { * * @returns {string} Initial User Password */ - privateMethods.generateInitialUserPassword = function () { - var passwordLength = 6; - //defining the pool of characters to be used for initial password generation - var lowerCaseCharset = "abcdefghijklmnopqrstuvwxyz"; - var upperCaseCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - var numericCharset = "0123456789"; - - var totalCharset = lowerCaseCharset + upperCaseCharset + numericCharset; - var totalCharsetLength = totalCharset.length; - - var initialUserPassword = ""; - for (var i = 0; i < passwordLength; ++i) { - initialUserPassword += totalCharset.charAt(Math.floor(Math.random() * totalCharsetLength)); - } - if (log.isDebugEnabled()) { - log.debug("Initial password created for new user : " + initialUserPassword); - } - return String(initialUserPassword); - }; +// privateMethods.generateInitialUserPassword = function () { +// var passwordLength = 6; +// //defining the pool of characters to be used for initial password generation +// var lowerCaseCharset = "abcdefghijklmnopqrstuvwxyz"; +// var upperCaseCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +// var numericCharset = "0123456789"; +// +// var totalCharset = lowerCaseCharset + upperCaseCharset + numericCharset; +// var totalCharsetLength = totalCharset.length; +// +// var initialUserPassword = ""; +// for (var i = 0; i < passwordLength; ++i) { +// initialUserPassword += totalCharset.charAt(Math.floor(Math.random() * totalCharsetLength)); +// } +// if (log.isDebugEnabled()) { +// log.debug("Initial password created for new user : " + initialUserPassword); +// } +// return String(initialUserPassword); +// }; /* @Deprecated @@ -264,17 +256,17 @@ var userModule = function () { * * @returns {Object} Default user claims to be provided */ - privateMethods.buildDefaultUserClaims = function (firstname, lastname, emailAddress) { - var defaultUserClaims = { - "http://wso2.org/claims/givenname": firstname, - "http://wso2.org/claims/lastname": lastname, - "http://wso2.org/claims/emailaddress": emailAddress - }; - if (log.isDebugEnabled()) { - log.debug("ClaimMap created for new user : " + stringify(defaultUserClaims)); - } - return defaultUserClaims; - }; +// privateMethods.buildDefaultUserClaims = function (firstname, lastname, emailAddress) { +// var defaultUserClaims = { +// "http://wso2.org/claims/givenname": firstname, +// "http://wso2.org/claims/lastname": lastname, +// "http://wso2.org/claims/emailaddress": emailAddress +// }; +// if (log.isDebugEnabled()) { +// log.debug("ClaimMap created for new user : " + stringify(defaultUserClaims)); +// } +// return defaultUserClaims; +// }; /* @Deprecated @@ -286,89 +278,89 @@ var userModule = function () { * @param username Username of the user * @param password Password of the user */ - privateMethods.inviteUserToEnroll = function (username, password) { - var carbon = require('carbon'); - var enrollmentURL = devicemgtProps.generalConfig.host + devicemgtProps.webAgentContext + "download-agent"; - var carbonUser = session.get(constants.USER_SESSION_KEY); - var utility = require('/app/modules/utility.js').utility; - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants.ERRORS.USER_NOT_FOUND; - } - //var user = userManagementService.getUser(username, carbonUser.tenantId); - try { - utility.startTenantFlow(carbonUser); - var tenantId = carbon.server.tenantId(); - var userManager = new carbon.user.UserManager(server, tenantId); - var emailTo = []; - var user = userManager.getUser(username); - emailTo[0] = privateMethods.getEmail(username, userManager); - var emailMessageProperties = new EmailMessageProperties(); - emailMessageProperties.setMailTo(emailTo); - emailMessageProperties.setFirstName(privateMethods.getFirstName(username, userManager)); - emailMessageProperties.setUserName(username); - emailMessageProperties.setPassword(password); - emailMessageProperties.setEnrolmentUrl(enrollmentURL); - deviceManagementService.sendRegistrationEmail(emailMessageProperties); - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; +// privateMethods.inviteUserToEnroll = function (username, password) { +// var carbon = require('carbon'); +// var enrollmentURL = devicemgtProps.generalConfig.host + devicemgtProps.webAgentContext + "download-agent"; +// var carbonUser = session.get(constants.USER_SESSION_KEY); +// var utility = require('/app/modules/utility.js').utility; +// if (!carbonUser) { +// log.error("User object was not found in the session"); +// throw constants.ERRORS.USER_NOT_FOUND; +// } +// //var user = userManagementService.getUser(username, carbonUser.tenantId); +// try { +// utility.startTenantFlow(carbonUser); +// var tenantId = carbon.server.tenantId(); +// var userManager = new carbon.user.UserManager(server, tenantId); +// var emailTo = []; +// var user = userManager.getUser(username); +// emailTo[0] = privateMethods.getEmail(username, userManager); +// var emailMessageProperties = new EmailMessageProperties(); +// emailMessageProperties.setMailTo(emailTo); +// emailMessageProperties.setFirstName(privateMethods.getFirstName(username, userManager)); +// emailMessageProperties.setUserName(username); +// emailMessageProperties.setPassword(password); +// emailMessageProperties.setEnrolmentUrl(enrollmentURL); +// deviceManagementService.sendRegistrationEmail(emailMessageProperties); +// } catch (e) { +// throw e; +// } finally { +// utility.endTenantFlow(); +// } +// }; /* @Deprecated */ - privateMethods.getEmail = function (username, userManager) { - return userManager.getClaim(username, "http://wso2.org/claims/emailaddress", null) - }; +// privateMethods.getEmail = function (username, userManager) { +// return userManager.getClaim(username, "http://wso2.org/claims/emailaddress", null) +// }; /* @Deprecated */ - privateMethods.getFirstName = function (username, userManager) { - return userManager.getClaim(username, "http://wso2.org/claims/givenname", null) - }; +// privateMethods.getFirstName = function (username, userManager) { +// return userManager.getClaim(username, "http://wso2.org/claims/givenname", null) +// }; /* @Deprecated */ - privateMethods.getLastName = function (username, userManager) { - return userManager.getClaim(username, "http://wso2.org/claims/lastname", null) - }; +// privateMethods.getLastName = function (username, userManager) { +// return userManager.getClaim(username, "http://wso2.org/claims/lastname", null) +// }; /* @Deprecated */ - publicMethods.inviteUser = function (username) { - var carbonUser = session.get(constants.USER_SESSION_KEY); - var utility = require('/app/modules/utility.js').utility; - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants.ERRORS.USER_NOT_FOUND; - } - var enrollmentURL = devicemgtProps.generalConfig.host + devicemgtProps.webAgentContext + "download-agent"; - - try { - utility.startTenantFlow(carbonUser); - var tenantId = carbon.server.tenantId(); - var userManager = new carbon.user.UserManager(server, tenantId); - var user = userManager.getUser(username); - var emailProperties = new EmailMessageProperties(); - var emailTo = []; - emailTo[0] = privateMethods.getEmail(username, userManager); - emailProperties.setMailTo(emailTo); - //emailProperties.setFirstName(user.getFirstName()); - emailProperties.setFirstName(privateMethods.getFirstName(username, userManager)); - emailProperties.setEnrolmentUrl(enrollmentURL); - deviceManagementService.sendEnrolmentInvitation(emailProperties); - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; +// publicMethods.inviteUser = function (username) { +// var carbonUser = session.get(constants.USER_SESSION_KEY); +// var utility = require('/app/modules/utility.js').utility; +// if (!carbonUser) { +// log.error("User object was not found in the session"); +// throw constants.ERRORS.USER_NOT_FOUND; +// } +// var enrollmentURL = devicemgtProps.generalConfig.host + devicemgtProps.webAgentContext + "download-agent"; +// +// try { +// utility.startTenantFlow(carbonUser); +// var tenantId = carbon.server.tenantId(); +// var userManager = new carbon.user.UserManager(server, tenantId); +// var user = userManager.getUser(username); +// var emailProperties = new EmailMessageProperties(); +// var emailTo = []; +// emailTo[0] = privateMethods.getEmail(username, userManager); +// emailProperties.setMailTo(emailTo); +// //emailProperties.setFirstName(user.getFirstName()); +// emailProperties.setFirstName(privateMethods.getFirstName(username, userManager)); +// emailProperties.setEnrolmentUrl(enrollmentURL); +// deviceManagementService.sendEnrolmentInvitation(emailProperties); +// } catch (e) { +// throw e; +// } finally { +// utility.endTenantFlow(); +// } +// }; /* @Updated @@ -382,9 +374,12 @@ var userModule = function () { } try { utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/users"; - return privateMethods.callBackend(url, constants.HTTP_GET); - + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users?offset=0&limit=100"; + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + if (response.status == "success") { + response.content = parse(response.content).users; + } + return response; } catch (e) { throw e; } finally { @@ -395,22 +390,16 @@ var userModule = function () { /** * Return a User object from the backend by calling the JAX-RS * @param username - * @returns { - * 'status': 'success'|'error', - * 'content': { - "username": "abc", - "firstname": "abc", - "lastname": "efj", - "emailAddress": "abc@abc.com" - } - * } + * @returns {object} a response object with status and content on success. */ publicMethods.getUser = function (username) { var carbonUser = privateMethods.getCarbonUser(); try { utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/users/view?username=" + username; - var response = privateMethods.callBackend(url, constants.HTTP_GET); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" + + encodeURIComponent(username); + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + response["content"] = parse(response.content); response["userDomain"] = carbonUser.domain; return response; } catch (e) { @@ -419,18 +408,19 @@ var userModule = function () { utility.endTenantFlow(); } }; + /** - * TODO: comment + * Returns a set of roles assigned to a particular user * @param username - * @returns {*} + * @returns {object} a response object with status and content on success. */ publicMethods.getRolesByUsername = function (username) { var carbonUser = privateMethods.getCarbonUser(); try { utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/users/roles?username=" + username; - var response = privateMethods.callBackend(url, constants.HTTP_GET); - return response; + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" + + encodeURIComponent(username) + "/roles"; + return privateMethods.callBackend(url, constants["HTTP_GET"]); } catch (e) { throw e; } finally { @@ -450,8 +440,8 @@ var userModule = function () { } try { utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/users/users-by-username"; - return privateMethods.callBackend(url, constants.HTTP_GET) + var url = devicemgtProps["httpsURL"] + "/mdm-admin/users/users-by-username"; + return privateMethods.callBackend(url, constants["HTTP_GET"]); } catch (e) { throw e; } finally { @@ -467,15 +457,19 @@ var userModule = function () { */ publicMethods.getRoles = function () { var carbonUser = session.get(constants["USER_SESSION_KEY"]); - var utility = require('/app/modules/utility.js')["utility"]; + var utility = require("/app/modules/utility.js")["utility"]; if (!carbonUser) { log.error("User object was not found in the session"); throw constants["ERRORS"]["USER_NOT_FOUND"]; } try { utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/roles"; - return privateMethods.callBackend(url, constants.HTTP_GET); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/roles"; + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + if (response.status == "success") { + response.content = parse(response.content).roles; + } + return response; } catch (e) { throw e; } finally { @@ -488,18 +482,24 @@ var userModule = function () { */ /** * Get User Roles from user store (Internal roles not included). + * @returns {object} a response object with status and content on success. */ - publicMethods.getRolesByUserStore = function (userStore) { + publicMethods.getRolesByUserStore = function () { + var ROLE_LIMIT = devicemgtProps["pageSize"]; var carbonUser = session.get(constants["USER_SESSION_KEY"]); - var utility = require('/app/modules/utility.js')["utility"]; + var utility = require("/app/modules/utility.js")["utility"]; if (!carbonUser) { log.error("User object was not found in the session"); throw constants["ERRORS"]["USER_NOT_FOUND"]; } try { utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/roles/" + encodeURIComponent(userStore); - return privateMethods.callBackend(url, constants.HTTP_GET); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/roles?limit=" + ROLE_LIMIT; + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + if (response.status == "success") { + response.content = parse(response.content).roles; + } + return response; } catch (e) { throw e; } finally { @@ -510,17 +510,22 @@ var userModule = function () { /** * Get Platforms. */ + //TODO Move this piece of logic out of user.js to somewhere else appropriate. publicMethods.getPlatforms = function () { var carbonUser = session.get(constants["USER_SESSION_KEY"]); - var utility = require('/app/modules/utility.js')["utility"]; + var utility = require("/app/modules/utility.js")["utility"]; if (!carbonUser) { log.error("User object was not found in the session"); throw constants["ERRORS"]["USER_NOT_FOUND"]; } try { utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/types"; - return privateMethods.callBackend(url, constants.HTTP_GET); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/admin/device-types"; + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + if (response.status == "success") { + response.content = parse(response.content); + } + return response; } catch (e) { throw e; } finally { @@ -535,15 +540,17 @@ var userModule = function () { */ publicMethods.getRole = function (roleName) { var carbonUser = session.get(constants["USER_SESSION_KEY"]); - var utility = require('/app/modules/utility.js')["utility"]; + var utility = require("/app/modules/utility.js")["utility"]; if (!carbonUser) { log.error("User object was not found in the session"); throw constants["ERRORS"]["USER_NOT_FOUND"]; } try { utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/roles/role?rolename=" + encodeURIComponent(roleName); - var response = privateMethods.callBackend(url, constants.HTTP_GET); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + + "/roles/" + encodeURIComponent(roleName); + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + response.content = parse(response.content); return response; } catch (e) { throw e; @@ -776,24 +783,29 @@ var userModule = function () { * retrieve secondary user stores. * This needs Authentication since the method access admin services. * - * @returns {string array} Array of secondary user stores. + * @returns Array of secondary user stores. */ publicMethods.getSecondaryUserStores = function () { var returnVal = []; - var endpoint = devicemgtProps.adminService + constants.USER_STORE_CONFIG_ADMIN_SERVICE_END_POINT; + var endpoint = devicemgtProps["adminService"] + constants["USER_STORE_CONFIG_ADMIN_SERVICE_END_POINT"]; var wsPayload = ""; serviceInvokers.WS.soapRequest( - "urn:getSecondaryRealmConfigurations", endpoint, wsPayload, function (wsResponse) { + "urn:getSecondaryRealmConfigurations", + wsPayload, + endpoint, + function (wsResponse) { var domainIDs = stringify(wsResponse.*::['return']. *::domainId.text()); if (domainIDs != "\"\"") { - var regExpForSearch = new RegExp(constants.USER_STORES_NOISY_CHAR, "g"); + var regExpForSearch = new RegExp(constants["USER_STORES_NOISY_CHAR"], "g"); domainIDs = domainIDs.replace(regExpForSearch, ""); - returnVal = domainIDs.split(constants.USER_STORES_SPLITTING_CHAR); + returnVal = domainIDs.split(constants["USER_STORES_SPLITTING_CHAR"]); } }, function (e) { log.error("Error retrieving secondary user stores", e); - }, constants.SOAP_VERSION); + }, + constants["SOAP_VERSION"]); return returnVal; }; + return publicMethods; }(); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.user.create/create.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.user.create/create.hbs index e8902e77d20..d9f24cd04fc 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.user.create/create.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.user.create/create.hbs @@ -15,7 +15,7 @@ specific language governing permissions and limitations under the License. }} -{{unit "cdmf.unit.ui.title" pageTitle="User Management"}} +{{unit "cdmf.unit.ui.title" pageTitle="User Management | Add User"}} {{#zone "breadcrumbs"}}
  • @@ -50,8 +50,8 @@ -