/* * Copyright 2016-2017 Huawei Technologies Co., Ltd. * * 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 "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. */ $(document).ready(function() { var USER_SERVICE = "/openoapi/auth/v1/users"; var ROLE_SERVICE = "/openoapi/auth/v1/roles"; var $userName = $("#userName"); var $password = $("#password"); var $cfPsdError = $("#cfPsdError"); var $userNameError = $("#userNameError"); var $passwordError = $("#passwordError"); var $rolesError = $("#rolesError"); var roleMap=[]; function initialPage() { /*initial the event*/ $("#confirm").click(function(e) { if (!checkUserRules()) { return; } var data = getCreateUser(); createUser(data).done(function() { window.document.location = "/openoui/user/user.html"; }) }) $("#cancel").click(function(e) { window.document.location = "/openoui/user/user.html"; }) //get and initialize roles getRolesList().done(function(data) { var data = formatRoles(data); for (var i = 0; i < data.length; i++) { var html = '
  • ' + data[i].name + '
  • '; $('.mutliSelect ul').append(html); } }) //init listener $(".dropdown dt a").on('click', function() { $(".dropdown dd ul").slideToggle('fast'); }); $(".dropdown dd ul li a").on('click', function() { $(".dropdown dd ul").hide(); }); function getSelectedValue(id) { return $("#" + id).find("dt a span.value").html(); } $(document).bind('click', function(e) { var $clicked = $(e.target); if (!$clicked.parents().hasClass("dropdown")) $(".dropdown dd ul").hide(); }); $('.mutliSelect input[type="checkbox"]').on('click', function() { if($('.hida')[0].innerHTML=='Please select roles') { $('.hida')[0].innerHTML=''; } var title; if($('.multiSel').text() ==='') { title = $(this).closest('.mutliSelect').find('input[type="checkbox"]').val(), title = $(this).val(); } else { title = $(this).closest('.mutliSelect').find('input[type="checkbox"]').val(), title ="," + $(this).val(); } var oldText=$('.hida')[0].innerHTML; if ($(this).is(':checked')) { if(oldText.length>0) { $('.hida')[0].innerHTML=oldText+','+title; } else { $('.hida')[0].innerHTML=title; } } else { var rolesData = oldText.split(','); var rolesList=''; for (var i = 0; i < rolesData.length ; i++) { if(title!=rolesData[i]) { if(i==0 || rolesList.length==0 ) { rolesList=rolesData[i]; } else { rolesList=rolesList+','+rolesData[i]; } } } if(rolesList.length ==0) { rolesList='Please select roles'; } $('.hida')[0].innerHTML=rolesList; } }); } function getRolesList() { return Rest.http({ url: ROLE_SERVICE + "?=" + new Date().getTime(), type: "GET", async: false, contentType: 'application/json', dataType: "json" }) } function formatRoles(data) { var rolesData = []; for (var i = 0; i < data.roles.length; i++) { var temp = {}; temp.roleid = data.roles[i].id; temp.name = data.roles[i].name; rolesData.push(temp); roleMap[temp.name]=temp.roleid; } return rolesData; } function getCreateUser() { var data = {}; data.userName = $userName.val(); data.password = $password.val(); data.description = $("#description").val(); data.email = "xxxx@xxxx.com"; //get roles var roles=[]; var rolesData = $('.hida').text().split(','); for (var i = 0; i < rolesData.length ; i++) { var temp = {}; temp.name=rolesData[i]; temp.id=roleMap[rolesData[i]]; roles.push(temp); } data.roles=roles; return data; } function createUser(data) { return Rest.http({ url: USER_SERVICE + "?=" + new Date().getTime(), type: "POST", async: false, contentType: 'application/json', dataType: "json", data: JSON.stringify(data) }) } function checkUserRules() { if (!checkMandatory()) { return false; } if (!checkCfPassword()) { return false; } if (!checkUserNameRule()) { return false; } if (!checkPasswordRule()) { return false; } return true; } function checkMandatory() { if ($userName.val() == "") { showError($userNameError, "Mandatory."); return false; } if ($password.val() == "") { showError($passwordError, "Mandatory."); return false; } if($('.hida')[0].innerHTML=='Please select roles') { showError($rolesError, "Mandatory."); return false; } return true; } function checkUserNameRule() { var username = $userName.val(); if (!checkLength(5, 30, username)) { showError($userNameError, "The user name length should between 5 and 30."); return false } if (!checkOnlySpecials(username, /[0-9]|[a-z]|[A-Z]|_/g)) { showError($userNameError, "Only Character(a-z\,A-Z\,0-9,_) is allowed."); return false } if(!checkUderScore(username)) { showError($userNameError, 'The character "_" is only allowed in the middle of the user name.'); return false } if (!checkNoSpace(username)) { showError($userNameError, "The user name should not contain space."); return false } return true } function checkPasswordRule() { var password = $password.val(); if (!checkLength(8, 32, password)) { showError($passwordError, "The password length should between 8 and 32."); return false } if (!checkCotainSpecial(password)) { showError($passwordError, "At least contain: one uppercase letter, one lowercase letter, and one digit, one special character;"); return false } if (!checkNoContainAndReverse(password, $userName.val())) { showError($passwordError, "The password should not contain the user name or reverse."); return false } if (!checkNoSpace(password)) { showError($passwordError, "The password should not contain space."); return false } return true } function checkLength(min, max, str) { return str.length >= min && str.length <= max; } function checkOnlySpecials(str, reg) { return str.match(reg) && str.match(reg).length == str.length } function checkCotainSpecial(password) { return password.match(/\~|\`|\@|\#|\$|\%|\^|\&|\*|\-|\_|\=|\+|\||\?|\/|\(|\)|\<|\>|\[|\]|\{|\}|\"|\,|\.|\;|\'|\!/g) != null && password.match(/[0-9]/g) != null && password.match(/[a-z]/g) != null && password.match(/[A-Z]/g) != null; } function checkUderScore(str) { return str.indexOf("_") != 0 && str.lastIndexOf("_") != str.length - 1; } function checkNoContainAndReverse(str, str2) { return str.indexOf(str2) == -1 && str.indexOf(str2.split("").reverse().join("")) == -1; } function checkNoSpace(str) { return str.indexOf(" ") == -1; } function checkCfPassword() { if ($password.val() == $("#cfPassword").val()) { return true; } showError($cfPsdError, "The password is not the same."); return false; } function showError($Obj, message) { $Obj.text(message); $Obj.css("visibility", "visible"); setTimeout(function() { hideError($Obj); }, 5000) } function hideError($Obj) { $Obj.css("visibility", "hidden"); } initialPage(); })