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