1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Website/server.js

85 lines
2.3 KiB
JavaScript

#!/usr/bin/env node
var server = require('http').createServer(handler)
, sanitize = require('xss-escape')
, rn = require('./src/rng')
, fs = require('fs')
, re = new RegExp('\.js$', 'i')
, port = process.env.PORT || /*80*/ 8000
function handler(req, res) {
// process incoming requests.
if (req.url == '/') req.url = '/index.html'
else if (re.test(req.url))
res.setHeader('Content-Type', 'application/javascript')
if (/^\/confirm\?/.test(req.url)) {
// @TODO
// compare submitted token with the token stored in our database.
res.statusCode = 302
res.setHeader('Location', '/')
return res.end()
}
if (/^\/email\?/.test(req.url)) {
var params = require('url').parse(req.url, true)
if (params && params.query.email) {
//console.log('got email:', params.query)
var obj = {}
, email = sanitize(params.query.email)
obj.token = rn()
obj.verified = false
obj.events = { paris: params.query.paris ? true : false }
obj.trace = (req.headers['x-forwarded-for'] || '').split(',')
|| [ req.connection.remoteAddress ]
var db = require('level')('./db/squatconf', { valueEncoding: 'json' })
db.put(email, obj, function(err) {
if (err) cb(err)
// else.. db updated OK
})
var nodemailer = require('nodemailer')
, transporter = nodemailer.createTransport()
, config = require('./config.json')
, url = 'http://squatconf.eu/confirm'
, link = url +'?email='+ email +'&token='+ obj.token +'\n\n'
var opts = {
from : config.email.from
, to : email
, subject: config.email.subject
, text : config.email.bodyText.replace(/\%link\%/, link)
}
transporter.sendMail(opts, function(err, data) {
if (err) throw err
// validation email sent
console.log('email sent..', data)
})
}
res.statusCode = 302
res.setHeader('Location', '/')
return res.end()
}
// serve static assets
var rs = fs.createReadStream(__dirname +'/html'+ req.url)
rs.pipe(res)
}
process.on('uncaughtException', function (err) {
console.error('Error at:', new Date)
console.error(err.stack)
})
server.listen(port)
console.log('['+ process.pid +'] server started on port '+ port)
console.log('(use Ctrl+c to stop the server)')