Merge branch 'v1.0' 98/598/1
authorKIRAN KASHALKAR <kiran.kashalkar@riftio.com>
Thu, 3 Nov 2016 15:51:30 +0000 (15:51 +0000)
committerKIRAN KASHALKAR <kiran.kashalkar@riftio.com>
Thu, 3 Nov 2016 15:51:55 +0000 (15:51 +0000)
Signed-off-by: KIRAN KASHALKAR <kiran.kashalkar@riftio.com>
14 files changed:
skyquake/framework/core/api_utils/utils.js
skyquake/framework/core/modules/routes/configuration.js
skyquake/framework/utils/utils.js
skyquake/framework/widgets/skyquake_container/skyquakeContainerSource.js
skyquake/plugins/accounts/api/accounts.js
skyquake/plugins/accounts/api/sdn_account/sdnAccount.js
skyquake/plugins/accounts/src/account/account.jsx
skyquake/plugins/accounts/src/account/accountSource.js
skyquake/plugins/accounts/src/account/accountStore.js
skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js
skyquake/plugins/config/src/dashboard/configStore.js
skyquake/plugins/config/src/dashboard/dashboard.jsx
skyquake/plugins/launchpad/src/instantiate/instantiateStore.js
skyquake/plugins/launchpad/src/instantiate/launchNetworkServiceSource.js

index 163769a..0d1990c 100644 (file)
@@ -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
 };
index 3a686f0..b789ff0 100644 (file)
@@ -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;
index d08fe5f..7442027 100644 (file)
@@ -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;
index 03bc7ef..49356a4 100644 (file)
@@ -40,6 +40,7 @@ export default {
                         type: 'GET',
                         // beforeSend: Utils.addAuthorizationStub,
                         success: function(data) {
+                            Utils.detectInactivity();
                             resolve(data);
                         }
                     })
index 1b51c7b..ec74f51 100644 (file)
@@ -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,
index c2b592d..6757c28 100644 (file)
@@ -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,
index c40e627..45b31fc 100644 (file)
@@ -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 {
                     <div className="accountForm-content" style={{display: 'flex', justifyContent: 'space-between', alignItems: 'center'}}>
                         <div style={{display: 'flex', justifyContent: 'space-between', alignItems: 'center'}}>
                             <AccountConnectivityStatus status={Account['connection-status'].status} />
-                            {Account['connection-status'].status.toUpperCase()}
+                            {Account['connection-status'] && Account['connection-status'].status &&  Account['connection-status'].status.toUpperCase()}
                         </div>
                             <Button className="refreshList light" onClick={this.props.store.refreshAccount.bind(this, Account.name, AccountType)} label="REFRESH STATUS"></Button>
                     </div>
                     {
-                        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
                     }
                 </div>
index 4506724..c0fd36b 100644 (file)
@@ -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({
index 002a9e1..1267fab 100644 (file)
@@ -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
-
-
- *
- *
- */
index 59d2f95..a2373e6 100644 (file)
@@ -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) => {
index c5ba696..54f3568 100644 (file)
@@ -52,7 +52,7 @@ let AccountMeta = {
     }
 }
 
-export default class AccountStore {
+export default class ConfigStore {
     constructor() {
         this.account = {};
         this.accountType = 'openmano';
index b8a743f..99bff06 100644 (file)
@@ -123,7 +123,6 @@ class ConfigDashboard extends React.Component {
                             }
                 </div>
                 <div className="form-actions">
-                    <Button  className="light" label="Cancel" />
                     <Button key="4" role="button" className="update dark" label="Update"  onClick={this.updateAccount} />
                 </div>
             </form>
index 4807816..94ba391 100644 (file)
@@ -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
index 1b2d526..6c5daaa 100644 (file)
@@ -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);
           });
         })
       },