Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-843 c92da1671 -> 2a8445dee


# 843 WIP Login page.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/2a8445de
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/2a8445de
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/2a8445de

Branch: refs/heads/ignite-843
Commit: 2a8445dee324ab274ee7492a493b742a22d179e7
Parents: c92da16
Author: Andrey <anovi...@gridgain.com>
Authored: Wed May 27 11:19:42 2015 +0700
Committer: Andrey <anovi...@gridgain.com>
Committed: Wed May 27 11:19:42 2015 +0700

----------------------------------------------------------------------
 modules/webconfig/nodejs/db.js                  |  16 +-
 .../public/javascripts/controllers/clusters.js  | 217 +++++++++----------
 .../public/javascripts/controllers/common.js    |   8 +-
 modules/webconfig/nodejs/routes/auth.js         |  52 +++--
 modules/webconfig/nodejs/routes/clusters.js     |  80 +++----
 modules/webconfig/nodejs/views/clusters.jade    |   2 +-
 6 files changed, 203 insertions(+), 172 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2a8445de/modules/webconfig/nodejs/db.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/db.js b/modules/webconfig/nodejs/db.js
index b6cbf43..89ced0f 100644
--- a/modules/webconfig/nodejs/db.js
+++ b/modules/webconfig/nodejs/db.js
@@ -6,10 +6,10 @@ var mongoose = require('mongoose'),
     ObjectId = mongoose.Schema.Types.ObjectId,
     passportLocalMongoose = require('passport-local-mongoose');
 
-// Connect to mongoDB database on modulus.io.
+// Connect to mongoDB database.
 mongoose.connect(config.get('mongoDB:url'), {server: {poolSize: 4}});
 
-// Define user model.
+// Define account model.
 var AccountSchema = new Schema({
     username: String
 });
@@ -44,3 +44,15 @@ exports.Cache =  mongoose.model('Cache', new Schema({
     backups: Number,
     clusters: [{ type: ObjectId, ref: 'Cluster' }]
 }));
