UNPKG

modpacksio-common

Version:

Common code for Modpacks.io services

49 lines (44 loc) 1.91 kB
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.' }); } } }