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 }