Built motion from commit bc0f91f on branch develop.
[motion.git] / server / app.js
1 /**
2  * Main application file
3  */
4
5 'use strict';
6
7 // Set default node environment to development
8 process.env.NODE_ENV = process.env.NODE_ENV || 'development';
9 process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;
10
11 process.on('uncaughtException', function(err) {
12   // console.log('Caught exception: ' + err);
13
14   if (typeof err === 'object') {
15     if (err.message) {
16       console.log('\nMessage: ' + err.message)
17     }
18     if (err.stack) {
19       console.log('\nStacktrace:')
20       console.log('====================')
21       console.log(err.stack);
22     }
23   } else {
24     console.log('dumpError :: argument is not an object');
25   }
26
27 });
28
29
30 var _ = require('lodash');
31 var os = require('os');
32 var http = require('http');
33 var util = require('util');
34 var crypto = require('crypto');
35
36 var express = require('express');
37 var models = require('./models');
38 var config = require('./config/environment');
39
40 var Setting = models.Setting;
41
42 // Setup server
43 var app = express();
44 var server = require('http').createServer(app);
45 var io = require('socket.io')(server, {
46   serveClient: (config.env === 'production') ? false : true,
47   path: '/socket.io-client'
48 });
49
50 var ami = require('asterisk-manager')('5038', '185.43.210.57', 'xcall', 'xcall1234', true);
51 ami.keepConnected();
52
53 //Initialization Kue
54 var kue = require('kue');
55 kue.app.listen(3001);
56
57 var cronjob = require('cron').CronJob;
58
59 require('./config/express')(app);
60 require('./routes')(app);
61
62 // Connect to database
63 models
64   .sequelize
65   .sync()
66   .then(function() {
67
68     // Populate DB with sample data
69     if (config.seedDB) {
70       require('./config/seed');
71     }
72
73     // Start Cally Square Projects
74     require('./config/socketio')(io);
75     require('./config/kue.mail')(kue);
76     require('./config/kue.chat')(kue);
77     require('./config/kue.fax')(io, kue);
78     require('./config/automations/mail')();
79     require('./config/automations/fax')();
80     require('./config/triggers/mail')();
81     require('./config/imap')();
82     require('./config/ami')(ami);
83     require('./config/agi')();
84     require('./config/autodialer')(ami);
85     require('./config/integration')(io, ami);
86
87     // Start server
88     server.listen(config.port, config.ip, function() {
89       console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
90
91       // var netw0= os.networkInterfaces();
92       // var myConf = null;
93       //
94       // for (var networkInterface in networkInterfaces) {
95       //   if (networkInterfaces.hasOwnProperty(networkInterface)) {
96       //
97       //     var addresses = networkInterfaces[networkInterface];
98       //
99       //     for (var address in addresses) {
100       //       if (addresses.hasOwnProperty(address)) {
101       //         if (config.ip === addresses[address].address) {
102       //           myConf = addresses[address];
103       //           break;
104       //         }
105       //       }
106       //     }
107       //   }
108       // }
109       //
110       // var postData = querystring.stringify(myConf);
111       //
112       // var options = {
113       //   hostname: '192.168.2.133',
114       //   port: 9000,
115       //   path: '/api/servers',
116       //   method: 'POST',
117       //   headers: {
118       //     'Content-Type': 'application/x-www-form-urlencoded',
119       //     'Content-Length': postData.length
120       //   }
121       // };
122       //
123       // var req = http.request(options, function(res) {
124       //   console.log('STATUS: ' + res.statusCode);
125       //   console.log('HEADERS: ' + JSON.stringify(res.headers));
126       //   res.setEncoding('utf8');
127       //   res.on('data', function(chunk) {
128       //     console.log('BODY: ' + chunk);
129       //
130       //     Setting
131       //       .upsert({
132       //         id: 1,
133       //         license: JSON.parse(chunk).license,
134       //         address: myConf.address,
135       //         netmask: myConf.netmask,
136       //         mac: myConf.mac
137       //       })
138       //       .then(function(setting) {
139       //         console.log(setting);
140       //       })
141       //       .catch(function(err) {
142       //         console.error(err);
143       //       });
144       //
145       //   });
146       //   res.on('end', function() {
147       //     console.log('No more data in response.')
148       //   })
149       // });
150       //
151       // req.on('error', function(e) {
152       //   console.log('problem with request: ' + e.message);
153       // });
154       //
155       // // write data to request body
156       // req.write(postData);
157       // req.end();
158     });
159   })
160   .catch(function(err) {
161     console.error(err);
162   });
163
164 // Connect to database history
165 models
166   .sequelize_history
167   .sync()
168   .then(function() {
169     require('./config/history')(cronjob);
170   })
171   .catch(function(err) {
172     console.error(err);
173   });
174
175 // Expose app
176 exports = module.exports = app;