NOTICKET: Merging OSM/master to OSM/projects
[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 var userId = req.session.userdata.username
74 response['data'] = {
75 userId: userId,
76 projectId: req.session.projectId
77 };
78 UserManagement.getUserInfo(req, userId).then(function(result) {
79 response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK;
80 response.data.data =result.data
81 resolve(response);
82 }, function(error) {
83 console.log('Error retrieving getUserInfo');
84 response.statusCode = constants.HTTP_RESPONSE_CODES.ERROR.INTERNAL_SERVER_ERROR;
85 reject(response);
86 })
87
88 });
89 };
90 UserManagement.getUserInfo = function(req, userId, domain) {
91 var self = this;
92 var api_server = req.query['api_server'];
93 var id = req.params['userId'] || userId;
94 var domain = req.params['domainId'] || domain;
95 var response = {};
96 return new Promise(function(resolve, reject) {
97 if (id) {
98 var getProjects = ProjectManagementAPI.get(req)
99 var getPlatformUser = ProjectManagementAPI.getPlatform(req, id)
100 Promise.all([
101 getProjects,
102 getPlatformUser
103 ]).then(function(result) {
104 var userData = {
105 platform: {
106 role: {
107
108 }
109 },
110 //id/key values for each project
111 projectId:[],
112 project: {
113 /**
114 * [projectId] : {
115 * data: [project object],
116 * role: {
117 * [roleId]: true
118 * }
119 * }
120 */
121 }
122 }
123 //Build project roles
124 var projects = result[0].data.project;
125 var userProjects = [];
126 projects && projects.map(function(p, i) {
127 var users = p['project-config'] && p['project-config'].user;
128 userData.projectId.push(p.name);
129 users && users.map(function(u) {
130 if(u['user-name'] == id) {
131 userData.project[p.name] = {
132 data: p,
133 role: {}
134 }
135 u.role && u.role.map(function(r) {
136 userData.project[p.name].role[r.role] = true
137 });
138 }
139 })
140 });
141 //Build platform roles
142 var platformRoles = result[1].data.platform && result[1].data.platform.role;
143 platformRoles && platformRoles.map(function(r) {
144 userData.platform.role[r.role] = true
145 });
146 response.data = userData;
147 response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK
148 resolve(response);
149 })
150 } else {
151 var errorMsg = 'userId not specified in UserManagement.getUserInfo';
152 console.error(errorMsg);
153 response.statusCode = constants.HTTP_RESPONSE_CODES.ERROR.BAD_REQUEST;
154 response.error = errorMsg;
155 reject(response)
156 }
157
158 })
159 }
160 UserManagement.create = function(req) {
161 var self = this;
162 var api_server = req.query['api_server'];
163 var data = req.body;
164 data = {
165 "user":[data]
166 }
167 return new Promise(function(resolve, reject) {
168 Promise.all([
169 rp({
170 uri: utils.confdPort(api_server) + '/api/config/user-config',
171 method: 'POST',
172 headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
173 'Authorization': req.session && req.session.authorization
174 }),
175 forever: constants.FOREVER_ON,
176 json: data,
177 rejectUnauthorized: false,
178 resolveWithFullResponse: true
179 })
180 ]).then(function(result) {
181 var response = {};
182 response['data'] = {};
183 if (result[0].body) {
184 response['data'] = result[0].body;
185 }
186 response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK
187
188 resolve(response);
189 }).catch(function(error) {
190 var response = {};
191 console.log('Problem with UserManagement.create', error);
192 response.statusCode = error.statusCode || 500;
193 response.errorMessage = {
194 error: 'Failed to create user' + error
195 };
196 reject(response);
197 });
198 });
199 };
200 UserManagement.update = function(req) {
201 var self = this;
202 var api_server = req.query['api_server'];
203 var bodyData = req.body;
204 data = {
205 "user":[bodyData]
206 }
207 var updateTasks = [];
208 if(bodyData.hasOwnProperty('old-password')) {
209 var changePW = rp({
210 uri: utils.confdPort(api_server) + '/api/operations/change-password',
211 method: 'POST',
212 headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
213 'Authorization': req.session && req.session.authorization
214 }),
215 forever: constants.FOREVER_ON,
216 json: {
217 "input": {
218 'user-name' : bodyData['user-name'],
219 'user-domain' : bodyData['user-domain'],
220 'old-password' : bodyData['old-password'],
221 'new-password' : bodyData['new-password'],
222 'confirm-password' : bodyData['confirm-password'],
223 }
224 },
225 rejectUnauthorized: false,
226 resolveWithFullResponse: true
227 });
228 updateTasks.push(changePW);
229 };
230 var updateUser = rp({
231 uri: utils.confdPort(api_server) + '/api/config/user-config',
232 method: 'PUT',
233 headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
234 'Authorization': req.session && req.session.authorization
235 }),
236 forever: constants.FOREVER_ON,
237 json: data,
238 rejectUnauthorized: false,
239 resolveWithFullResponse: true
240 });
241 updateTasks.push(updateUser)
242 return new Promise(function(resolve, reject) {
243 Promise.all([
244 updateTasks
245 ]).then(function(result) {
246 var response = {};
247 response['data'] = {};
248 if (result[0].body) {
249 response['data'] = result[0].body;
250 }
251 response.statusCode = constants.HTTP_RESPONSE_CODES.SUCCESS.OK
252
253 resolve(response);
254 }).catch(function(error) {
255 var response = {};
256 console.log('Problem with UserManagement.passwordChange', error);
257 response.statusCode = error.statusCode || 500;
258 response.errorMessage = {
259 error: 'Failed to passwordChange user' + error
260 };
261 reject(response);
262 });
263 });
264 };
265
266 UserManagement.delete = function(req) {
267 var self = this;
268 var username = req.params.username;
269 var domain = req.params.domain;
270 var api_server = req.query["api_server"];
271 var requestHeaders = {};
272 var url = `${utils.confdPort(api_server)}/api/config/user-config/user/${username},${domain}`
273 return new Promise(function(resolve, reject) {
274 _.extend(requestHeaders,
275 constants.HTTP_HEADERS.accept.data,
276 constants.HTTP_HEADERS.content_type.data, {
277 'Authorization': req.session && req.session.authorization
278 });
279 rp({
280 url: url,
281 method: 'DELETE',
282 headers: requestHeaders,
283 forever: constants.FOREVER_ON,
284 rejectUnauthorized: false,
285 }, function(error, response, body) {
286 if (utils.validateResponse('UserManagement.DELETE', error, response, body, resolve, reject)) {
287 return resolve({
288 statusCode: response.statusCode,
289 data: JSON.stringify(response.body)
290 });
291 };
292 });
293 })
294 }
295 module.exports = UserManagement;