0d12443bd8662c4de84cfc3bb6296b4a3379810d
[motion.git] / server / config / socketio.js
1 /**
2  * Socket.io configuration
3  */
4
5 'use strict';
6
7 var moment = require('moment');
8 var config = require('./environment');
9 var User = require('../models').User;
10
11 function onDisconnect(socket) {
12   if (socket.userId) {
13     return User
14       .findById(socket.userId)
15       .then(function(user) {
16         if (user) {
17           return user
18             .updateAttributes({
19               online: false
20             });
21         } else {
22           throw new Error('socket: anyone users found');
23         }
24       })
25       .then(function(user) {
26         console.log('socket: user offline', user.name);
27       })
28       .catch(function(err) {
29         console.error(err);
30       });
31   } else {
32     console.log('socket: anyone users found');
33   }
34 }
35
36 function onConnect(socket) {
37   if (socket.userId) {
38     return User
39       .findById(socket.userId)
40       .then(function(user) {
41         if (user) {
42           return user
43             .updateAttributes({
44               online: true,
45               lastLoginAt: moment().format("YYYY-MM-DD HH:mm:ss")
46             })
47         } else {
48           throw new Error('socket: anyone users found');
49         }
50       })
51       .then(function(user) {
52         console.log('socket: user online', user.name);
53
54         // Insert sockets below
55
56         //Ordered alphabetically
57         require('../api/agent/agent.socket').register(socket);
58         require('../api/ami/ami.socket').register(socket);
59         require('../api/automation/automation.socket').register(socket);
60         require('../api/business_action/business_action.socket').register(socket);
61         require('../api/business_condition/business_condition.socket').register(socket);
62         require('../api/chat_application/chat_application.socket').register(socket);
63         require('../api/chat_enquiry/enquiry.socket').register(socket);
64         require('../api/chat_message/chat_message.socket').register(socket);
65         require('../api/chat_queue/chat_queue.socket').register(socket);
66         require('../api/chat_room/chat_room.socket').register(socket);
67         require('../api/chat_visitor/chat_visitor.socket').register(socket);
68         require('../api/chat_website/chat_website.socket').register(socket);
69         require('../api/company/company.socket').register(socket);
70         require('../api/contact/contact.socket').register(socket);
71         require('../api/contact_manager/contact_manager.socket').register(socket);
72         require('../api/custom_field/custom_field.socket').register(socket);
73         require('../api/dashboard/dashboard.socket').register(socket);
74         require('../api/desk_account/desk_account.socket').register(socket);
75         require('../api/desk_configuration/desk_configuration.socket').register(socket);
76         require('../api/desk_field/desk_field.socket').register(socket);
77         require('../api/event/event.socket').register(socket);
78         require('../api/fax_account/fax_account.socket').register(socket);
79         require('../api/fax_application/fax_application.socket').register(socket);
80         require('../api/fax_business_automation/fax_business_automation.socket').register(socket);
81         require('../api/fax_message/fax_message.socket').register(socket);
82         require('../api/fax_queue/fax_queue.socket').register(socket);
83         require('../api/fax_room/fax_room.socket').register(socket);
84         require('../api/freshdesk_account/freshdesk_account.socket').register(socket);
85         require('../api/freshdesk_configuration/freshdesk_configuration.socket').register(socket);
86         require('../api/freshdesk_field/freshdesk_field.socket').register(socket);
87         require('../api/integration/integration.socket').register(socket);
88         require('../api/interval/interval.socket').register(socket);
89         require('../api/mail_account/mail_account.socket').register(socket);
90         require('../api/mail_application/mail_application.socket').register(socket);
91         require('../api/mail_attachment/mail_attachment.socket').register(socket);
92         require('../api/mail_business_automation/mail_business_automation.socket').register(socket);
93         require('../api/mail_message/mail_message.socket').register(socket);
94         require('../api/mail_queue/mail_queue.socket').register(socket);
95         require('../api/mail_room/mail_room.socket').register(socket);
96         require('../api/mail_server_in/mail_server_in.socket').register(socket);
97         require('../api/mail_template/mail_template.socket').register(socket);
98         require('../api/module/module.socket').register(socket);
99         require('../api/motionbar/motionbar.socket').register(socket);
100         require('../api/default_report/default_report.socket').register(socket);
101         require('../api/custom_report/custom_report.socket').register(socket);
102         require('../api/report_tree/report_tree.socket').register(socket);
103         require('../api/report_agent/report_agent.socket').register(socket);
104         require('../api/report_chat/report_chat.socket').register(socket);
105         require('../api/report_chat_session/report_chat_session.socket').register(socket);
106         require('../api/report_integration/report_integration.socket').register(socket);
107         require('../api/report_mail/report_mail.socket').register(socket);
108         require('../api/report_mail_session/report_mail_session.socket').register(socket);
109         require('../api/report_queue/report_queue.socket').register(socket);
110         require('../api/salesforce_account/salesforce_account.socket').register(socket);
111         require('../api/salesforce_configuration/salesforce_configuration.socket').register(socket);
112         require('../api/salesforce_field/salesforce_field.socket').register(socket);
113         require('../api/setting/setting.socket').register(socket);
114         require('../api/square_odbc/square_odbc.socket').register(socket);
115         require('../api/square_project/square_project.socket').register(socket);
116         require('../api/sugarcrm_account/sugarcrm_account.socket').register(socket);
117         require('../api/sugarcrm_configuration/sugarcrm_configuration.socket').register(socket);
118         require('../api/sugarcrm_field/sugarcrm_field.socket').register(socket);
119         require('../api/tag/tag.socket').register(socket);
120         require('../api/team/team.socket.js').register(socket);
121         require('../api/trigger/trigger.socket').register(socket);
122         require('../api/trunk/trunk.socket').register(socket);
123         require('../api/user/user.socket').register(socket);
124         require('../api/update/update.socket').register(socket);
125         require('../api/upload/upload.socket').register(socket);
126         require('../api/user_has_chat_queue/user_has_chat_queue.socket').register(socket);
127         require('../api/user_has_chat_room/user_has_chat_room.socket').register(socket);
128         require('../api/user_has_fax_queue/user_has_fax_queue.socket').register(socket);
129         require('../api/user_has_mail_queue/user_has_mail_queue.socket').register(socket);
130         require('../api/user_has_team/user_has_team.socket').register(socket);
131         require('../api/user_has_voice_queue/user_has_voice_queue.socket').register(socket);
132         require('../api/variable/variable.socket').register(socket);
133         require('../api/metric/metric.socket').register(socket);
134         require('../api/voice_context/voice_context.socket').register(socket);
135         require('../api/voice_extension/voice_extension.socket').register(socket);
136         require('../api/voice_musiconhold/voice_musiconhold.socket').register(socket);
137         require('../api/voice_queue/voice_queue.socket').register(socket);
138         require('../api/voice_voicemail/voice_voicemail.socket').register(socket);
139         require('../api/xchatty/xchatty.socket').register(socket);
140         require('../api/zendesk_account/zendesk_account.socket').register(socket);
141         require('../api/zendesk_configuration/zendesk_configuration.socket').register(socket);
142         require('../api/zendesk_field/zendesk_field.socket').register(socket);
143
144       })
145       .catch(function(err) {
146         console.error(err);
147       });
148   } else {
149     console.log('socket: anyone users found');
150   }
151
152   socket.on('info', function(data) {
153     console.info('[%s] %s', socket.address, JSON.stringify(data, null, 2));
154   });
155
156 }
157
158 module.exports = function(socketio) {
159   // socket.io (v1.x.x) is powered by debug.
160   // In order to see all the debug output, set DEBUG (in server/config/local.env.js) to including the desired scope.
161   //
162   // ex: DEBUG: "http*,socket.io:socket"
163
164   // We can authenticate socket.io users and access their token through socket.handshake.decoded_token
165   //
166   // 1. You will need to send the token in `client/components/socket/socket.service.js`
167   //
168   // 2. Require authentication here:
169   socketio.use(require('socketio-jwt').authorize({
170     secret: config.session.secret,
171     handshake: true
172   }));
173
174   socketio.on('connection', function(socket) {
175     socket.address = socket.handshake.address !== null ? socket.handshake
176       .address.address + ':' + socket.handshake.address.port : process.env
177       .DOMAIN;
178
179     socket.connectedAt = new Date();
180     socket.userId = socket.handshake.query.userId;
181     socket.role = socket.handshake.query.role;
182     socket.name = socket.handshake.query.name;
183     socket.source = socket.handshake.query.source;
184
185     // Call onDisconnect.
186     socket.on('disconnect', function() {
187       onDisconnect(socket);
188       console.info('[%s] SOCKET DISCONNECTED', socket.handshake.address);
189     });
190
191     // Call onConnect.
192     onConnect(socket);
193     console.info('[%s] SOCKET CONNECTED', socket.handshake.address);
194   });
195 };