X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FUI.git;a=blobdiff_plain;f=skyquake%2Fframework%2Fcore%2Fmodules%2Fapi%2FuserManagementAPI.js;h=fdce725b03b3d738e4428e6be84b220e17b42471;hp=e88a5dca7f3d2dbc8d43d3e50e20fc94d1d81bf6;hb=refs%2Fheads%2Fprojects;hpb=3d39b18290b9cb3e10c1a80d91ac4819e7c58474 diff --git a/skyquake/framework/core/modules/api/userManagementAPI.js b/skyquake/framework/core/modules/api/userManagementAPI.js index e88a5dca7..fdce725b0 100644 --- a/skyquake/framework/core/modules/api/userManagementAPI.js +++ b/skyquake/framework/core/modules/api/userManagementAPI.js @@ -25,15 +25,25 @@ var Promise = require('promise'); var constants = require('../../api_utils/constants'); var utils = require('../../api_utils/utils'); var _ = require('lodash'); +var ProjectManagementAPI = require('./projectManagementAPI.js'); UserManagement.get = function(req) { var self = this; var api_server = req.query['api_server']; return new Promise(function(resolve, reject) { - Promise.all([ - rp({ - uri: utils.confdPort(api_server) + '/api/operational/user-config/users', + var userConfig = rp({ + uri: utils.confdPort(api_server) + '/api/operational/user-config/user', + method: 'GET', + headers: _.extend({}, constants.HTTP_HEADERS.accept.data, { + 'Authorization': req.session && req.session.authorization + }), + forever: constants.FOREVER_ON, + rejectUnauthorized: false, + resolveWithFullResponse: true + }); + var userOp = rp({ + uri: utils.confdPort(api_server) + '/api/operational/user-state/user', method: 'GET', headers: _.extend({}, constants.HTTP_HEADERS.accept.data, { 'Authorization': req.session && req.session.authorization @@ -42,14 +52,42 @@ UserManagement.get = function(req) { rejectUnauthorized: false, resolveWithFullResponse: true }) + Promise.all([ + userConfig, + userOp ]).then(function(result) { var response = {}; response['data'] = {}; + var resultData = []; if (result[0].body) { - response['data']['users'] = JSON.parse(result[0].body)['rw-user:users']; + resultData.push(JSON.parse(result[0].body)['rw-user:user'].sort()); + } + if (result[1].body) { + resultData.push(JSON.parse(result[1].body)['rw-user:user'].sort()); } response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK - + response['data']['user'] = resultData[0].map(function(d,i) { + var mergedData = _.merge(d, resultData[1][i]); + mergedData.projects = { + ids: [], + data: {} + }; + var projects = mergedData.projects; + mergedData.role && mergedData.role.map(function(r) { + if ((r.role != "rw-project:user-self" )&& (r.role != "rw-rbac-platform:user-self")) { + var projectId = r.keys.split(';')[0]; + if (projectId == "") { + projectId = "platform" + } + if (!projects.data[projectId]) { + projects.ids.push(projectId); + projects.data[projectId] = []; + } + projects.data[projectId].push(r.role); + } + }) + return mergedData; + }) resolve(response); }).catch(function(error) { var response = {}; @@ -62,12 +100,115 @@ UserManagement.get = function(req) { }); }); }; + + +UserManagement.getProfile = function(req) { + var self = this; + var api_server = req.query['api_server']; + return new Promise(function(resolve, reject) { + var response = {}; + try { + var userId = req.session.userdata.username + response['data'] = { + userId: userId, + projectId: req.session.projectId + }; + UserManagement.getUserInfo(req, userId).then(function(result) { + response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK; + response.data.data = result.data + resolve(response); + }, function(error) { + console.log('Error retrieving getUserInfo'); + response.statusCode = constants.HTTP_RESPONSE_CODES.ERROR.INTERNAL_SERVER_ERROR; + reject(response); + }) + } catch (e) { + response.data.data = e; + response.statusCode = constants.HTTP_RESPONSE_CODES.ERROR.INTERNAL_SERVER_ERROR; + reject(response); + reject() + } + }); +}; +UserManagement.getUserInfo = function(req, userId, domain) { + var self = this; + var api_server = req.query['api_server']; + var id = req.params['userId'] || userId; + var domain = req.params['domainId'] || domain; + var response = {}; + return new Promise(function(resolve, reject) { + if (id) { + var getProjects = ProjectManagementAPI.get(req) + var getPlatformUser = ProjectManagementAPI.getPlatform(req, id) + Promise.all([ + getProjects, + getPlatformUser + ]).then(function(result) { + var userData = { + platform: { + role: { + + } + }, + //id/key values for each project + projectId:[], + project: { + /** + * [projectId] : { + * data: [project object], + * role: { + * [roleId]: true + * } + * } + */ + } + } + //Build project roles + var projects = result[0].data.project; + var userProjects = []; + projects && projects.map(function(p, i) { + var users = p['project-config'] && p['project-config'].user; + userData.projectId.push(p.name); + users && users.map(function(u) { + if(u['user-name'] == id) { + userData.project[p.name] = { + data: p, + role: {} + } + u.role && u.role.map(function(r) { + userData.project[p.name].role[r.role] = true + }); + u["rw-project-mano:mano-role"] && u["rw-project-mano:mano-role"] .map(function(r) { + userData.project[p.name].role[r.role] = true + }); + } + }) + }); + //Build platform roles + var platformRoles = result[1].data.platform && result[1].data.platform.role; + platformRoles && platformRoles.map(function(r) { + userData.platform.role[r.role] = true + }); + response.data = userData; + response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK + resolve(response); + }) + } else { + var errorMsg = 'userId not specified in UserManagement.getUserInfo'; + console.error(errorMsg); + response.statusCode = constants.HTTP_RESPONSE_CODES.ERROR.BAD_REQUEST; + response.error = errorMsg; + reject(response) + } + + }) +} UserManagement.create = function(req) { var self = this; var api_server = req.query['api_server']; var data = req.body; data = { - "users":[data] + "user":[data] } return new Promise(function(resolve, reject) { Promise.all([ @@ -107,7 +248,7 @@ UserManagement.update = function(req) { var api_server = req.query['api_server']; var bodyData = req.body; data = { - "users":[bodyData] + "rw-user:user": bodyData } var updateTasks = []; if(bodyData.hasOwnProperty('old-password')) { @@ -133,7 +274,7 @@ UserManagement.update = function(req) { updateTasks.push(changePW); }; var updateUser = rp({ - uri: utils.confdPort(api_server) + '/api/config/user-config', + uri: utils.confdPort(api_server) + '/api/config/user-config/user/' + bodyData['user-name'] + ',' + bodyData['user-domain'], method: 'PUT', headers: _.extend({}, constants.HTTP_HEADERS.accept.data, { 'Authorization': req.session && req.session.authorization @@ -174,7 +315,7 @@ UserManagement.delete = function(req) { var domain = req.params.domain; var api_server = req.query["api_server"]; var requestHeaders = {}; - var url = `${utils.confdPort(api_server)}/api/config/user-config/users/${username},${domain}` + var url = `${utils.confdPort(api_server)}/api/config/user-config/user/${username},${domain}` return new Promise(function(resolve, reject) { _.extend(requestHeaders, constants.HTTP_HEADERS.accept.data,