+
+exports.upsert = function(model, data, cb){
+    if (data._id) {
+        var id = data._id;
+
+        delete data._id;
+
+        model.findOneAndUpdate({_id: id}, data, cb);
+    }
+    else
+        model.create(data, cb);
+};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2a8445de/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
----------------------------------------------------------------------
diff --git 
a/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js 
b/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
index 36a04e4..0884109 100644
--- a/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
+++ b/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
@@ -1,130 +1,129 @@
-configuratorModule.controller('clustersController',
-    ['$scope', '$modal', '$http', '$filter', 'ngTableParams',
-        function ($scope, $modal, $http, $filter, ngTableParams) {
-            $scope.edit = {};
-            $scope.editRow = {};
-            $scope.editIdx = false;
-
-            $scope.discoveries = [
-                {value: 'TcpDiscoveryVmIpFinder', label: 'Static IPs'},
-                {value: 'TcpDiscoveryMulticastIpFinder', label: 'Multicast'}
-            ];
-
-            $scope.discoveryAsString = function (value) {
-                for (var i in $scope.discoveries) {
-                    if ($scope.discoveries[i].value == value)
-                        return $scope.discoveries[i].label;
-                }
-
-                return 'Wrong discovery';
-            };
-
-            // When landing on the page, get clusters and show them.
-            $http.get('/rest/clusters')
-                .success(function (data) {
-                    $scope.clusters = data;
-
-                    $scope.clustersTable = new ngTableParams({
-                        page: 1,                    // Show first page.
-                        count: Number.MAX_VALUE,    // Count per page.
-                        sorting: {name: 'asc'}      // Initial sorting.
-                    }, {
-                        total: $scope.clusters.length, // Length of data.
-                        counts: [],
-                        getData: function ($defer, params) {
-                            // Use build-in angular filter.
-                            var orderedData = params.sorting() ?
-                                $filter('orderBy')($scope.clusters, 
params.orderBy()) :
-                                $scope.clusters;
-
-                            var page = params.page();
-                            var cnt = params.count();
-                            $defer.resolve(orderedData.slice(page - 1 * cnt, 
page * cnt));
-                        }
-                    });
-                })
-                .error(function (data) {
-                    $scope.text = data;
-                });
+configuratorModule.controller('clustersController', [ '$scope', '$modal', 
'$http', '$filter', 'ngTableParams',
+    function ($scope, $modal, $http, $filter, ngTableParams) {
+        $scope.edit = {};
+        $scope.editRow = {};
+        $scope.editIdx = false;
+
+        $scope.discoveries = [
+            {value: 'TcpDiscoveryVmIpFinder', label: 'Static IPs'},
+            {value: 'TcpDiscoveryMulticastIpFinder', label: 'Multicast'}
+        ];
+
+        $scope.discoveryAsString = function (value) {
+            for (var i in $scope.discoveries) {
+                if ($scope.discoveries[i].value == value)
+                    return $scope.discoveries[i].label;
+            }
 
-            // Create popup for discovery advanced settings.
-            var discoveryModal = $modal({scope: $scope, template: 
'/discovery', show: false});
+            return 'Wrong discovery';
+        };
+
+        // When landing on the page, get clusters and show them.
+        $http.get('/rest/clusters')
+            .success(function (data) {
+                $scope.spaces = data.spaces;
+                $scope.clusters = data.clusters;
+
+                $scope.clustersTable = new ngTableParams({
+                    page: 1,                    // Show first page.
+                    count: Number.MAX_VALUE,    // Count per page.
+                    sorting: {name: 'asc'}     // Initial sorting.
+                }, {
+                    total: $scope.clusters.length, // Length of data.
+                    counts: [],
+                    getData: function ($defer, params) {
+                        // Use build-in angular filter.
+                        var orderedData = params.sorting() ?
+                            $filter('orderBy')($scope.clusters, 
params.orderBy()) :
+                            $scope.clusters;
+
+                        var page = params.page();
+                        var cnt = params.count();
+
+                        $defer.resolve(orderedData.slice(page - 1 * cnt, page 
* cnt));
+                    }
+                });
+            });
 
-            $scope.editDiscovery = function (cluster) {
-                console.log('>>> editDiscovery');
+        // Create popup for discovery advanced settings.
+        var discoveryModal = $modal({scope: $scope, template: '/discovery', 
show: false});
 
-                discoveryModal.$promise.then(discoveryModal.show);
-            }
+        $scope.editDiscovery = function (cluster) {
+            discoveryModal.$promise.then(discoveryModal.show);
+        };
 
-            $scope.submit = function () {
-                if ($scope.editIdx !== false) {
-                    var cluster = $scope.clusters[$scope.editIdx];
+        $scope.submit = function () {
+            if ($scope.editIdx !== false) {
+                console.log($scope.$data);
 
-                    var data = {
-                        _id: cluster._id,
-                        name: cluster.name,
-                        discovery: cluster.discovery,
-                        addresses: ['127.0.0.1', '192.168.1.1']
-                    };
+                var cluster = $scope.clusters[$scope.editIdx];
 
-                    $scope.editIdx = false;
+                var data = {
+                    _id: cluster._id,
+                    space: cluster.space,
+                    name: cluster.name,
+                    discovery: cluster.discovery,
+                    addresses: ['127.0.0.1', '192.168.1.1']
+                };
 
-                    $http.post('/rest/clusters/save', data)
-                        .success(function (data) {
-                            myOtherModal.hide();
+                $scope.editIdx = false;
 
-                            $scope.clusters = data;
+                $http.post('/rest/clusters/save', data)
+                    .success(function (data) {
+                        myOtherModal.hide();
 
-                            $scope.clustersTable.reload();
-                        })
-                        .error(function (data) {
-                            console.log('Error: ' + data);
-                        });
-                }
-            };
+                        $scope.spaces = data.spaces;
+                        $scope.clusters = data.clusters;
 
-            // Add new cluster.
-            $scope.add = function () {
-//                $scope.clusters.push({name: 'Cluster', discovery: 
'TcpDiscoveryVmIpFinder'});
-                $scope.clusters.push({});
+                        $scope.clustersTable.reload();
+                    })
+                    .error(function (errorMessage) {
+                        console.log('Error: ' + errorMessage);
+                    });
+            }
+        };
 
-                $scope.clustersTable.reload();
+        // Add new cluster.
+        $scope.add = function () {
+            // $scope.clusters.push({name: 'Cluster', discovery: 
'TcpDiscoveryVmIpFinder'});
+            $scope.clusters.push({space: $scope.spaces[0]._id});
 
-                // Show when some event occurs (use $promise property to 
ensure the template has been loaded)
-                //myOtherModal.$promise.then(myOtherModal.show);
-            };
+            $scope.clustersTable.reload();
+        };
 
-            $scope.beginEdit = function (cluster) {
-                $scope.editIdx = $scope.clusters.indexOf(cluster);
+        $scope.beginEdit = function (cluster) {
+            $scope.editIdx = $scope.clusters.indexOf(cluster);
 
-                $scope.editRow = angular.copy(cluster);
+            $scope.editRow = angular.copy(cluster);
 
-                //// Show when some event occurs (use $promise property to 
ensure the template has been loaded)
-                //myOtherModal.$promise.then(myOtherModal.show);
-            };
+            //// Show when some event occurs (use $promise property to ensure 
the template has been loaded)
+            //myOtherModal.$promise.then(myOtherModal.show);
+        };
 
