|
var express = require('express') |
|
, path = require('path') |
|
, cookieParser = require('cookie-parser') |
|
, bodyParser = require('body-parser') |
|
, app = express() |
|
, mongoose = require('mongoose') |
|
, Number = require('./number') |
|
, twilio = require('twilio') |
|
, twilioClient = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN) |
|
, port = 3000; |
|
|
|
app.set('views', path.join(__dirname)); |
|
app.set('view engine', 'pug'); |
|
app.use(bodyParser.json()); |
|
app.use(bodyParser.urlencoded({ extended: false })); |
|
app.use(cookieParser()); |
|
|
|
// routes |
|
app.get('/', (req, res) => res.render('index')); |
|
|
|
app.get('/static/main.js', (req, res) => res.sendFile(__dirname + '/main.js')); |
|
app.get('/static/style.css', (req, res) => res.sendFile(__dirname + '/style.css')); |
|
|
|
app.post('/call', (req, res) => { |
|
var verificationCode = rand(100000, 999999); |
|
var phoneNumber = req.body.phoneNumber; |
|
|
|
Number.remove({'phoneNumber': phoneNumber}, (err) => { |
|
Number.create({'phoneNumber': phoneNumber, 'verificationCode': verificationCode}, (err, number) => { |
|
var params = { |
|
to: req.body.phoneNumber, |
|
from: process.env.TWILIO_PHONE_NUMBER, // Your twilio phone number |
|
url: process.env.TWIML_SERVER_URL // full URL of /twiml route on your server |
|
}; |
|
|
|
twilioClient.makeCall(params, (err, message) => { |
|
if (err) { |
|
console.log(err); |
|
res.status(500).send(err); |
|
} else { |
|
res.send({'verificationCode': verificationCode}); |
|
} |
|
}); |
|
}); |
|
}); |
|
}); |
|
|
|
app.post('/status', (req, res) => { |
|
Number.findOne({'phoneNumber': req.body.phoneNumber, verified: true}, (err, number) => { |
|
res.send({status: (number) ? 'verified' : 'unverified'}); |
|
}); |
|
}); |
|
|
|
app.post('/twiml', (req, res) => { |
|
res.type('text/xml'); |
|
|
|
var verificationCode = req.body['Digits']; |
|
var phoneNumber = req.body['Called']; |
|
|
|
if (!verificationCode) { |
|
res.send(new twilio.TwimlResponse().gather({numDigits: 6}, function() { |
|
this.say('Please enter your verification code.'); |
|
}).toString()); |
|
} else { |
|
Number.findOne({'phoneNumber': phoneNumber, 'verificationCode': verificationCode}, (err, number) => { |
|
if (!number) { |
|
res.send(new twilio.TwimlResponse().gather({numDigits: 6}, function() { |
|
this.say('Verification code incorrect, please try again.'); |
|
}).toString()); |
|
} else { |
|
number.verified = true; |
|
number.save((err, number) => { |
|
res.send(new twilio.TwimlResponse() |
|
.say('Thank you! Your phone number has been verified.').toString()); |
|
}); |
|
} |
|
}); |
|
} |
|
}); |
|
|
|
var rand = function(low, high) { |
|
return Math.floor(Math.random() * (high - low) + low); |
|
}; |
|
|
|
app.listen(port, function () { |
|
console.log('Listening on port ' + port); |
|
}); |
|
|
|
mongoose.connect('mongodb://localhost/twilio-phone-verification'); |
@mosampaio could you remove the trailing slashes from the route methods?
e.g. https://gist.github.com/mosampaio/205f91e88d20f2dbeb325a23af299625/#file-app-js-L48