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