2015-11-02 04:56:08 +00:00
|
|
|
var http = require('http');
|
|
|
|
var fs = require('fs');
|
|
|
|
var url = require('url');
|
|
|
|
var mime = require('mime');
|
|
|
|
var io = require('socket.io');
|
|
|
|
|
2016-02-07 00:26:29 +00:00
|
|
|
var util = require('./util');
|
2015-11-02 05:46:24 +00:00
|
|
|
var logger = require('./logger');
|
|
|
|
|
2015-11-02 05:19:27 +00:00
|
|
|
var config = require('../config.json');
|
2016-02-06 23:34:33 +00:00
|
|
|
var servers = require('../servers.json');
|
2015-11-02 04:56:08 +00:00
|
|
|
|
2015-12-26 20:18:09 +00:00
|
|
|
var urlMapping = [];
|
|
|
|
|
|
|
|
function setupRoutes() {
|
2015-11-02 05:19:27 +00:00
|
|
|
var routeKeys = Object.keys(config.routes);
|
|
|
|
|
|
|
|
// Map the (static) routes from our config.
|
|
|
|
for (var i = 0; i < routeKeys.length; i++) {
|
|
|
|
urlMapping[routeKeys[i]] = config.routes[routeKeys[i]];
|
|
|
|
}
|
|
|
|
|
2015-12-26 20:18:09 +00:00
|
|
|
logger.log('info', 'Routes: %s', routeKeys);
|
|
|
|
}
|
2015-11-02 05:19:27 +00:00
|
|
|
|
2015-12-26 20:18:09 +00:00
|
|
|
function handleRequest(req, res) {
|
|
|
|
var requestUrl = url.parse(req.url).pathname;
|
2015-11-02 04:56:08 +00:00
|
|
|
|
2015-12-26 20:18:09 +00:00
|
|
|
logger.log('info', '%s requested: %s', req.connection.remoteAddress, requestUrl);
|
2015-11-02 07:08:54 +00:00
|
|
|
|
2015-12-26 20:18:09 +00:00
|
|
|
if (requestUrl === '/status.json') {
|
|
|
|
res.setHeader('Content-Type', 'text/plain');
|
2015-12-19 03:23:24 +00:00
|
|
|
|
2015-12-26 20:18:09 +00:00
|
|
|
res.write(JSON.stringify({
|
|
|
|
error: true,
|
|
|
|
message: 'API deprecated.'
|
|
|
|
}));
|
2015-11-09 07:03:03 +00:00
|
|
|
|
2016-02-06 23:34:33 +00:00
|
|
|
res.end();
|
|
|
|
} else if (requestUrl === '/publicConfig.json') {
|
|
|
|
res.setHeader('Content-Type', 'application/javascript');
|
|
|
|
|
|
|
|
var categories = config.serverCategories;
|
|
|
|
|
|
|
|
// Legacy support for people without categories configured.
|
|
|
|
if (!categories) {
|
|
|
|
categories = {
|
|
|
|
'default': 'All Networks'
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
for (var i = 0; i < servers.length; i++) {
|
|
|
|
var entry = servers[i];
|
|
|
|
|
|
|
|
if (!entry.category) {
|
|
|
|
entry.category = 'default';
|
|
|
|
|
|
|
|
logger.warn('%s has no category, defaulting!', entry.name);
|
|
|
|
} else if (!categories[entry.category]) {
|
|
|
|
logger.warn('%s has an unknown category (%s), defaulting!', entry.name, entry.category);
|
|
|
|
|
|
|
|
entry.category = 'default';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var publicConfig = {
|
|
|
|
categories: categories,
|
|
|
|
graphDuration: config.graphDuration,
|
2016-02-07 00:26:29 +00:00
|
|
|
servers: servers,
|
|
|
|
bootTime: util.getBootTime()
|
2016-02-06 23:34:33 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
res.write('setPublicConfig(' + JSON.stringify(publicConfig) + ');');
|
|
|
|
|
2015-12-26 20:18:09 +00:00
|
|
|
res.end();
|
|
|
|
} else if (requestUrl in urlMapping) {
|
|
|
|
var file = urlMapping[requestUrl];
|
2015-11-02 04:56:08 +00:00
|
|
|
|
2015-12-26 20:18:09 +00:00
|
|
|
res.setHeader('Content-Type', mime.lookup(file));
|
|
|
|
|
|
|
|
fs.createReadStream(file).pipe(res);
|
|
|
|
} else {
|
|
|
|
res.statusCode = 404;
|
2015-12-19 03:23:24 +00:00
|
|
|
|
2015-12-26 20:18:09 +00:00
|
|
|
res.write('404');
|
|
|
|
|
|
|
|
res.end();
|
|
|
|
}
|
|
|
|
}
|
2015-11-02 04:56:08 +00:00
|
|
|
|
2015-12-26 20:18:09 +00:00
|
|
|
exports.start = function() {
|
|
|
|
setupRoutes();
|
|
|
|
|
|
|
|
// Create our tiny little HTTP server.
|
|
|
|
var server = http.createServer(handleRequest);
|
2015-11-02 04:56:08 +00:00
|
|
|
|
2015-11-02 05:19:27 +00:00
|
|
|
server.listen(config.site.port, config.site.ip);
|
2015-11-02 04:56:08 +00:00
|
|
|
|
|
|
|
// I don't like this. But it works, I think.
|
2015-12-19 03:23:24 +00:00
|
|
|
exports.io = io.listen(server);
|
2015-11-02 04:56:08 +00:00
|
|
|
|
2015-12-26 20:18:09 +00:00
|
|
|
// Since everything is loaded, let's celebrate!
|
2015-11-02 05:46:24 +00:00
|
|
|
logger.log('info', 'Started on %s:%d', config.site.ip, config.site.port);
|
2015-11-02 05:19:27 +00:00
|
|
|
};
|