[TIC-Web] Fix. Image Creation
[archive/20170607/tools/tic.git] / public / src / js / page / login.js
1 define([
2     'jquery',
3     'bootstrap-validator',
4     'js/util',
5     'js/logger',
6     './job',
7     './image'
8 ], function (
9     $,
10     BootstrapValidator,
11     Util,
12     Logger,
13     Job,
14     Image
15 ) {
16     'use strict';
17
18     var logger = Logger('login.js');
19
20     /**
21      * listener of input change in login
22      */
23     function _loginFormHandler() {
24         $('#tic-page-login-form-email').on('input change', function(e) {
25             if ($(e.target).hasClass('has-danger') === false) {
26                 $('#tic-page-form-help-email').html('');
27             }
28         });
29         $('#tic-page-login-form-password').on('input change', function(e) {
30             if ($(e.target).hasClass('has-danger') === false) {
31                 $('#tic-page-form-help-password').html('');
32             }
33         });
34     }
35
36     /**
37      * listener of submit in login
38      */
39     function _loginHandler() {
40         $('#tic-page-login-form').validator().on('submit', function (e) {
41             // prevent for sumbit of form
42             e.preventDefault();
43
44             Util.POST('api/session', {
45                 email : $('#tic-page-login-form-email').val(),
46                 password: $('#tic-page-login-form-password').val()
47             })
48             .then(function (user) {
49                 if (user.result === 'success') {
50                     logger.info('login success');
51                     $('#tic-page-login-dropdown-toggle').dropdown('toggle');
52                     // toggle for login and logout
53                     $('#tic-navbar-login').toggleClass('hidden', true); // hidden
54                     $('#tic-navbar-logout').toggleClass('hidden', false); // visible
55                     $('#tic-page-logout-dropdown-toggle').html(user.data.user_email +'<span class="caret">');
56
57                     updatePermission();
58                 } else {
59                     if (user.reason === 'email') {
60                         logger.info('invalid email');
61                         $('#tic-page-form-group-email').addClass('has-error has-danger');
62                         $('#tic-page-form-help-email').html('Invalid email.');
63                     } else if (user.reason === 'password') {
64                         logger.info('invalid password');
65                         $('#tic-page-form-group-password').addClass('has-error has-danger');
66                         $('#tic-page-form-help-password').html('Invalid password.');
67                     }
68                 }
69             });
70         });
71     }
72
73     /**
74      * listener of submit in logout
75      */
76     function _logoutHandler() {
77         $('#tic-page-logout-form').on('submit', function (e) {
78             // prevent for sumbit of form
79             e.preventDefault();
80
81             Util.DELETE('api/session')
82             .then(function (result) {
83                 if (result.result === 'success') {
84                     logger.info('logout success');
85                     $('#tic-page-logout-dropdown-toggle').dropdown('toggle');
86                     // toggle for logout and login
87                     $('#tic-navbar-login').toggleClass('hidden', false); // visible
88                     $('#tic-navbar-logout').toggleClass('hidden', true); // hidden
89                     $('#tic-page-logout-dropdown-toggle').html('');
90                 }
91                 updatePermission();
92             });
93         });
94     }
95
96     /**
97      * Permission control in login
98      */
99     function _updateLogin(user) {
100         if (user.group !== 'GUEST') {
101             $('#tic-navbar-login').toggleClass('hidden', true); // hidden
102             $('#tic-navbar-logout').toggleClass('hidden', false); // visible
103             $('#tic-page-logout-dropdown-toggle').html(user.email +'<span class="caret">');
104         }
105     }
106
107     /**
108      * Permission control in packages page
109      */
110     function _updatePackagePage(group) {
111         // Image Creation Button
112         if (group === 'GUEST') {
113             $('#tic-package-create').toggleClass('hidden', true);
114         } else {
115             $('#tic-package-create').toggleClass('hidden', false);
116         }
117     }
118
119     /**
120      * Permission control in job page
121      */
122     function _updateJobPage (user) {
123         Job.updateUserInfo(user);
124     }
125
126     /**
127      * Permission control in image page
128      */
129     function _updateImagePage (user) {
130         Image.updateImageInfo(user);
131     }
132
133     /**
134      * Permission control of group
135      */
136     function updatePermission() {
137         Util.GET('api/session')
138         .then(function (user) {
139             _updateLogin(user);
140             _updatePackagePage(user.group);
141             _updateJobPage(user);
142             _updateImagePage(user);
143         });
144     }
145
146     function init() {
147         logger.info('init');
148
149         _loginFormHandler();
150         _loginHandler();
151         _logoutHandler();
152
153         updatePermission();
154     }
155
156     init();
157
158     return {
159         /**
160          * Update control state by permission
161          * @method updatePermission
162          */
163         updatePermission: updatePermission
164     }
165
166 });