diff --git a/src/serverroot/orchestration/plugins/openstack/keystone.api.js b/src/serverroot/orchestration/plugins/openstack/keystone.api.js index 6be9650f4..318957826 100644 --- a/src/serverroot/orchestration/plugins/openstack/keystone.api.js +++ b/src/serverroot/orchestration/plugins/openstack/keystone.api.js @@ -905,11 +905,14 @@ function getUserRoleByAllTenants (username, password, tenantlist, callback) var dataLen = data.length; var tokenObjs = {}; for (var i = 0; i < dataLen; i++) { - var project = data[i]['tokenObj']['token']['tenant']['name']; - tokenObjs[project] = data[i]['tokenObj']; - if (null == data[i]) { + var project = + commonUtils.getValueByJsonPath(data[i], + 'tokenObj;token;tenant;name', + null); + if (null == project) { continue; } + tokenObjs[project] = data[i]['tokenObj']; userRoles = getUserRoleByAuthResponse(data[i]['roles']); var userRolesCnt = userRoles.length; @@ -1066,10 +1069,24 @@ function getProjectDetails (projects, userObj, callback) var tokenObjs = {}; var tokenCnt = tokenList.length; for (var i = 0; i < tokenCnt; i++) { - var project = tokenList[i]['tenant']['name']; + var project = + commonUtils.getValueByJsonPath(tokenList[i], 'tenant;name', + null); + if (null == project) { + continue; + } tokenObjs[project] = {}; tokenObjs[project]['token'] = tokenList[i]; - tokenObjs[project]['token']['id'] = + var tokenID = + commonUtils.getValueByJsonPath(tokenObjs[project], + 'token;id', null); + if (null == tokenID) { + logutils.logger.error('We did not get valid token id for ' + + 'project: ' + project); + delete tokenObjs[project]; + continue; + } + tokenObjs[project]['token']['id'] = removeSpecialChars(tokenID); removeSpecialChars(tokenObjs[project]['token']['id'] ); } callback(err, data, tokenObjs); @@ -1089,7 +1106,13 @@ function getUserRoleByProjectList (projects, userObj, callback) var projCnt = projs.length; for (var i = 0; i < projCnt; i++) { try { - var projName = projs[i]['token']['project']['name']; + var projName = + commonUtils.getValueByJsonPath(projs[i], + 'token;project;name', + null); + if (null == projName) { + continue; + } resTokenObjs[projName] = projs[i]; if (null != tokenObjs[projName]) { resTokenObjs[projName]['token']['id'] = @@ -1107,7 +1130,10 @@ function getUserRoleByProjectList (projects, userObj, callback) } var resCnt = projs.length; for (var i = 0; i < resCnt; i++) { - var userRole = getUserRoleByAuthResponse(projs[i]['token']['roles']); + var roles = + commonUtils.getValueByJsonPath(projs[i], + 'token;roles', null); + var userRole = getUserRoleByAuthResponse(roles); if (global.STR_ROLE_ADMIN == userRole) { callback(userRole, resTokenObjs); return; diff --git a/src/serverroot/utils/common.utils.js b/src/serverroot/utils/common.utils.js index 5c9a442f7..10b058b27 100644 --- a/src/serverroot/utils/common.utils.js +++ b/src/serverroot/utils/common.utils.js @@ -1810,6 +1810,31 @@ function prefixToNetMask(prefixLen) { return v4.Address.fromHex(parseInt(binaryString,2).toString(16)).address; } +/** + * Get the value of a property inside a json object with a given path + */ +function getValueByJsonPath(obj,pathStr,defValue) { + try { + var currObj = obj; + var pathArr = pathStr.split(';'); + var arrLength = pathArr.length; + for(var i=0;i