From: KIRAN KASHALKAR Date: Thu, 3 Nov 2016 15:51:30 +0000 (+0000) Subject: Merge branch 'v1.0' X-Git-Tag: v1.1.0~48 X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FUI.git;a=commitdiff_plain;h=05b0bf7615e179d26d14d5d40f021fa3db9142a6;hp=1c4e067633433743b4879abbde59518c5b2902e2 Merge branch 'v1.0' Signed-off-by: KIRAN KASHALKAR --- diff --git a/skyquake/framework/core/api_utils/utils.js b/skyquake/framework/core/api_utils/utils.js index 163769a98..0d1990c64 100644 --- a/skyquake/framework/core/api_utils/utils.js +++ b/skyquake/framework/core/api_utils/utils.js @@ -1,5 +1,5 @@ /* - * + * * Copyright 2016 RIFT.IO Inc * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -233,5 +233,5 @@ module.exports = { sendSuccessResponse: sendSuccessResponse, - passThroughConstructor: passThroughConstructor + passThroughConstructor: passThroughConstructor }; diff --git a/skyquake/framework/core/modules/routes/configuration.js b/skyquake/framework/core/modules/routes/configuration.js index 3a686f094..b789ff043 100644 --- a/skyquake/framework/core/modules/routes/configuration.js +++ b/skyquake/framework/core/modules/routes/configuration.js @@ -1,6 +1,6 @@ /* - * + * * Copyright 2016 RIFT.IO Inc * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,7 +18,7 @@ */ /** - * Node configuration routes module. + * Node configuration routes module. * Provides a RESTful API to provide configuration * details such as api_server. * @module framework/core/modules/routes/configuration @@ -30,6 +30,9 @@ var bodyParser = require('body-parser'); var configurationAPI = require('../api/configuration'); var Router = require('express').Router(); var utils = require('../../api_utils/utils'); +var CONSTANTS = require('../../api_utils/constants.js'); +var request = require('request'); +var _ = require('lodash'); Router.use(bodyParser.json()); Router.use(cors()); @@ -48,9 +51,43 @@ Router.put('/server-configuration', cors(), function(req, res) { Router.get('/server-configuration', cors(), function(req, res) { configurationAPI.get(req).then(function(data) { utils.sendSuccessResponse(data, res); - }, function(error) { - utils.sendErrorResponse(error, res); - }); + }, function(error) { + utils.sendErrorResponse(error, res); + }); +}); + +Router.get('/check-auth', function(req, res) { + console.log('testing auth') + var api_server = req.query["api_server"]; + var uri = utils.confdPort(api_server) + '/api/config/'; + + checkAuth(uri, req).then(function(data) { + utils.sendSuccessResponse(data, res); + }, function(error) { + utils.sendErrorResponse(error, res); + }); }); +function checkAuth(uri, req){ + return new Promise(function(resolve, reject) { + request({ + uri: uri, + method: 'GET', + headers: _.extend({}, { + 'Authorization': req.get('Authorization'), + forever: CONSTANTS.FOREVER_ON, + rejectUnauthorized: false, + }) + }, function(error, response, body) { + console.log(arguments) + if( response.statusCode == 401) { + reject({statusCode: 401, error: response.body}); + } else { + resolve({statusCode:200, data:response.body}) + } + }); + }); +} + + module.exports = Router; diff --git a/skyquake/framework/utils/utils.js b/skyquake/framework/utils/utils.js index d08fe5f83..744202731 100644 --- a/skyquake/framework/utils/utils.js +++ b/skyquake/framework/utils/utils.js @@ -1,5 +1,5 @@ /* - * + * * Copyright 2016 RIFT.IO Inc * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ var AuthActions = require('../widgets/login/loginAuthActions.js'); var $ = require('jquery'); var rw = require('utils/rw.js'); var API_SERVER = rw.getSearchParams(window.location).api_server; -var NODE_PORT = 3000; +let NODE_PORT = require('utils/rw.js').getSearchParams(window.location).api_port || ((window.location.protocol == 'https:') ? 8443 : 8000); var SockJS = require('sockjs-client'); var Utils = {}; @@ -188,9 +188,20 @@ Utils.setAuthentication = function(username, password, cb) { var AuthBase64 = btoa(username + ":" + password); window.sessionStorage.setItem("auth", AuthBase64); self.detectInactivity(); - if (cb) { - cb(); - } + $.ajax({ + url: '//' + window.location.hostname + ':' + NODE_PORT + '/check-auth?api_server=' + API_SERVER, + type: 'GET', + beforeSend: Utils.addAuthorizationStub, + success: function(data) { + //console.log("LoggingSource.getLoggingConfig success call. data=", data); + if (cb) { + cb(); + }; + }, + error: function(data) { + Utils.clearAuthentication(); + } + }); } Utils.clearAuthentication = function(callback) { var self = this; diff --git a/skyquake/framework/widgets/skyquake_container/skyquakeContainerSource.js b/skyquake/framework/widgets/skyquake_container/skyquakeContainerSource.js index 03bc7efe1..49356a424 100644 --- a/skyquake/framework/widgets/skyquake_container/skyquakeContainerSource.js +++ b/skyquake/framework/widgets/skyquake_container/skyquakeContainerSource.js @@ -40,6 +40,7 @@ export default { type: 'GET', // beforeSend: Utils.addAuthorizationStub, success: function(data) { + Utils.detectInactivity(); resolve(data); } }) diff --git a/skyquake/plugins/accounts/api/accounts.js b/skyquake/plugins/accounts/api/accounts.js index 1b51c7bfe..ec74f51e7 100644 --- a/skyquake/plugins/accounts/api/accounts.js +++ b/skyquake/plugins/accounts/api/accounts.js @@ -1,5 +1,5 @@ /* - * + * * Copyright 2016 RIFT.IO Inc * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,7 +28,7 @@ var ConfigAgent = require('./config_agent/configAgent') var Accounts = {}; var nameSpace = { cloud: 'cloud', - sdn: 'sdn-account', + sdn: 'sdn', 'config-agent': 'config-agent' }; Accounts.get = function(req) { @@ -42,7 +42,9 @@ Accounts.get = function(req) { type: req.params.type }) }); - }) + }, function(reason) { + reject(reason); + }) } else { getAll(req, resolve, reject); } @@ -66,6 +68,8 @@ Accounts.get = function(req) { statusCode: 200, data: ReturnData }); + }, function(reason) { + reject(reason); }) } } @@ -81,11 +85,7 @@ function getAccount(req) { var id = req.params.id || req.params.name; var requestHeaders = {}; var type = nameSpace[req.params.type]; - var url = utils.confdPort(api_server) + '/api/operational/' + type; - //SDN model doesn't follow convention - if (type != 'sdn-account') { - url += '/account'; - } + var url = utils.confdPort(api_server) + '/api/operational/' + type + '/account'; if (id) { url += '/' + id; } @@ -108,16 +108,12 @@ function getAccount(req) { var data; var objKey = 'rw-' + type + ':account'; //SDN model doesn't follow convention - if (type == 'sdn-account') { - objKey = 'rw-sdn:sdn-account'; - } if (utils.validateResponse(type.toUpperCase() + '.get', error, response, body, resolve, reject)) { try { data = JSON.parse(response.body); if (!id) { data = data.collection; } - data = data[objKey] } catch (e) { console.log('Problem with "' + type.toUpperCase() + '.get"', e); @@ -148,27 +144,14 @@ function updateAccount(req) { var url = utils.confdPort(api_server) + '/api/config/' + type; var method = 'POST' if (!id) { - if (type == 'sdn-account') { - createData = { - 'sdn-account': Array.isArray(data) ? data : [data] - } - } else { - createData = { - 'account': Array.isArray(data) ? data : [data] - } + createData = { + 'account': Array.isArray(data) ? data : [data] } console.log('Creating ' + type + ' account: ', createData); } else { method = 'PUT'; - if (type == 'sdn-account') { - url += '/' + id; - createData['rw-sdn:sdn-account'] = Array.isArray(data) ? data : [data]; - - } else { - url += '/account/' + id; - createData['rw-' + type + ':account'] = Array.isArray(data) ? data : [data]; - } - //createData = createData[0]; + url += '/account/' + id; + createData['rw-' + type + ':account'] = Array.isArray(data) ? data : [data]; } @@ -206,11 +189,7 @@ function deleteAccount(req) { var requestHeaders = {}; var createData = {}; var url = utils.confdPort(api_server) + '/api/config/' + type; - if (type == 'sdn-account') { - url += '/' + id; - } else { - url += '/account/' + id; - } + url += '/account/' + id; return new Promise(function(resolve, reject) { _.extend(requestHeaders, constants.HTTP_HEADERS.accept.data, diff --git a/skyquake/plugins/accounts/api/sdn_account/sdnAccount.js b/skyquake/plugins/accounts/api/sdn_account/sdnAccount.js index c2b592dde..6757c2891 100644 --- a/skyquake/plugins/accounts/api/sdn_account/sdnAccount.js +++ b/skyquake/plugins/accounts/api/sdn_account/sdnAccount.js @@ -1,5 +1,5 @@ /* - * + * * Copyright 2016 RIFT.IO Inc * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -41,7 +41,7 @@ Sdn.get = function(req) { 'Authorization': req.get('Authorization') }); request({ - url: utils.confdPort(api_server) + '/api/operational/sdn-account?deep', + url: utils.confdPort(api_server) + '/api/operational/sdn/account?deep', type: 'GET', headers: requestHeaders, forever: constants.FOREVER_ON, @@ -51,7 +51,7 @@ Sdn.get = function(req) { var data; if (utils.validateResponse('Sdn.get', error, response, body, resolve, reject)) { try { - data = JSON.parse(response.body).collection['rw-sdn:sdn-account'] + data = JSON.parse(response.body).collection['rw-sdn:account'] } catch (e) { console.log('Problem with "Sdn.get"', e); @@ -81,7 +81,7 @@ Sdn.get = function(req) { }); request({ - url: utils.confdPort(api_server) + '/api/operational/sdn-account/' + id + '?deep', + url: utils.confdPort(api_server) + '/api/operational/sdn/account/' + id + '?deep', type: 'GET', headers: requestHeaders, forever: constants.FOREVER_ON, @@ -91,7 +91,7 @@ Sdn.get = function(req) { var data; if (utils.validateResponse('Sdn.get', error, response, body, resolve, reject)) { try { - data = JSON.parse(response.body)['rw-sdn:sdn-account']; + data = JSON.parse(response.body)['rw-sdn:sdn']; } catch (e) { console.log('Problem with "Sdn.get"', e); @@ -134,7 +134,7 @@ Sdn.create = function(req) { }); request({ - url: utils.confdPort(api_server) + '/api/config/sdn-account', + url: utils.confdPort(api_server) + '/api/config/sdn/account', method: 'POST', headers: requestHeaders, forever: constants.FOREVER_ON, @@ -159,7 +159,7 @@ Sdn.update = function(req) { return new Promise(function(resolve, reject) { var jsonData = { - "rw-sdn:sdn-account": data + "rw-sdn:sdn": data }; console.log('Updating SDN account ', id, ' with', JSON.stringify(jsonData)); @@ -172,7 +172,7 @@ Sdn.update = function(req) { }); request({ - url: utils.confdPort(api_server) + '/api/config/sdn-account/' + id, + url: utils.confdPort(api_server) + '/api/config/sdn/account/' + id, method: 'PUT', headers: requestHeaders, forever: constants.FOREVER_ON, @@ -215,7 +215,7 @@ Sdn.delete = function(req) { }); request({ - url: utils.confdPort(api_server) + '/api/config/sdn-account/' + id, + url: utils.confdPort(api_server) + '/api/config/sdn/account/' + id, method: 'DELETE', headers: requestHeaders, forever: constants.FOREVER_ON, diff --git a/skyquake/plugins/accounts/src/account/account.jsx b/skyquake/plugins/accounts/src/account/account.jsx index c40e62737..45b31fcf6 100644 --- a/skyquake/plugins/accounts/src/account/account.jsx +++ b/skyquake/plugins/accounts/src/account/account.jsx @@ -1,5 +1,5 @@ /* - * + * * Copyright 2016 RIFT.IO Inc * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -47,6 +47,7 @@ class Account extends React.Component { } } componentWillUnmount() { + this.props.store.closeSocket(); this.props.store.unlisten(this.storeListener); } setUp(props){ @@ -328,12 +329,12 @@ class Account extends React.Component {
- {Account['connection-status'].status.toUpperCase()} + {Account['connection-status'] && Account['connection-status'].status && Account['connection-status'].status.toUpperCase()}
{ - Account['connection-status'].status.toUpperCase() === 'FAILURE' ? + (Account['connection-status'] && Account['connection-status'].status && Account['connection-status'].status.toUpperCase()) === 'FAILURE' ? displayFailureMessage(Account['connection-status'].details) : null } diff --git a/skyquake/plugins/accounts/src/account/accountSource.js b/skyquake/plugins/accounts/src/account/accountSource.js index 45067247a..c0fd36b3d 100644 --- a/skyquake/plugins/accounts/src/account/accountSource.js +++ b/skyquake/plugins/accounts/src/account/accountSource.js @@ -34,6 +34,7 @@ module.exports = function(Alt) { return new Promise(function(resolve, reject) { //If socket connection already exists, eat the request. if(state.socket) { + console.log('connection already exists') return resolve(false); } $.ajax({ diff --git a/skyquake/plugins/accounts/src/account/accountStore.js b/skyquake/plugins/accounts/src/account/accountStore.js index 002a9e10c..1267fab27 100644 --- a/skyquake/plugins/accounts/src/account/accountStore.js +++ b/skyquake/plugins/accounts/src/account/accountStore.js @@ -18,7 +18,7 @@ import AccountActions from './accountActions.js'; import AccountSource from './accountSource.js'; - +var Utils = require('utils/utils.js'); var rw = require('utils/rw.js'); var altImage = rw.getSearchParams(window.location).alt_image; @@ -252,7 +252,6 @@ export default class AccountStore { openAccountSocketSuccess = (connection) => { let self = this; let ws = window.multiplexer.channel(connection); - if (!connection) return; this.setState({ socket: ws.ws, @@ -261,6 +260,9 @@ export default class AccountStore { ws.onmessage = (socket) => { try { var data = JSON.parse(socket.data); + Utils.checkAuthentication(data.statusCode, function() { + self.closeSocket(); + }); let SdnOptions = [{ label: 'Select an SDN Account', value: false @@ -350,7 +352,7 @@ export default class AccountStore { } generateOptionsByName(data) { let results = []; - if (data.constructor.name == "Array") { + if (data && data.constructor.name == "Array") { data.map(function(d) { results.push({ label: d.name, @@ -407,18 +409,3 @@ export default class AccountStore { } } - -/** - *Cloud - * - * {"name":"eng2","account-type":"openstack","openstack":{"key":"lmaultsb","secret":"mypasswd","auth_url":"http://engstack.eng.riftio.com:5000/v3/","tenant":"lmaultsb","mgmt-network":"private"}} -Name -Path - - -SDN - - - * - * - */ diff --git a/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js b/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js index 59d2f95d6..a2373e646 100644 --- a/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js +++ b/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js @@ -182,7 +182,7 @@ export default function EditDescriptorModelProperties(props) { const onFocus = onFocusPropertyFormInputElement.bind(container, property, path, value); const placeholder = changeCase.title(property.name); const className = ClassNames(property.name + '-input', {'-is-guid': isGuid}); - const fieldValue = value ? value.constructor.name == "String" ? value : '' : undefined; + const fieldValue = value ? (value.constructor.name != "Object") ? value : '' : undefined; if (isEnumeration) { const enumeration = Property.getEnumeration(property, value); const options = enumeration.map((d, i) => { diff --git a/skyquake/plugins/config/src/dashboard/configStore.js b/skyquake/plugins/config/src/dashboard/configStore.js index c5ba696cd..54f3568e6 100644 --- a/skyquake/plugins/config/src/dashboard/configStore.js +++ b/skyquake/plugins/config/src/dashboard/configStore.js @@ -52,7 +52,7 @@ let AccountMeta = { } } -export default class AccountStore { +export default class ConfigStore { constructor() { this.account = {}; this.accountType = 'openmano'; diff --git a/skyquake/plugins/config/src/dashboard/dashboard.jsx b/skyquake/plugins/config/src/dashboard/dashboard.jsx index b8a743fc4..99bff0681 100644 --- a/skyquake/plugins/config/src/dashboard/dashboard.jsx +++ b/skyquake/plugins/config/src/dashboard/dashboard.jsx @@ -123,7 +123,6 @@ class ConfigDashboard extends React.Component { }
-
diff --git a/skyquake/plugins/launchpad/src/instantiate/instantiateStore.js b/skyquake/plugins/launchpad/src/instantiate/instantiateStore.js index 480781685..94ba391bb 100644 --- a/skyquake/plugins/launchpad/src/instantiate/instantiateStore.js +++ b/skyquake/plugins/launchpad/src/instantiate/instantiateStore.js @@ -156,7 +156,7 @@ class LaunchNetworkServiceStore { let newState = { dataCenters: dataCenters || [] }; - if (this.ro['account-type'] == 'openmano') { + if (this.ro && this.ro['account-type'] == 'openmano') { newState.dataCenterID = dataCenters[this.ro.name][0].uuid } this.setState(newState) @@ -183,7 +183,11 @@ class LaunchNetworkServiceStore { return window.location.hash = 'launchpad/' + tokenizedHash[2]; } launchNSRError(error) { - Alt.actions.global.showError.defer('Something went wrong while trying to instantiate. Check the error logs for more information'); + var msg = 'Something went wrong while trying to instantiate. Check the error logs for more information'; + if(error) { + msg = error; + } + Alt.actions.global.showNotification.defer(msg); Alt.actions.global.hideScreenLoader.defer(); this.setState({ isLoading: false diff --git a/skyquake/plugins/launchpad/src/instantiate/launchNetworkServiceSource.js b/skyquake/plugins/launchpad/src/instantiate/launchNetworkServiceSource.js index 1b2d52675..6c5daaafc 100644 --- a/skyquake/plugins/launchpad/src/instantiate/launchNetworkServiceSource.js +++ b/skyquake/plugins/launchpad/src/instantiate/launchNetworkServiceSource.js @@ -128,7 +128,16 @@ export default function(Alt){ }).fail(function(xhr){ //Authentication and the handling of fail states should be wrapped up into a connection class. Utils.checkAuthentication(xhr.status); - reject(); + var error; + if(xhr.responseText) { + try { + error = JSON.parse(xhr.responseText); + error = JSON.parse(error.error)['rpc-reply']['rpc-error']['error-message']; + } catch(e){ + console.log(e); + } + } + reject(error); }); }) },