You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/09/08 09:30:49 UTC

ignite git commit: IGNITE-843 Reworked from password to token.

Repository: ignite
Updated Branches:
  refs/heads/ignite-843 b9a95ef34 -> 9f9265d1b


IGNITE-843 Reworked from password to token.


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

Branch: refs/heads/ignite-843
Commit: 9f9265d1b790bc4d7bcda5084461c40fc73e818a
Parents: b9a95ef
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Tue Sep 8 14:31:25 2015 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Tue Sep 8 14:31:25 2015 +0700

----------------------------------------------------------------------
 modules/control-center-agent/README.txt         | 11 ++--
 .../apache/ignite/agent/AgentConfiguration.java | 24 ++++----
 .../org/apache/ignite/agent/AgentLauncher.java  |  6 +-
 .../org/apache/ignite/agent/AgentSocket.java    |  2 +-
 .../src/main/js/agents/agent-manager.js         | 24 ++++----
 .../main/js/controllers/profile-controller.js   | 13 +++-
 modules/control-center-web/src/main/js/db.js    |  2 +
 .../src/main/js/helpers/common-utils.js         | 19 +++---
 .../src/main/js/public/stylesheets/style.scss   | 21 +------
 .../src/main/js/routes/profile.js               | 64 ++++++++++++--------
 .../src/main/js/routes/public.js                | 10 ++-
 .../main/js/views/configuration/sidebar.jade    |  1 -
 .../src/main/js/views/settings/profile.jade     |  4 ++
 .../src/main/js/views/templates/layout.jade     |  2 +
 14 files changed, 115 insertions(+), 88 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-agent/README.txt
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/README.txt b/modules/control-center-agent/README.txt
index 5094ca3..f59295e 100644
--- a/modules/control-center-agent/README.txt
+++ b/modules/control-center-agent/README.txt
@@ -11,11 +11,13 @@ Two main functions of Ignite Web Agent:
     You may need to copy JDBC driver into "./jdbc-drivers" subfolder or specify path via "-drv" option.
 
 Usage example:
-    ignite-control-center-agent.sh -l john.smith@gmail.com -p qwerty -s wss://control-center.example.com
+    ignite-control-center-agent.sh -l john.smith@gmail.com -t 1a2b3c4d5f -s wss://control-center.example.com
 
 Test drive of Ignite Web Agent:
     In order to simplify evaluation two test drive modes were implemented:
 
+    1) Get access token on Web Control Center "Profile" screen.
+
     1) Test drive for metadata load from database. Activated by option: -tm or --test-drive-metadata.
        In this mode an in-memory H2 database will started.
        How to evaluate:
@@ -45,7 +47,7 @@ Configuration file:
 
     Available entries names:
         login
-        password
+        token
         serverURI
         nodeURI
         driverFolder
@@ -54,6 +56,7 @@ Configuration file:
 
     Example configuration file:
         login=john.smith@gmail.com
+        token=1a2b3c4d5f
         serverURI=wss://control-center.example.com:3001
         test-drive-sql=true
 
@@ -75,8 +78,8 @@ Options:
        URI for connect to Ignite REST server, for example: "http://localhost:8080".
        Default: "http://localhost:8080".
 
