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