[TIC-Web] add login module with database 86/117586/1
authorChangHyun Lee <leechwin.lee@samsung.com>
Mon, 6 Mar 2017 14:11:29 +0000 (23:11 +0900)
committerChangHyun Lee <leechwin.lee@samsung.com>
Mon, 6 Mar 2017 14:12:26 +0000 (23:12 +0900)
- add login/logout
- add validation for email and password
- fix the wrong db query

Change-Id: I3825130a8cba39074e9c9d0af6d41fbcdcade31c
Signed-off-by: ChangHyun Lee <leechwin.lee@samsung.com>
controller/mariadb.js
controller/router.js
public/src/js/page/package.js

index 678e76d..527cd6c 100644 (file)
@@ -87,18 +87,15 @@ mariadb.queries = {
         ');'
     ],
     'getUser': [
-        'select user_id, ',
-            'user_email, ',
-            'user_group, ',
-            'user_password ',
-        'where user_email = <% userEmail %> ',
-        'and user_password = <% userPassword %> ',
+        'select user_email, user_group ',
+        'from tic_user ',
+        'where user_email = "<%= userEmail %>" and user_password = "<%= userPassword %>" ',
         'limit 1;'
     ],
     'hasUser': [
         'select count(user_id) as count ',
         'from tic_user ',
-        'where user_email = <%= userEmail %>;'
+        'where user_email = "<%= userEmail %>";'
     ]
 };
 
@@ -390,48 +387,35 @@ mariadb.editImage = function editImage(req, res) {
     this.doQuery(queryString, onSuccess);
 };
 
+
 /**
  * User
  */
 
 /**
- * getUser
+ * @method getUser
+ * @param json object { email, password }
+ * @desc get user information
  */
-mariadb.getUser = function getUser(req, res) {
-    var queryString, reqParam, userEmail, userPassword;
-
+mariadb.getUser = function getUser(query, success, error) {
     function onSuccess(err, rows) {
-        var resultObj
-
         if (err) {
             logger.error(err);
-            throw err;
-        }
-
-        resultObj = {
-            result: '',
-            resultData : {}
-        };
-
-        if (rows.length === NO_DATA) {
-            resultObj.result = 'NOT EXISTS';
-            resultObj.resultData = {};
+            error(err);
         } else {
-            resultObj.result = 'EXISTS';
-            resultObj.resultData = rows;
+            var resultObj = {
+                data: null
+            };
+            if (rows.length !== NO_DATA) {
+                resultObj.data = rows[0];
+            }
+            success(resultObj);
         }
-
-        res.json(resultObj);
     }
 
-    // parameters
-    reqParam = req.body;
-    userEmail = reqParam.user_email;
-    userPassword = reqParam.user_password;
-
-    queryString = _.template(_.join(this.queries['getUser'], ''))({
-        userEmail: email,
-        userPassword: password
+    var queryString = _.template(_.join(this.queries['getUser'], ''))({
+        userEmail: query.email,
+        userPassword: query.password
     });
 
     logger.info('getUser: query = ' + queryString);
@@ -440,28 +424,23 @@ mariadb.getUser = function getUser(req, res) {
     this.doQuery(queryString, onSuccess);
 };
 
-
 /**
- * hasUser
+ * @method hasUser
+ * @param json object { email }
+ * @desc user check
  */
-mariadb.hasUser = function hasUser(req, res) {
-    var queryString, reqParam, userEmail;
-
+mariadb.hasUser = function hasUser(query, success, error) {
     function onSuccess(err, rows) {
         if (err) {
             logger.error(err);
-            throw err;
+            error(error);
+        } else {
+            success(rows);
         }
-
-        res.json(rows);
     }
 
-    // parameters
-    reqParam = req.body;
-    userEmail = reqParam.user_email;
-
-    queryString = _.template(_.join(this.queries['hasUser'], ''))({
-        userEmail: email
+    var queryString = _.template(_.join(this.queries['hasUser'], ''))({
+        userEmail: query.email
     });
 
     logger.info('hasUser: query = ' + queryString);
index 0ac9c83..1cdf3a3 100644 (file)
@@ -153,21 +153,50 @@ var init = function (serv) {
      */
     router.post('/session', function (req, res) {
         if (req.session) {
-            // FIXME: check email and password from Database
+            // check email and password
             if (req.body.email) {
-                if (req.body.email === 'admin@samsung.com' && req.body.password === 'admin') {
-                    req.session.email = req.body.email;
-                    res.json({
-                        email: req.body.email,
-                        result: 'success'
-                    });
-                    return;
-                }
+                client.getUser({
+                    email: req.body.email,
+                    password: req.body.password
+                }, function success(user) {
+                    if (user.data === null) {
+                        // check email
+                        client.hasUser({
+                            email: req.body.email
+                        }, function success(result) {
+                            // email validation
+                            if (result[0].count !== '0') {
+                                res.json({
+                                    result: 'fail',
+                                    reason: 'password'
+                                });
+                            } else {
+                                res.json({
+                                    result: 'fail',
+                                    reason: 'email'
+                                });
+                            }
+                        }, function error(err) {
+                            logger.error(err);
+                        });
+                    } else {
+                        // save email in session
+                        req.session.email = req.body.email;
+                        res.json({
+                            result: 'success',
+                            data: user.data
+                        });
+                    }
+                }, function error(err) {
+                    logger.error(err);
+                });
             }
+        } else {
+            res.json({
+                result: 'fail',
+                reason: 'email'
+            });
         }
-        res.json({
-            result: 'fail'
-        });
     });
 
     /**
index 12dd6f2..76814b4 100644 (file)
@@ -1143,6 +1143,11 @@ define([
         });
 
         // login: listener of input change
+        $('#tic-page-login-form-email').on('input change', function(e) {
+            if ($(e.target).hasClass('has-danger') === false) {
+                $('#tic-page-form-help-email').html('');
+            }
+        });
         $('#tic-page-login-form-password').on('input change', function(e) {
             if ($(e.target).hasClass('has-danger') === false) {
                 $('#tic-page-form-help-password').html('');
@@ -1157,19 +1162,21 @@ define([
                 email : $('#tic-page-login-form-email').val(),
                 password: $('#tic-page-login-form-password').val()
             })
-            .then(function (result) {
-                if (result.result === 'success') {
+            .then(function (user) {
+                if (user.result === 'success') {
                     $('#tic-page-login-dropdown-toggle').dropdown('toggle');
                     // toggle for login and logout
                     $('#tic-navbar-login').toggleClass('hidden', true); // hidden
                     $('#tic-navbar-logout').toggleClass('hidden', false); // visible
-                    $('#tic-page-logout-dropdown-toggle').html(result.email +'<span class="caret">');
+                    $('#tic-page-logout-dropdown-toggle').html(user.data.user_email +'<span class="caret">');
                 } else {
-                    // TODO: @Author leechwin.lee@samung.com
-                    // invalid password or email
-                    // consider to result value
-                    $('#tic-page-form-group-password').addClass('has-error has-danger');
-                    $('#tic-page-form-help-password').html('Invalid password.');
+                    if (user.reason === 'email') {
+                        $('#tic-page-form-group-email').addClass('has-error has-danger');
+                        $('#tic-page-form-help-email').html('Invalid email.');
+                    } else if (user.reason === 'password') {
+                        $('#tic-page-form-group-password').addClass('has-error has-danger');
+                        $('#tic-page-form-help-password').html('Invalid password.');
+                    }
                 }
             });
         });