1aee575d73193623c5224121746ba4dfbb5f0165
[osm/UI.git] / skyquake / framework / core / modules / api / userManagementAPI.js
1 /*
2 *
3 * Copyright 2016 RIFT.IO Inc
4 *
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
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
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.
16 *
17 */
18 // DescriptorModelMeta API (NSD + VNFD)
19
20
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');
29
30 UserManagement.get = function(req) {
31 var self = this;
32 var api_server = req.query['api_server'];
33
34 return new Promise(function(resolve, reject) {
35 Promise.all([
36 rp({
37 uri: utils.confdPort(api_server) + '/api/operational/user-config/user',
38 method: 'GET',
39 headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
40 'Authorization': req.session && req.session.authorization
41 }),
42 forever: constants.FOREVER_ON,
43 rejectUnauthorized: false,
44 resolveWithFullResponse: true
45 })
46 ]).then(function(result) {
47 var response = {};
48 response['data'] = {};
49 if (result[0].body) {
50 response['data']['user'] = JSON.parse(result[0].body)['rw-user:user'];
51 }
52 response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK
53
54 resolve(response);
55 }).catch(function(error) {
56 var response = {};
57 console.log('Problem with UserManagement.get', error);
58 response.statusCode = error.statusCode || 500;
59 response.errorMessage = {
60 error: 'Failed to get UserManagement' + error
61 };
62 reject(response);
63 });
64 });
65 };
66
67
68 UserManagement.getProfile = function(req) {
69 var self = this;
70 var api_server = req.query['api_server'];
71 return new Promise(function(resolve, reject) {
72 var response = {};
73 try {
74 var userId = req.session.userdata.username
75 response['data'] = {
76 userId: userId,
77 projectId: req.session.projectId
78 };
79 UserManagement.getUserInfo(req, userId).then(function(result) {
80 response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK;
81 response.data.data = result.data
82 resolve(response);
83 }, function(error) {
84 console.log('Error retrieving getUserInfo');
85 response.statusCode = constants.HTTP_RESPONSE_CODES.ERROR.INTERNAL_SERVER_ERROR;
86 reject(response);
87 })
88 } catch (e) {
89 response.data.data = e;
90 response.statusCode = constants.HTTP_RESPONSE_CODES.ERROR.INTERNAL_SERVER_ERROR;
91 reject(response);
92 reject()
93 }
94 });
95 };
96 UserManagement.getUserInfo = function(req, userId, domain) {
97 var self = this;
98 var api_server = req.query['api_server'];
99 var id = req.params['userId'] || userId;
100 var domain = req.params['domainId'] || domain;
101 var response = {};
102 return new Promise(function(resolve, reject) {
103 if (id) {
104 var getProjects = ProjectManagementAPI.get(req)
105 var getPlatformUser = ProjectManagementAPI.getPlatform(req, id)
106 Promise.all([
107 getProjects,
108 getPlatformUser
109 ]).then(function(result) {
110 var userData = {
111 platform: {
112 role: {
113
114 }
115 },
116 //id/key values for each project
117 projectId:[],
118 project: {
119 /**
120 * [projectId] : {
121 * data: [project object],
122 * role: {
123 * [roleId]: true
124 * }
125 * }
126 */
127 }
128 }
129 //Build project roles
130 var projects = result[0].data.project;
131 var userProjects = [];
132 projects && projects.map(function(p, i) {
133 var users = p['project-config'] && p['project-config'].user;
134 userData.projectId.push(p.name);
135 users && users.map(function(u) {
136 if(u['user-name'] == id) {
137 userData.project[p.name] = {
138 data: p,
139 role: {}
140 }
141 u.role && u.role.map(function(r) {
142 userData.project[p.name].role[r.role] = true
143 });
144 u["rw-project-mano:mano-role"] && u["rw-project-mano:mano-role"] .map(function(r) {
145 userData.project[p.name].role[r.role] = true
146 });
147 }
148 })
149 });
150 //Build platform roles
151 var platformRoles = result[1].data.platform && result[1].data.platform.role;
152 platformRoles && platformRoles.map(function(r) {
153 userData.platform.role[r.role] = true
154 });
155 response.data = userData;
156 response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK
157 resolve(response);
158 })
159 } else {
160 var errorMsg = 'userId not specified in UserManagement.getUserInfo';
161 console.error(errorMsg);
162 response.statusCode = constants.HTTP_RESPONSE_CODES.ERROR.BAD_REQUEST;
163 response.error = errorMsg;
164 reject(response)
165 }
166
167 })
168 }
169 UserManagement.create = function(req) {
170 var self = this;
171 var api_server = req.query['api_server'];
172 var data = req.body;
173 data = {
174 "user":[data]
175 }
176 return new Promise(function(resolve, reject) {
177 Promise.all([
178 rp({
179 uri: utils.confdPort(api_server) + '/api/config/user-config',
180 method: 'POST',
181 headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
182 'Authorization': req.session && req.session.authorization
183 }),
184 forever: constants.FOREVER_ON,
185 json: data,
186 rejectUnauthorized: false,
187 resolveWithFullResponse: true
188 })
189 ]).then(function(result) {
190 var response = {};
191 response['data'] = {};
192 if (result[0].body) {
193 response['data'] = result[0].body;
194 }
195 response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK
196
197 resolve(response);
198 }).catch(function(error) {
199 var response = {};
200 console.log('Problem with UserManagement.create', error);
201 response.statusCode = error.statusCode || 500;
202 response.errorMessage = {
203 error: 'Failed to create user' + error
204 };
205 reject(response);
206 });
207 });
208 };
209 UserManagement.update = function(req) {
210 var self = this;
211 var api_server = req.query['api_server'];
212 var bodyData = req.body;
213 data = {
214 "rw-user:user": bodyData
215 }
216 var updateTasks = [];
217 if(bodyData.hasOwnProperty('old-password')) {
218 var changePW = rp({
219 uri: utils.confdPort(api_server) + '/api/operations/change-password',
220 method: 'POST',
221 headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
222 'Authorization': req.session && req.session.authorization
223 }),
224 forever: constants.FOREVER_ON,
225 json: {
226 "input": {
227 'user-name' : bodyData['user-name'],
228 'user-domain' : bodyData['user-domain'],
229 'old-password' : bodyData['old-password'],
230 'new-password' : bodyData['new-password'],
231 'confirm-password' : bodyData['confirm-password'],
232 }
233 },
234 rejectUnauthorized: false,
235 resolveWithFullResponse: true
236 });
237 updateTasks.push(changePW);
238 };
239 var updateUser = rp({
240 uri: utils.confdPort(api_server) + '/api/config/user-config/user/' + bodyData['user-name'] + ',' + bodyData['user-domain'],
241 method: 'PUT',
242 headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
243 'Authorization': req.session && req.session.authorization
244 }),
245 forever: constants.FOREVER_ON,
246 json: data,
247 rejectUnauthorized: false,
248 resolveWithFullResponse: true
249 });
250 updateTasks.push(updateUser)
251 return new Promise(function(resolve, reject) {
252 Promise.all([
253 updateTasks
254 ]).then(function(result) {
255 var response = {};
256 response['data'] = {};
257 if (result[0].body) {
258 response['data'] = result[0].body;
259 }
260 response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK
261
262 resolve(response);
263 }).catch(function(error) {
264 var response = {};
265 console.log('Problem with UserManagement.passwordChange', error);
266 response.statusCode = error.statusCode || 500;
267 response.errorMessage = {
268 error: 'Failed to passwordChange user' + error
269 };
270 reject(response);
271 });
272 });
273 };
274
275 UserManagement.delete = function(req) {
276 var self = this;
277 var username = req.params.username;
278 var domain = req.params.domain;
279 var api_server = req.query["api_server"];
280 var requestHeaders = {};
281 var url = `${utils.confdPort(api_server)}/api/config/user-config/user/${username},${domain}`
282 return new Promise(function(resolve, reject) {
283 _.extend(requestHeaders,
284 constants.HTTP_HEADERS.accept.data,
285 constants.HTTP_HEADERS.content_type.data, {
286 'Authorization': req.session && req.session.authorization
287 });
288 rp({
289 url: url,
290 method: 'DELETE',
291 headers: requestHeaders,
292 forever: constants.FOREVER_ON,
293 rejectUnauthorized: false,
294 }, function(error, response, body) {
295 if (utils.validateResponse('UserManagement.DELETE', error, response, body, resolve, reject)) {
296 return resolve({
297 statusCode: response.statusCode,
298 data: JSON.stringify(response.body)
299 });
300 };
301 });
302 })
303 }
304 module.exports = UserManagement;