-    -p, --password
-       User's password.
+    -t, --token
+       User's access token.
 
     -s, --server-uri
        URI for connect to Ignite Web Agent, for example: "wss://control-center.example.com:3001".

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
index 0a3550e..bde628d 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
@@ -39,8 +39,8 @@ public class AgentConfiguration {
     private String login;
 
     /** */
-    @Parameter(names = {"-p", "--password"}, description = "User's password")
-    private String pwd;
+    @Parameter(names = {"-t", "--token"}, description = "User's access token")
+    private String token;
 
     /** */
     @Parameter(names = {"-s", "--server-uri"}, description = "URI for connect to Ignite Web Control Center via " +
@@ -91,17 +91,17 @@ public class AgentConfiguration {
     }
 
     /**
-     * @return Password.
+     * @return Token.
      */
-    public String password() {
-        return pwd;
+    public String token() {
+        return token;
     }
 
     /**
-     * @param pwd Password.
+     * @param token Token.
      */
-    public void password(String pwd) {
-        this.pwd = pwd;
+    public void token(String token) {
+        this.token = token;
     }
 
     /**
@@ -203,10 +203,10 @@ public class AgentConfiguration {
         if (val != null)
             login(val);
 
-        val = (String)props.remove("password");
+        val = (String)props.remove("token");
 
         if (val != null)
-            password(val);
+            token(val);
 
         val = (String)props.remove("serverURI");
 
@@ -241,8 +241,8 @@ public class AgentConfiguration {
         if (cmd.login() != null)
             login(cmd.login());
 
-        if (cmd.password() != null)
-            password(cmd.password());
+        if (cmd.token() != null)
+            token(cmd.token());
 
         if (cmd.serverUri() != null)
             serverUri(cmd.serverUri());

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java
index 01de963..7ec4c2a 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java
@@ -76,10 +76,10 @@ public class AgentLauncher {
             cfg.login(System.console().readLine().trim());
         }
 
-        if (cfg.password() == null) {
-            System.out.print("Password: ");
+        if (cfg.token() == null) {
+            System.out.print("Token: ");
 
-            cfg.password(new String(System.console().readPassword()));
+            cfg.token(new String(System.console().readPassword()));
         }
 
         RestExecutor restExecutor = new RestExecutor(cfg);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
index d66393b..7a87616 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
@@ -106,7 +106,7 @@ public class AgentSocket implements WebSocketSender {
 
         authMsg.addProperty("type", "AuthMessage");
         authMsg.addProperty("login", cfg.login());
-        authMsg.addProperty("password", cfg.password());
+        authMsg.addProperty("token", cfg.token());
 
         send(authMsg);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-web/src/main/js/agents/agent-manager.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/agents/agent-manager.js b/modules/control-center-web/src/main/js/agents/agent-manager.js
index e3c7846..8d4db6f 100644
--- a/modules/control-center-web/src/main/js/agents/agent-manager.js
+++ b/modules/control-center-web/src/main/js/agents/agent-manager.js
@@ -237,20 +237,22 @@ Client.prototype._rmtAuthMessage = function(msg) {
             self.authResult('User not found');
         }
         else {
-            account.authenticate(msg.password, function(err, user, res) {
-                if (!user) {
-                    self.authResult(res.message);
-                }
-                else {
-                    self.authResult(null);
+            var token = account.token;
 
-                    self._user = account;
+            if (!token)
+                token = account._id;
 
-                    self._manager._addClient(account._id, self);
+            if (token == msg.token) {
+                self.authResult(null);
 
-                    self._ignite = new apacheIgnite.Ignite(new AgentServer(self));
-                }
-            });
+                self._user = account;
+
+                self._manager._addClient(account._id, self);
+
+                self._ignite = new apacheIgnite.Ignite(new AgentServer(self));
+            }
+            else
+                self.authResult('Invalid token');
         }
     });
 };

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-web/src/main/js/controllers/profile-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/profile-controller.js b/modules/control-center-web/src/main/js/controllers/profile-controller.js
index eb6b807..3c74596 100644
--- a/modules/control-center-web/src/main/js/controllers/profile-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/profile-controller.js
@@ -19,6 +19,13 @@
 controlCenterModule.controller('profileController', ['$scope', '$http', '$common', function ($scope, $http, $common) {
     $scope.profileUser = angular.copy($scope.user);
 
+    if ($scope.profileUser && !$scope.profileUser.token)
+        $scope.profileUser.token = $scope.profileUser._id;
+
+    $scope.generateToken = function () {
+        $scope.profileUser.token = $commonUtils.randomString(20);
+    };
+
     $scope.saveUser = function () {
         var profile = $scope.profileUser;
 
@@ -29,11 +36,15 @@ controlCenterModule.controller('profileController', ['$scope', '$http', '$common
             var email = profile.email;
             var changeEmail = email != $scope.user.email;
 
-            if (changeUsername || changeEmail || profile.changePassword) {
+            var token = profile.token;
+            var changeToken = token != $scope.user.token;
+
+            if (changeUsername || changeEmail || changeToken || profile.changePassword) {
                 $http.post('/profile/save', {
                     _id: profile._id,
                     userName: changeUsername ? userName : undefined,
                     email: changeEmail ? email : undefined,
+                    token: changeToken ? token : undefined,
                     newPassword: profile.changePassword ? profile.newPassword : undefined
                 }).success(function (user) {
                     $common.showInfo('Profile saved.');

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-web/src/main/js/db.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/db.js b/modules/control-center-web/src/main/js/db.js
index e8eb270..88011d1 100644
--- a/modules/control-center-web/src/main/js/db.js
+++ b/modules/control-center-web/src/main/js/db.js
@@ -34,6 +34,7 @@ var AccountSchema = new Schema({
     email: String,
     lastLogin: Date,
     admin: Boolean,
+    token: String,
     resetPasswordToken: String
 });
 
@@ -49,6 +50,7 @@ AccountSchema.set('toJSON', {
             email: ret.email,
             username: ret.username,
             admin: ret.admin,
+            token: ret.token,
             lastLogin: ret.lastLogin
         };
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-web/src/main/js/helpers/common-utils.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/helpers/common-utils.js b/modules/control-center-web/src/main/js/helpers/common-utils.js
index 6fad73f..b8dd058 100644
--- a/modules/control-center-web/src/main/js/helpers/common-utils.js
+++ b/modules/control-center-web/src/main/js/helpers/common-utils.js
@@ -42,14 +42,19 @@ $commonUtils.hasProperty = function (obj, props) {
     return false;
 };
 
+$commonUtils.randomString = function (len) {
+    var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+    var possibleLen = possible.length;
+
+    var res = '';
+
+    for (var i = 0; i < len; i++)
+        res += possible.charAt(Math.floor(Math.random() * possibleLen));
+
+    return res;
+};
+
 // For server side we should export Java code generation entry point.
 if (typeof window === 'undefined') {
-    // Generate random HEX string. Server side only.
-    $commonUtils.randomValueHex = function randomValueHex(len) {
-        return require('crypto').randomBytes(Math.ceil(len / 2))
-            .toString('hex') // convert to hexadecimal format
-            .slice(0, len);  // return required number of characters
-    };
-
     module.exports = $commonUtils;
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-web/src/main/js/public/stylesheets/style.scss
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/public/stylesheets/style.scss b/modules/control-center-web/src/main/js/public/stylesheets/style.scss
index a4058e8..2735da8 100644
--- a/modules/control-center-web/src/main/js/public/stylesheets/style.scss
+++ b/modules/control-center-web/src/main/js/public/stylesheets/style.scss
@@ -857,41 +857,22 @@ label {
     margin-right: 0;
 }
 
-.fa-eye {
-    cursor: pointer;
-}
-
-.fa-plus {
+.fa {
     cursor: pointer;
 }
 
 .fa-remove {
     color: $brand-primary;
-    cursor: pointer;
-}
-
-.fa-floppy-o {
-    cursor: pointer;
-}
-
-.fa-arrow-up {
-    cursor: pointer;
-}
-
-.fa-arrow-down {
-    cursor: pointer;
 }
 
 .fa-chevron-circle-down {
     color: $brand-primary;
-    cursor: pointer;
     margin-right: 5px;
     font-size: 16px;
 }
 
 .fa-chevron-circle-up {
     color: $brand-primary;
-    cursor: pointer;
     margin-right: 5px;
     font-size: 16px;
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-web/src/main/js/routes/profile.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/profile.js b/modules/control-center-web/src/main/js/routes/profile.js
index bc73671..b772f21 100644
--- a/modules/control-center-web/src/main/js/routes/profile.js
+++ b/modules/control-center-web/src/main/js/routes/profile.js
@@ -32,6 +32,30 @@ router.get('/', function (req, res) {
     });
 });
 
+function updateUser(user, params) {
+    var updated = false;
+
+    if (params.userName) {
+        user.username = params.userName;
+
+        updated = true;
+    }
+
+    if (params.email) {
+        user.email = params.email;
+
+        updated = true;
+    }
+
+    if (params.token) {
+        user.token = params.token;
+
+        updated = true;
+    }
+
+    return updated;
+}
+
 /**
  * Save user profile.
  */
@@ -48,40 +72,30 @@ router.post('/save', function (req, res) {
             if (err)
                 return res.status(500).send(err);
 
-            user.setPassword(newPassword, function (err, updatedUser) {
+            user.setPassword(newPassword, function (err, user) {
                 if (err)
                     return res.status(500).send(err.message);
 
-                if (params.userName)
-                    updatedUser.username = params.userName;
-
-                if (params.email)
-                    updatedUser.email = params.email;
+                if (updateUser(user, params))
+                    user.save(function (err) {
+                        if (err)
+                            return res.status(500).send(err.message);
 
-                updatedUser.save(function (err) {
-                    if (err)
-                        return res.status(500).send(err.message);
-
-                    res.json(user);
-                });
+                        res.json(user);
+                    });
             });
         });
     }
-    else if (params.userName || params.email) {
-        var upd = {};
-
-        if (params.userName)
-            upd.username = params.userName;
+    else {
+        var user = {};
 
-        if (params.email)
-            upd.email = params.email;
-
-        db.Account.findByIdAndUpdate(params._id, upd, {new: true}, function (err, val) {
-            if (err)
-                return res.status(500).send(err.message);
+        if (updateUser(user, params))
+            db.Account.findByIdAndUpdate(params._id, user, {'new': true}, function (err, val) {
+                if (err)
+                    return res.status(500).send(err.message);
 
-            res.json(val);
-        })
+                res.json(val);
+            })
     }
 });
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-web/src/main/js/routes/public.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/public.js b/modules/control-center-web/src/main/js/routes/public.js
index e65bf46..c325bad 100644
--- a/modules/control-center-web/src/main/js/routes/public.js
+++ b/modules/control-center-web/src/main/js/routes/public.js
@@ -21,7 +21,7 @@ var nodemailer = require('nodemailer');
 
 var db = require('../db');
 var config = require('../helpers/configuration-loader.js');
-var utils = require('./../helpers/common-utils');
+var $commonUtils = require('./../helpers/common-utils');
 
 // GET dropdown-menu template.
 router.get('/select', function (req, res) {
@@ -58,7 +58,11 @@ router.post('/register', function (req, res) {
 
         req.body.admin = cnt == 0;
 
-        db.Account.register(new db.Account(req.body), req.body.password, function (err, account) {
+        var account = new db.Account(req.body);
+
+        account.token = $commonUtils.randomString(20);
+
+        db.Account.register(account, req.body.password, function (err, account) {
             if (err)
                 return res.status(401).send(err.message);
 
@@ -122,7 +126,7 @@ router.post('/password/forgot', function(req, res) {
         return res.status(401).send('Can\'t send e-mail with instructions to reset password.<br />' +
             'Please ask webmaster to setup smtp server!');
 
-    var token = utils.randomValueHex(20);
+    var token = $commonUtils.randomString(20);
 
     db.Account.findOne({ email: req.body.email }, function(err, user) {
         if (!user)

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-web/src/main/js/views/configuration/sidebar.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/configuration/sidebar.jade b/modules/control-center-web/src/main/js/views/configuration/sidebar.jade
index 48f0341..c5410c2 100644
--- a/modules/control-center-web/src/main/js/views/configuration/sidebar.jade
+++ b/modules/control-center-web/src/main/js/views/configuration/sidebar.jade
@@ -17,7 +17,6 @@
 extends ../templates/layout
 
 append scripts
-    script(src='/common-utils.js')
     script(src='/data-structures.js')
     script(src='/generator-common.js')
     script(src='/generator-xml.js')

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-web/src/main/js/views/settings/profile.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/settings/profile.jade b/modules/control-center-web/src/main/js/views/settings/profile.jade
index 7451d2a..1c5bb4e 100644
--- a/modules/control-center-web/src/main/js/views/settings/profile.jade
+++ b/modules/control-center-web/src/main/js/views/settings/profile.jade
@@ -40,6 +40,10 @@ block container
                             .col-xs-5.col-sm-4
                                 input.form-control(type='email' ng-model='profileUser.email' placeholder='you@domain.com' required)
                         .details-row
+                            +lbl('Access token:')
+                            label {{profileUser.token}}
+                            i.tipLabel.fa.fa-refresh(ng-click='generateToken()' bs-tooltip data-title='Generate random access token')
+                        .details-row
                             .checkbox
                                 label
                                     input(type='checkbox' ng-model='profileUser.changePassword')

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f9265d1/modules/control-center-web/src/main/js/views/templates/layout.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/templates/layout.jade b/modules/control-center-web/src/main/js/views/templates/layout.jade
index 823b1a6..0959b65 100644
--- a/modules/control-center-web/src/main/js/views/templates/layout.jade
+++ b/modules/control-center-web/src/main/js/views/templates/layout.jade
@@ -30,6 +30,8 @@ html(ng-app='ignite-web-control-center' ng-init='user = #{JSON.stringify(user)};
             link(rel='stylesheet', href='/stylesheets/style.css')
 
         block scripts
+            script(src='/common-utils.js')
+
             script(src='//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js')
 
             script(src='//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js')