fdce725b03b3d738e4428e6be84b220e17b42471
3 * Copyright 2016 RIFT.IO Inc
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 // DescriptorModelMeta API (NSD + VNFD)
21 var UserManagement
= {};
22 var Promise
= require('bluebird');
23 var rp
= require('request-promise');
24 var Promise
= require('promise');
25 var constants
= require('../../api_utils/constants');
26 var utils
= require('../../api_utils/utils');
27 var _
= require('lodash');
28 var ProjectManagementAPI
= require('./projectManagementAPI.js');
30 UserManagement
.get = function(req
) {
32 var api_server
= req
.query
['api_server'];
34 return new Promise(function(resolve
, reject
) {
36 uri
: utils
.confdPort(api_server
) + '/api/operational/user-config/user',
38 headers
: _
.extend({}, constants
.HTTP_HEADERS
.accept
.data
, {
39 'Authorization': req
.session
&& req
.session
.authorization
41 forever
: constants
.FOREVER_ON
,
42 rejectUnauthorized
: false,
43 resolveWithFullResponse
: true
46 uri
: utils
.confdPort(api_server
) + '/api/operational/user-state/user',
48 headers
: _
.extend({}, constants
.HTTP_HEADERS
.accept
.data
, {
49 'Authorization': req
.session
&& req
.session
.authorization
51 forever
: constants
.FOREVER_ON
,
52 rejectUnauthorized
: false,
53 resolveWithFullResponse
: true
58 ]).then(function(result
) {
60 response
['data'] = {};
63 resultData
.push(JSON
.parse(result
[0].body
)['rw-user:user'].sort());
66 resultData
.push(JSON
.parse(result
[1].body
)['rw-user:user'].sort());
68 response
.statusCode
= constants
.HTTP_RESPONSE_CODES
.SUCCESS
.OK
69 response
['data']['user'] = resultData
[0].map(function(d
,i
) {
70 var mergedData
= _
.merge(d
, resultData
[1][i
]);
71 mergedData
.projects
= {
75 var projects
= mergedData
.projects
;
76 mergedData
.role
&& mergedData
.role
.map(function(r
) {
77 if ((r
.role
!= "rw-project:user-self" )&& (r
.role
!= "rw-rbac-platform:user-self")) {
78 var projectId
= r
.keys
.split(';')[0];
79 if (projectId
== "") {
80 projectId
= "platform"
82 if (!projects
.data
[projectId
]) {
83 projects
.ids
.push(projectId
);
84 projects
.data
[projectId
] = [];
86 projects
.data
[projectId
].push(r
.role
);
92 }).catch(function(error
) {
94 console
.log('Problem with UserManagement.get', error
);
95 response
.statusCode
= error
.statusCode
|| 500;
96 response
.errorMessage
= {
97 error
: 'Failed to get UserManagement' + error
105 UserManagement
.getProfile = function(req
) {
107 var api_server
= req
.query
['api_server'];
108 return new Promise(function(resolve
, reject
) {
111 var userId
= req
.session
.userdata
.username
114 projectId
: req
.session
.projectId
116 UserManagement
.getUserInfo(req
, userId
).then(function(result
) {
117 response
.statusCode
= constants
.HTTP_RESPONSE_CODES
.SUCCESS
.OK
;
118 response
.data
.data
= result
.data
121 console
.log('Error retrieving getUserInfo');
122 response
.statusCode
= constants
.HTTP_RESPONSE_CODES
.ERROR
.INTERNAL_SERVER_ERROR
;
126 response
.data
.data
= e
;
127 response
.statusCode
= constants
.HTTP_RESPONSE_CODES
.ERROR
.INTERNAL_SERVER_ERROR
;
133 UserManagement
.getUserInfo = function(req
, userId
, domain
) {
135 var api_server
= req
.query
['api_server'];
136 var id
= req
.params
['userId'] || userId
;
137 var domain
= req
.params
['domainId'] || domain
;
139 return new Promise(function(resolve
, reject
) {
141 var getProjects
= ProjectManagementAPI
.get(req
)
142 var getPlatformUser
= ProjectManagementAPI
.getPlatform(req
, id
)
146 ]).then(function(result
) {
153 //id/key values for each project
158 * data: [project object],
166 //Build project roles
167 var projects
= result
[0].data
.project
;
168 var userProjects
= [];
169 projects
&& projects
.map(function(p
, i
) {
170 var users
= p
['project-config'] && p
['project-config'].user
;
171 userData
.projectId
.push(p
.name
);
172 users
&& users
.map(function(u
) {
173 if(u
['user-name'] == id
) {
174 userData
.project
[p
.name
] = {
178 u
.role
&& u
.role
.map(function(r
) {
179 userData
.project
[p
.name
].role
[r
.role
] = true
181 u
["rw-project-mano:mano-role"] && u
["rw-project-mano:mano-role"] .map(function(r
) {
182 userData
.project
[p
.name
].role
[r
.role
] = true
187 //Build platform roles
188 var platformRoles
= result
[1].data
.platform
&& result
[1].data
.platform
.role
;
189 platformRoles
&& platformRoles
.map(function(r
) {
190 userData
.platform
.role
[r
.role
] = true
192 response
.data
= userData
;
193 response
.statusCode
= constants
.HTTP_RESPONSE_CODES
.SUCCESS
.OK
197 var errorMsg
= 'userId not specified in UserManagement.getUserInfo';
198 console
.error(errorMsg
);
199 response
.statusCode
= constants
.HTTP_RESPONSE_CODES
.ERROR
.BAD_REQUEST
;
200 response
.error
= errorMsg
;
206 UserManagement
.create = function(req
) {
208 var api_server
= req
.query
['api_server'];
213 return new Promise(function(resolve
, reject
) {
216 uri
: utils
.confdPort(api_server
) + '/api/config/user-config',
218 headers
: _
.extend({}, constants
.HTTP_HEADERS
.accept
.data
, {
219 'Authorization': req
.session
&& req
.session
.authorization
221 forever
: constants
.FOREVER_ON
,
223 rejectUnauthorized
: false,
224 resolveWithFullResponse
: true
226 ]).then(function(result
) {
228 response
['data'] = {};
229 if (result
[0].body
) {
230 response
['data'] = result
[0].body
;
232 response
.statusCode
= constants
.HTTP_RESPONSE_CODES
.SUCCESS
.OK
235 }).catch(function(error
) {
237 console
.log('Problem with UserManagement.create', error
);
238 response
.statusCode
= error
.statusCode
|| 500;
239 response
.errorMessage
= {
240 error
: 'Failed to create user' + error
246 UserManagement
.update = function(req
) {
248 var api_server
= req
.query
['api_server'];
249 var bodyData
= req
.body
;
251 "rw-user:user": bodyData
253 var updateTasks
= [];
254 if(bodyData
.hasOwnProperty('old-password')) {
256 uri
: utils
.confdPort(api_server
) + '/api/operations/change-password',
258 headers
: _
.extend({}, constants
.HTTP_HEADERS
.accept
.data
, {
259 'Authorization': req
.session
&& req
.session
.authorization
261 forever
: constants
.FOREVER_ON
,
264 'user-name' : bodyData
['user-name'],
265 'user-domain' : bodyData
['user-domain'],
266 'old-password' : bodyData
['old-password'],
267 'new-password' : bodyData
['new-password'],
268 'confirm-password' : bodyData
['confirm-password'],
271 rejectUnauthorized
: false,
272 resolveWithFullResponse
: true
274 updateTasks
.push(changePW
);
276 var updateUser
= rp({
277 uri
: utils
.confdPort(api_server
) + '/api/config/user-config/user/' + bodyData
['user-name'] + ',' + bodyData
['user-domain'],
279 headers
: _
.extend({}, constants
.HTTP_HEADERS
.accept
.data
, {
280 'Authorization': req
.session
&& req
.session
.authorization
282 forever
: constants
.FOREVER_ON
,
284 rejectUnauthorized
: false,
285 resolveWithFullResponse
: true
287 updateTasks
.push(updateUser
)
288 return new Promise(function(resolve
, reject
) {
291 ]).then(function(result
) {
293 response
['data'] = {};
294 if (result
[0].body
) {
295 response
['data'] = result
[0].body
;
297 response
.statusCode
= constants
.HTTP_RESPONSE_CODES
.SUCCESS
.OK
300 }).catch(function(error
) {
302 console
.log('Problem with UserManagement.passwordChange', error
);
303 response
.statusCode
= error
.statusCode
|| 500;
304 response
.errorMessage
= {
305 error
: 'Failed to passwordChange user' + error
312 UserManagement
.delete = function(req
) {
314 var username
= req
.params
.username
;
315 var domain
= req
.params
.domain
;
316 var api_server
= req
.query
["api_server"];
317 var requestHeaders
= {};
318 var url
= `${utils.confdPort(api_server)}/api/config/user-config/user/${username},${domain}`
319 return new Promise(function(resolve
, reject
) {
320 _
.extend(requestHeaders
,
321 constants
.HTTP_HEADERS
.accept
.data
,
322 constants
.HTTP_HEADERS
.content_type
.data
, {
323 'Authorization': req
.session
&& req
.session
.authorization
328 headers
: requestHeaders
,
329 forever
: constants
.FOREVER_ON
,
330 rejectUnauthorized
: false,
331 }, function(error
, response
, body
) {
332 if (utils
.validateResponse('UserManagement.DELETE', error
, response
, body
, resolve
, reject
)) {
334 statusCode
: response
.statusCode
,
335 data
: JSON
.stringify(response
.body
)
341 module
.exports
= UserManagement
;