sharedrop/app/server.js
2014-04-13 22:28:31 +02:00

88 lines
2.5 KiB
JavaScript

module.exports.server = function (options) {
'use strict';
if (process.env.NODE_ENV === 'production') {
require('newrelic');
}
// Room server
var http = require('http'),
path = require('path'),
express = require('express'),
uuid = require('node-uuid'),
crypto = require('crypto'),
persona = require('express-persona'),
FirebaseTokenGenerator = require("firebase-token-generator"),
firebaseTokenGenerator = new FirebaseTokenGenerator(process.env.FIREBASE_SECRET),
app = express(),
personaUrl= process.env.PERSONA_URL,
secret = process.env.SECRET,
base;
options = options || {};
base = options.base || ['.'];
app.enable('trust proxy');
app.use(express.logger());
app.use(express.urlencoded());
app.use(express.cookieParser());
app.use(express.cookieSession({
cookie: {
// secure: true,
httpOnly: true,
maxAge: 30 * 24 * 60 * 60 * 1000 // 30 days
},
secret: secret,
proxy: true
}));
app.use(express.compress());
app.use(express.json());
base.forEach(function (dir) {
['scripts', 'styles', 'images', 'fonts'].forEach(function (subdir) {
app.use('/' + subdir, express.static(dir + '/' + subdir, {
maxAge: 31104000000 // ~1 year
}));
});
});
//
// Web server
//
// Handle Persona authentication
persona(app, { audience: personaUrl });
app.get('/', function (req, res) {
var root = path.join(__dirname, '..', base[0]);
res.sendfile(root + '/index.html');
});
app.get('/rooms/:id', function (req, res) {
var root = path.join(__dirname, '..', base[0]);
res.sendfile(root + '/index.html');
});
app.get('/room', function (req, res) {
var ip = req.headers['cf-connecting-ip'] || req.ip,
name = crypto.createHmac('md5', secret).update(ip).digest('hex');
res.json({name: name});
});
app.get('/auth', function (req, res) {
var ip = req.headers['cf-connecting-ip'] || req.ip,
id = uuid.v1(),
token = firebaseTokenGenerator.createToken(
{id: id}, // will be available in Firebase security rules as 'auth'
{expires: 32503680000} // 01.01.3000 00:00
);
res.json({id: id, token: token, public_ip: ip});
});
return http.createServer(app);
};