modpacksio-common
Version:
Common code for Modpacks.io services
49 lines (44 loc) • 1.91 kB
JavaScript
global.__shardId = require('node-machine-id').machineIdSync();
const permission = require('./src/permission');
const id = require('./src/id');
const security = require('./src/security');
const database = require('./src/database');
const mail = require('./src/mailer');
module.exports = Object.freeze({
permission, id, security, ...database, handle, mail
});
function handle (controller) {
return async (req, res) => {
const type = req.params.type;
if (req.params.type && type !== 'mods' && type !== 'modpacks')
return res.send(404);
try {
const ip = req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'] : req.connection.remoteAddress;
const response = await controller({
headers: req.headers,
params: req.params,
query: req.query,
cookies: req.cookies,
ip: security.sanitize(ip.startsWith('::ffff:') ? ip.substring(7) : ip),
body: req.body,
type: type && type.substring(0, type.length - 1)
});
// Set Cookies
if (response.cookies) {
response.cookies.filter(cookie => !cookie.remove).forEach(cookie => res.setCookie(
cookie.key,
cookie.value,
cookie.options
));
response.cookies.filter(cookie => cookie.remove).forEach(cookie => res.clearCookie(cookie.key));
}
res.headers = Object.assign({ 'Content-Type': 'application/json' }, response.headers || {});
res.body = response.body;
res.send(response.code || 200);
} catch (e) {
console.log(`Failed Request: ${e.message}`);
console.error(e);
res.send(400, { error: e.message || 'An unknown error has occurred.' });
}
}
}