-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
97 lines (87 loc) · 2.7 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// Twilio Powered App
var Telenode = require('telenode'),
creds = require('./credentials')['twilio'],
winston = require('winston'),
util = require('util'),
static = require('node-static'),
fileServer = new static.Server('.'),
url = require('url'),
querystring = require('querystring'),
http = require('http');
// Winston logging setup.
var logger = new winston.Logger,
options = {timestamp:true};
logger.add(winston.transports.Console, options);
// Twilo SMS setup.
var client = new Telenode(Telenode.providers.twilio);
client.credentials(creds);
function smsHandler(err, body) {
if (err) throw err;
console.log('Body: ' + body);
}
function makeSms(twinfo) {
var message = 'From ' + twinfo.From + '\nStatus ' +
twinfo.CallStatus + '\nCity ' +
twinfo.CallerCity + '\nName ' +
twinfo.CallerName;
return message;
}
function sendAlertSms(twinfo) {
var message = makeSms(twinfo);
client.SMS.send(
{
from: creds.from,
to: creds.to,
body: message
},smsHandler
);
logger.info('SMS Message: '+message);
}
function postHandler(req,query) {
logger.info('Call details:\n'+util.inspect(query));
//res.statusCode = 200;
// res.end();
//Process Request Body.
req.addListener('data', function(chunk) {
req.content += chunk;
});
req.addListener('end', function(chunk) {
if (req.content != '') {
var qs = querystring.parse(req.content);
logger.info('Parsed Request data:\n'+util.inspect(qs));
sendAlertSms(qs);
}
});
}
// This HTTP server listens for GET & POST requests from Twilio.
logger.info('Starting TeleHacker');
var port = 1340;
var server = http.createServer(function(req,res) {
req.setEncoding('utf8');
req.content= '';
var parsedUrl = url.parse(req.url,true);
logger.info('HTTP '+req.method+' '+parsedUrl.pathname);
if (parsedUrl.pathname === '/Incoming/Call') {
if (req.method === 'GET') {
fileServer.serveFile('./twiml/recordCall.xml', 200, {}, req, res);
if (parsedUrl.query != '') {
logger.info('Call details:\n'+util.inspect(parsedUrl.query));
sendAlertSms(parsedUrl.query);
}
} else if (req.method === 'POST') {
logger.info('Incoming call completed.');
postHandler(req,parsedUrl.query);
}
} else if (parsedUrl.pathname === '/Incoming/Call/Complete') {
if (req.method === 'POST') {
logger.info('Incoming call completed.');
logger.info('Call details:\n'+util.inspect(parsedUrl.query));
res.statusCode = 200;
res.end();
postHandler(req,parsedUrl.query)
}
} else {
logger.info('Non-supported path, serving static file');
fileServer.serve(req,res);
}
}).listen(port);