-            $scope.revert = function () {
-                if ($scope.editIdx !== false) {
-                    $scope.clusters[$scope.editIdx] = $scope.editRow;
+        $scope.revert = function () {
+            if ($scope.editIdx !== false) {
+                $scope.clusters[$scope.editIdx] = $scope.editRow;
 
-                    $scope.editIdx = false;
+                $scope.editIdx = false;
 
-                    $scope.clustersTable.reload();
-                }
+                $scope.clustersTable.reload();
+            }
 
-                //// Show when some event occurs (use $promise property to 
ensure the template has been loaded)
-                //myOtherModal.$promise.then(myOtherModal.show);
-            };
+            //// Show when some event occurs (use $promise property to ensure 
the template has been loaded)
+            //myOtherModal.$promise.then(myOtherModal.show);
+        };
 
-            $scope.delete = function (cluster) {
-                $http.post('/rest/clusters/remove', {_id: cluster._id})
-                    .success(function (data) {
-                        $scope.clusters = data;
+        $scope.delete = function (cluster) {
+            $http.post('/rest/clusters/remove', {_id: cluster._id})
+                .success(function (data) {
+                    $scope.spaces = data.spaces;
+                    $scope.clusters = data.clusters;
 
-                        $scope.clustersTable.reload();
-                    })
-                    .error(function (data) {
-                        console.log('Error: ' + data);
-                    });
-            };
-        }]);
\ No newline at end of file
+                    $scope.clustersTable.reload();
+                })
+                .error(function (errorMessage) {
+                    console.log('Error: ' + errorMessage);
+                });
+        };
+    }]
+);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2a8445de/modules/webconfig/nodejs/public/javascripts/controllers/common.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/controllers/common.js 
b/modules/webconfig/nodejs/public/javascripts/controllers/common.js
index 5f91d7e..3a9ef07 100644
--- a/modules/webconfig/nodejs/public/javascripts/controllers/common.js
+++ b/modules/webconfig/nodejs/public/javascripts/controllers/common.js
@@ -6,7 +6,7 @@ configuratorModule.controller('activeLink', ['$scope', 
function($scope) {
     };
 }]);
 
