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'
34 Accounts
.get = function(req
) {
35 return new Promise(function(resolve
, reject
) {
36 if (req
.params
.type
|| req
.params
.name
) {
38 .then(function(data
) {
41 data
: Object
.assign(data
, {
47 getAll(req
, resolve
, reject
);
51 function getAll(req
, resolve
, reject
) {
56 ]).then(function(result
) {
60 'config-agent': result
[2]
62 ReturnData
.cloud
.type
= 'cloud';
63 ReturnData
.sdn
.type
= 'sdn';
64 ReturnData
['config-agent'].type
= 'config';
73 Accounts
.update
= updateAccount
;
74 Accounts
.create
= updateAccount
;
75 Accounts
.delete = deleteAccount
;
76 Accounts
.refreshAccountConnectionStatus
= refreshAccountConnectionStatus
77 function getAccount(req
) {
78 return new Promise(function(resolve
, reject
) {
80 var api_server
= req
.query
["api_server"];
81 var id
= req
.params
.id
|| req
.params
.name
;
82 var requestHeaders
= {};
83 var type
= nameSpace
[req
.params
.type
];
84 var url
= utils
.confdPort(api_server
) + '/api/operational/' + type
;
85 //SDN model doesn't follow convention
86 if (type
!= 'sdn-account') {
95 id
? constants
.HTTP_HEADERS
.accept
.data
: constants
.HTTP_HEADERS
.accept
.collection
, {
96 'Authorization': req
.get('Authorization')
103 headers
: requestHeaders
,
104 forever
: constants
.FOREVER_ON
,
105 rejectUnauthorized
: false
107 function(error
, response
, body
) {
109 var objKey
= 'rw-' + type
+ ':account';
110 //SDN model doesn't follow convention
111 if (type
== 'sdn-account') {
112 objKey
= 'rw-sdn:sdn-account';
114 if (utils
.validateResponse(type
.toUpperCase() + '.get', error
, response
, body
, resolve
, reject
)) {
116 data
= JSON
.parse(response
.body
);
118 data
= data
.collection
;
123 console
.log('Problem with "' + type
.toUpperCase() + '.get"', e
);
125 err
.statusCode
= 500;
127 error
: 'Problem with "' + type
.toUpperCase() + '.get": ' + e
132 statusCode
: response
.statusCode
,
140 function updateAccount(req
) {
142 var id
= req
.params
.id
|| req
.params
.name
;
143 var api_server
= req
.query
["api_server"];
144 var type
= nameSpace
[req
.params
.type
];
146 var requestHeaders
= {};
148 var url
= utils
.confdPort(api_server
) + '/api/config/' + type
;
151 if (type
== 'sdn-account') {
153 'sdn-account': Array
.isArray(data
) ? data
: [data
]
157 'account': Array
.isArray(data
) ? data
: [data
]
160 console
.log('Creating ' + type
+ ' account: ', createData
);
163 if (type
== 'sdn-account') {
165 createData
['rw-sdn:sdn-account'] = Array
.isArray(data
) ? data
: [data
];
168 url
+= '/account/' + id
;
169 createData
['rw-' + type
+ ':account'] = Array
.isArray(data
) ? data
: [data
];
171 //createData = createData[0];
176 return new Promise(function(resolve
, reject
) {
177 _
.extend(requestHeaders
,
178 constants
.HTTP_HEADERS
.accept
.data
,
179 constants
.HTTP_HEADERS
.content_type
.data
, {
180 'Authorization': req
.get('Authorization')
185 headers
: requestHeaders
,
186 forever
: constants
.FOREVER_ON
,
187 rejectUnauthorized
: false,
189 }, function(error
, response
, body
) {
190 if (utils
.validateResponse(type
.toUpperCase() + '.' + method
, error
, response
, body
, resolve
, reject
)) {
192 statusCode
: response
.statusCode
,
193 data
: JSON
.stringify(response
.body
)
200 function deleteAccount(req
) {
202 var id
= req
.params
.id
|| req
.params
.name
;
203 var api_server
= req
.query
["api_server"];
204 var type
= nameSpace
[req
.params
.type
];
206 var requestHeaders
= {};
208 var url
= utils
.confdPort(api_server
) + '/api/config/' + type
;
209 if (type
== 'sdn-account') {
212 url
+= '/account/' + id
;
214 return new Promise(function(resolve
, reject
) {
215 _
.extend(requestHeaders
,
216 constants
.HTTP_HEADERS
.accept
.data
,
217 constants
.HTTP_HEADERS
.content_type
.data
, {
218 'Authorization': req
.get('Authorization')
223 headers
: requestHeaders
,
224 forever
: constants
.FOREVER_ON
,
225 rejectUnauthorized
: false,
226 }, function(error
, response
, body
) {
227 if (utils
.validateResponse(type
.toUpperCase() + '.DELETE', error
, response
, body
, resolve
, reject
)) {
229 statusCode
: response
.statusCode
,
230 data
: JSON
.stringify(response
.body
)
237 function refreshAccountConnectionStatus (req
) {
238 var api_server
= req
.query
['api_server'];
239 var Name
= req
.params
.name
;
240 var Type
= req
.params
.type
;
246 label
: 'sdn-account',
247 rpc
: 'update-sdn-status'
250 label
: 'cfg-agent-account',
251 rpc
: 'update-cfg-agent-status'
254 label
: 'cloud-account',
255 rpc
: 'update-cloud-status'
258 jsonData
.input
[rpcInfo
[Type
].label
] = Name
;
259 var headers
= _
.extend({},
260 constants
.HTTP_HEADERS
.accept
.data
,
261 constants
.HTTP_HEADERS
.content_type
.data
, {
262 'Authorization': req
.get('Authorization')
265 return new Promise(function(resolve
, reject
) {
268 uri
: utils
.confdPort(api_server
) + '/api/operations/' + rpcInfo
[Type
].rpc
,
271 forever
: constants
.FOREVER_ON
,
272 rejectUnauthorized
: false,
274 }, function(error
, response
, body
) {
275 if (utils
.validateResponse('RPC.refreshAccountConnectionStatus', error
, response
, body
, resolve
, reject
)) {
278 statusCode
: response
.statusCode
,
283 }).catch(function(error
) {
284 console
.log('Error refreshing account info');
288 module
.exports
= Accounts
;