[TIC-Web] Apply generic resource pooling
[archive/20170607/tools/tic.git] / controller / session.js
1 'use strict';
2
3 var dbquery = require('./dbquery');
4 var JL = require('jsnlog').JL;
5
6 var logger = JL('session.js');
7
8 function Session() {};
9
10 var STATUS = {
11     FAIL : 'fail',
12     SUCCESS : 'success',
13     CONNECTED : 'connected',
14     UNKNOWN: 'unknown'
15 }
16
17 Session.prototype.postSession = function(req, res) {
18     if (req.session) {
19         // check email and password
20         if (req.body.email) {
21             dbquery.getUser({
22                 email: req.body.email,
23                 password: req.body.password
24             }, function success(user) {
25                 if (user.data === null) {
26                     // check email
27                     dbquery.hasUser({
28                         email: req.body.email
29                     }, function success(result) {
30                         // email validation
31                         if (result[0].count !== '0') {
32                             logger.info('invalid password: ' + req.body.password);
33                             res.json({
34                                 result: STATUS.FAIL,
35                                 reason: 'password'
36                             });
37                         } else {
38                             logger.info('invalid email:' + req.body.email);
39                             res.json({
40                                 result: STATUS.FAIL,
41                                 reason: 'email'
42                             });
43                         }
44                     }, function error(err) {
45                         logger.error(err);
46                     });
47                 } else {
48                     // save email in session
49                     req.session.email = req.body.email;
50                     req.session.group = user.data.user_group;
51                     logger.info('login success: ' + req.body.email + ' , ' + user.data.user_group);
52                     res.json({
53                         result: STATUS.SUCCESS,
54                         data: user.data
55                     });
56                 }
57             }, function error(err) {
58                 logger.error(err);
59             });
60         }
61     } else {
62         logger.info('invalid email:' + req.body.email);
63         res.json({
64             result: STATUS.FAIL,
65             reason: 'email'
66         });
67     }
68 }
69
70 Session.prototype.getSession = function(req, res) {
71     if (req.session && req.session.email) {
72         res.json({
73             status: STATUS.CONNECTED,
74             email: req.session.email,
75             group: req.session.group
76         });
77     } else {
78         res.json({
79             status: STATUS.UNKNOWN,
80             group: 'GUEST'
81         });
82     }
83 }
84
85 Session.prototype.deleteSession = function(req, res) {
86     if (req.session.email) {
87         req.session.destroy();
88         logger.info('logout success');
89         res.json({
90             result: STATUS.SUCCESS
91         });
92     } else {
93         logger.info('logout fail');
94         res.json({
95             result: STATUS.FAIL
96         });
97     }
98 }
99
100 module.exports = new Session();