-configuratorModule.controller('auth', ['$scope', '$modal', '$http', 
function($scope, $modal, $http) {
+configuratorModule.controller('auth', ['$scope', '$modal', '$http', '$window', 
function($scope, $modal, $http, $window) {
     $scope.action = 'login';
 
     $scope.errorMessage = '';
@@ -24,13 +24,11 @@ configuratorModule.controller('auth', ['$scope', '$modal', 
'$http', function($sc
     $scope.auth = function(action, user_info) {
         $http.post('/rest/auth/' + action, user_info)
             .success(function(data) {
-                console.log(data);
-
                 authModal.hide();
+
+                $window.location = '/clusters';
             })
             .error(function (data) {
-                console.log(data);
-
                 $scope.errorMessage = data;
             });
     };

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2a8445de/modules/webconfig/nodejs/routes/auth.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/auth.js 
b/modules/webconfig/nodejs/routes/auth.js
index 9efa48a..41be291 100644
--- a/modules/webconfig/nodejs/routes/auth.js
+++ b/modules/webconfig/nodejs/routes/auth.js
@@ -3,37 +3,53 @@ var router = require('express').Router();
 
 var db = require('../db');
 
-var loginCallback = function(req, res, next) {
-    return function(err, user) {
+/**
+ * Register new account.
+ */
+router.post('/register', function(req, res, next) {
+    db.Account.register(new db.Account(req.body), req.body.password, 
function(err, account) {
         if (err)
-            return res.status(400).send(err.message);
+            return res.status(401).send(err.message);
 
-        if (!user)
-            return res.status(400).send('Account with this email not exist.');
+        if (!account)
+            return res.status(500).send('Failed to create account.');
 
-        req.logIn(user, {}, function(err) {
+        new db.Space({name: 'Personal space', owner: account._id}).create();
+
+        req.logIn(account, {}, function(err) {
             if (err)
-                return res.status(400).send(err.message);
+                return res.status(401).send(err.message);
 
-            res.redirect('/clusters');
+            return res.redirect('/clusters');
         });
-    };
-};
-
-router.post('/register', function(req, res, next) {
-    var account = new db.Account(req.body);
-
-    db.Account.register(account, req.body.password, loginCallback(req, res, 
next));
+    });
 });
 
+/**
+ * Login in exist account.
+ */
 router.post('/login', function(req, res, next) {
-    passport.authenticate('local', loginCallback(req, res, next))(req, res, 
next);
+    passport.authenticate('local', function(err, user) {
+        if (err)
+            return res.status(401).send(err.message);
+
+        if (!user)
+            return res.status(401).send('Account with this email not exist.');
+
+        req.logIn(user, {}, function(err) {
+            if (err)
+                return res.status(401).send(err.message);
+
+            res.redirect('/clusters');
+        });
+    })(req, res, next);
 });
 
+/**
+ * Logout.
+ */
 router.get('/logout', function(req, res) {
     req.logout();
-
-    res.redirect('/');
 });
 
 module.exports = router;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2a8445de/modules/webconfig/nodejs/routes/clusters.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/clusters.js 
b/modules/webconfig/nodejs/routes/clusters.js
index ea85232..d82fbea 100644
--- a/modules/webconfig/nodejs/routes/clusters.js
+++ b/modules/webconfig/nodejs/routes/clusters.js
@@ -1,56 +1,62 @@
-var express = require('express');
-
-var router = express.Router();
-
+var router = require('express').Router();
 var db = require('../db');
 
-function selectAll(user_id, res) {
-    db.Cluster.find(function(err, clusters) {
-        // if there is an error retrieving, send the error. nothing after 
res.send(err) will execute
+/**
+ * Send spaces and clusters accessed for user account.
+ *
+ * @param req Request.
+ * @param res Response.
+ */
+function selectAll(req, res) {
+    var user_id = req.user._id;
+
+    // Get owned space and all accessed space.
+    db.Space.find({$or: [{owner: user_id}, {usedBy: {$elemMatch: {account: 
user_id}}}]}, function (err, spaces) {
         if (err)
-            res.send(err);
-        else
-            res.json(clusters); // return all clusters in JSON format
+            return res.status(500).send(err);
+
+        var space_ids = spaces.map(function(value, index) {
+            return value._id;
+        });
+
+        // Get all clusters for spaces.
+        db.Cluster.find({space: {$in: space_ids}}, function (err, clusters) {
+            if (err)
+                return res.status(500).send(err);
+
+            res.json({spaces: spaces, clusters: clusters});
+        });
     });
 }
 
+/**
+ * Get spaces and clusters accessed for user account.
+ */
 router.get('/', function(req, res) {
-    var user = req.session.user;
-
-    selectAll(user, res);
+    selectAll(req, res);
 });
 
+/**
+ * Save cluster.
+ */
 router.post('/save', function(req, res) {
-    if (req.body._id) {
-        var clusterId = req.body._id;
-
-        delete req.body._id;
-
-        db.Cluster.findByIdAndUpdate(clusterId, req.body, null, function(err) {
-            if (err)
-                res.send(err);
-            else
-                selectAll(res);
-        });
-    }
-    else {
-        var cluster = new db.Cluster(req.body);
+    db.upsert(db.Cluster, req.body, function(err) {
+        if (err)
+            return res.status(500).send(err);
 
-        cluster.save(function (err) {
-            if (err)
-                res.send(err);
-            else
-                selectAll(res);
-        });
-    }
+        selectAll(req, res);
+    });
 });
 
+/**
+ * Remove cluster by ._id.
+ */
 router.post('/remove', function(req, res) {
     db.Cluster.remove(req.body, function (err) {
         if (err)
-            res.send(err);
-        else
-            selectAll(res);
+            return res.send(err);
+
+        selectAll(req, res);
     })
 });
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2a8445de/modules/webconfig/nodejs/views/clusters.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/clusters.jade 
b/modules/webconfig/nodejs/views/clusters.jade
index 883ac0d..0960624 100644
--- a/modules/webconfig/nodejs/views/clusters.jade
+++ b/modules/webconfig/nodejs/views/clusters.jade
@@ -44,4 +44,4 @@ block content
                 td(data-title="'Delete'" class=['col-sm-1'])
                     center
                         span(type='button' ng-click='delete(cluster)')
-                            i(class=['fa', 'fa-remove'])
+                            i(class=['fa', 'fa-remove'])
\ No newline at end of file

Reply via email to