remex/libs/server.js
2022-02-02 17:07:16 +01:00

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
}