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