/* --- IMPORTS -------------------------- */ const express = require('express'); const bodyParser = require('body-parser'); const concatStream = require('concat-stream'); const config = require('config'); const fs = require('fs'); const os = require('os'); const path = require('path'); /* --- SETUP ---------------------------- */ // Express const app = express(); app.use((req, res, next) => { req.pipe(concatStream((data) => { req.rawBody = data; next(); })); }); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ 'extended': false })); /* --- FUNCTION ------------------------- */ function mkdir(dir) { if (fs.existsSync(dir)) { return; } let d = path.dirname(dir); if (!fs.existsSync(d)) { mkdir(d); } fs.mkdirSync(dir); } function toOsPath(urlPath) { return config.get('maven.dir') + urlPath.substr(config.get('maven.url').length + 1); } /* --- ROUTING -------------------------- */ app.route(`/${config.get('maven.url')}/*`) .get((req, res) => { let osPath = toOsPath(req.path); fs.exists(osPath, (value) => { if (!value) { res.status(404).send(); } else { res.status(200); res.sendFile(osPath); } }); }) .put((req, res) => { let osPath = toOsPath(req.path); mkdir(path.dirname(osPath)); fs.writeFile(osPath, req.rawBody, (err) => { if (err) { console.error(err); res.status(500).send(); } else { res.status(200).send(); } }); }); /* --- START APP ------------------------ */ console.info(`Start web server :: ${config.get('web.host')}:${config.get('web.port')}`); app.listen(config.get('web.port'), config.get('web.host'));