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.
19 var request
= require('request');
20 var Promise
= require('bluebird');
21 var rp
= require('request-promise');
22 var utils
= require('../../../framework/core/api_utils/utils.js');
23 var constants
= require('../../../framework/core/api_utils/constants.js');
24 var _
= require('underscore');
25 var Cloud
= require('./cloud_account/cloudAccount')
26 var Sdn
= require('./sdn_account/sdnAccount')
27 var ConfigAgent
= require('./config_agent/configAgent')
32 'config-agent': 'config-agent',
33 'resource-orchestrator': 'ro-account'
35 var APIVersion
= '/v2'
36 Accounts
.get = function(req
) {
37 return new Promise(function(resolve
, reject
) {
38 if (req
.params
.type
|| req
.params
.name
) {
40 .then(function(data
) {
43 data
: Object
.assign(data
, {
51 getAll(req
, resolve
, reject
);
55 function getAll(req
, resolve
, reject
) {
60 getResourceOrchestrator(req
)
61 ]).then(function(result
) {
65 'config-agent': result
[2],
66 'resource-orchestrator': result
[3]
68 ReturnData
.cloud
.type
= 'cloud';
69 ReturnData
.sdn
.type
= 'sdn';
70 ReturnData
['config-agent'].type
= 'config';
81 Accounts
.update
= updateAccount
;
82 Accounts
.create
= updateAccount
;
83 Accounts
.delete = deleteAccount
;
84 Accounts
.refreshAccountConnectionStatus
= refreshAccountConnectionStatus
86 function getAccount(req
) {
87 return new Promise(function(resolve
, reject
) {
89 var api_server
= req
.query
["api_server"];
90 var id
= req
.params
.id
|| req
.params
.name
;
91 var requestHeaders
= {};
92 var type
= nameSpace
[req
.params
.type
];
93 var url
= utils
.confdPort(api_server
) + '/api/operational/' + type
+ '/account';
95 url
+= '/' + encodeURIComponent(id
);
100 id
? constants
.HTTP_HEADERS
.accept
.data
: constants
.HTTP_HEADERS
.accept
.collection
, {
101 'Authorization': req
.session
&& req
.session
.authorization
106 url
: utils
.projectContextUrl(req
, url
+ '?deep'),
108 headers
: requestHeaders
,
109 forever
: constants
.FOREVER_ON
,
110 rejectUnauthorized
: false
112 function(error
, response
, body
) {
114 var objKey
= 'rw-' + type
+ ':account';
115 //SDN model doesn't follow convention
116 if (utils
.validateResponse(type
.toUpperCase() + '.get', error
, response
, body
, resolve
, reject
)) {
118 data
= JSON
.parse(response
.body
);
120 data
= data
.collection
;
124 console
.log('Problem with "' + type
.toUpperCase() + '.get"', e
);
126 err
.statusCode
= 500;
128 error
: 'Problem with "' + type
.toUpperCase() + '.get": ' + e
133 statusCode
: response
.statusCode
,
141 function updateAccount(req
) {
143 var id
= req
.params
.id
|| req
.params
.name
;
144 var api_server
= req
.query
["api_server"];
145 var type
= nameSpace
[req
.params
.type
];
147 var requestHeaders
= {};
149 var url
= utils
.confdPort(api_server
) + '/api/config/' + type
//+ '/account';
153 if (type
== 'ro-account') {
154 createData
['rw-ro-account:account'] = Array
.isArray(data
) ? data
: [data
]
156 createData
['account'] = Array
.isArray(data
) ? data
: [data
]
158 console
.log('Creating ' + type
+ ' account: ', createData
);
161 url
+= '/account/' + encodeURIComponent(id
);
162 createData
['rw-' + type
+ ':account'] = Array
.isArray(data
) ? data
: [data
];
167 return new Promise(function(resolve
, reject
) {
168 _
.extend(requestHeaders
,
169 constants
.HTTP_HEADERS
.accept
.data
,
170 constants
.HTTP_HEADERS
.content_type
.data
, {
171 'Authorization': req
.session
&& req
.session
.authorization
174 url
: utils
.projectContextUrl(req
, url
),
176 headers
: requestHeaders
,
177 forever
: constants
.FOREVER_ON
,
178 rejectUnauthorized
: false,
180 }, function(error
, response
, body
) {
181 if (utils
.validateResponse(type
.toUpperCase() + '.' + method
, error
, response
, body
, resolve
, reject
)) {
183 statusCode
: response
.statusCode
,
184 data
: JSON
.stringify(response
.body
)
191 function deleteAccount(req
) {
193 var id
= req
.params
.id
|| req
.params
.name
;
194 var api_server
= req
.query
["api_server"];
195 var type
= nameSpace
[req
.params
.type
];
197 var requestHeaders
= {};
199 var url
= utils
.confdPort(api_server
) + '/api/config/' + type
;
200 url
+= '/account/' + encodeURIComponent(id
);
201 return new Promise(function(resolve
, reject
) {
202 _
.extend(requestHeaders
,
203 constants
.HTTP_HEADERS
.accept
.data
,
204 constants
.HTTP_HEADERS
.content_type
.data
, {
205 'Authorization': req
.session
&& req
.session
.authorization
208 url
: utils
.projectContextUrl(req
, url
),
210 headers
: requestHeaders
,
211 forever
: constants
.FOREVER_ON
,
212 rejectUnauthorized
: false,
213 }, function(error
, response
, body
) {
214 if (utils
.validateResponse(type
.toUpperCase() + '.DELETE', error
, response
, body
, resolve
, reject
)) {
216 statusCode
: response
.statusCode
,
217 data
: JSON
.stringify(response
.body
)
224 function refreshAccountConnectionStatus(req
) {
225 var api_server
= req
.query
['api_server'];
226 var Name
= req
.params
.name
;
227 var Type
= req
.params
.type
;
233 label
: 'sdn-account',
234 rpc
: 'update-sdn-status'
237 label
: 'cfg-agent-account',
238 rpc
: 'update-cfg-agent-status'
241 label
: 'cloud-account',
242 rpc
: 'update-cloud-status'
244 'resource-orchestrator': {
246 rpc
: 'update-ro-account-status'
249 jsonData
.input
[rpcInfo
[Type
].label
] = Name
;
250 var headers
= _
.extend({},
251 constants
.HTTP_HEADERS
.accept
.data
,
252 constants
.HTTP_HEADERS
.content_type
.data
, {
253 'Authorization': req
.session
&& req
.session
.authorization
256 var uri
= utils
.projectContextUrl(req
, utils
.confdPort(api_server
) + '/api/operations/' + rpcInfo
[Type
].rpc
);
258 jsonData
['input'] = utils
.addProjectContextToRPCPayload(req
, uri
, jsonData
['input']);
260 return new Promise(function(resolve
, reject
) {
266 forever
: constants
.FOREVER_ON
,
267 rejectUnauthorized
: false,
269 }, function(error
, response
, body
) {
270 if (utils
.validateResponse('RPC.refreshAccountConnectionStatus', error
, response
, body
, resolve
, reject
)) {
273 statusCode
: response
.statusCode
,
278 }).catch(function(error
) {
279 console
.log('Error refreshing account info');
283 function getResourceOrchestrator(req
, id
) {
285 var api_server
= req
.query
["api_server"];
286 var accountID
= req
.params
.id
|| req
.params
.name
;
288 return new Promise(function(resolve
, reject
) {
289 var requestHeaders
= {};
290 _
.extend(requestHeaders
,
291 constants
.HTTP_HEADERS
.accept
.collection
, {
292 'Authorization': req
.session
&& req
.session
.authorization
295 var urlOp
= utils
.projectContextUrl(req
, utils
.confdPort(api_server
) + APIVersion
+ '/api/operational/ro-account/account');
296 var urlConfig
= utils
.projectContextUrl(req
, utils
.confdPort(api_server
) + APIVersion
+ '/api/operational/ro-account-state/account');
298 urlOp
= url
+ '/' + encodeURIComponent(accountID
);
299 urlConfig
= url
+ '/' + encodeURIComponent(accountID
);
301 var allRequests
= [];
302 var roOpData
= new Promise(function(resolve
, reject
) {
306 headers
: requestHeaders
,
307 forever
: constants
.FOREVER_ON
,
308 rejectUnauthorized
: false
310 function(error
, response
, body
) {
312 if (utils
.validateResponse('RoAccount.get', error
, response
, body
, resolve
, reject
)) {
314 data
= JSON
.parse(response
.body
).collection
['rw-ro-account:account']
316 console
.log('Problem with "RoAccount.get"', e
);
318 err
.statusCode
= 500;
320 error
: 'Problem with "RoAccount.get": ' + e
// + e.toString()
325 statusCode
: response
.statusCode
,
332 var roConfigData
= new Promise(function(resolve
, reject
){
336 headers
: requestHeaders
,
337 forever
: constants
.FOREVER_ON
,
338 rejectUnauthorized
: false
340 function(error
, response
, body
) {
342 if (utils
.validateResponse('RoAccount.get', error
, response
, body
, resolve
, reject
)) {
344 data
= JSON
.parse(response
.body
).collection
['rw-ro-account:account']
346 console
.log('Problem with "RoAccount.get"', e
);
348 err
.statusCode
= 500;
350 error
: 'Problem with "RoAccount.get": ' + e
// + e.toString()
355 statusCode
: response
.statusCode
,
363 allRequests
.push(roOpData
);
364 allRequests
.push(roConfigData
);
365 Promise
.all(allRequests
).then(function(data
) {
366 var state
= data
[1].data
;
367 var op
= data
[0].data
;
371 state
.map
&& state
.map(function(s
){
372 if(s
.name
!= "rift") {
376 op
.map
&& op
.map(function(o
) {
377 if(o
.name
!= "rift") {
378 dict
[o
.name
] = _
.extend(dict
[o
.name
], o
);
381 Object
.keys(dict
).map(function(d
) {
382 result
.push(dict
[d
]);
385 result
= _
.extend(op
, state
);
396 module
.exports
= Accounts
;