55 lines
1.4 KiB
JavaScript
55 lines
1.4 KiB
JavaScript
const config = require('../config.json');
|
|
const logger = require('../libs/logger.js');
|
|
const commands = require('../libs/commands.js');
|
|
const http = require('http');
|
|
|
|
var server;
|
|
var api;
|
|
|
|
function start(callback) {
|
|
buildAPI();
|
|
if (!server) {
|
|
server = http.createServer();
|
|
}
|
|
server.listen(config.server.port, config.server.listen)
|
|
.on('listening', function () {
|
|
logger.debug('server listening on ' + config.server.listen + ':' + config.server.port + '...');
|
|
handleRequests();
|
|
});
|
|
}
|
|
|
|
function handleRequests() {
|
|
server.on('request', function (request, response) {
|
|
logger.request(request);
|
|
var endpoint = api.get(request.url);
|
|
if (!endpoint) {
|
|
response.writeHead(501);
|
|
response.end('endpoint not defined\n');
|
|
return;
|
|
}
|
|
if (request.method.toLowerCase() != (endpoint.type.toLowerCase())) {
|
|
response.writeHead(405);
|
|
response.end('endpoint does not support ' + request.method + ' requests\n');
|
|
return;
|
|
}
|
|
commands.execute(endpoint);
|
|
response.end();
|
|
});
|
|
}
|
|
|
|
function buildAPI(callback) {
|
|
if (!config.api) {
|
|
logger.warn('no api defined');
|
|
}
|
|
api = new Map();
|
|
config.api.forEach(function(endpoint) {
|
|
var url = endpoint.url;
|
|
var tmp = endpoint;
|
|
delete tmp.url;
|
|
api.set(url, tmp);
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
start
|
|
} |