UNPKG

@hawtio/backend-middleware

Version:

An Express middleware that implements Hawtio backend

80 lines 6.46 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.hawtioBackend = hawtioBackend; const express_1 = __importDefault(require("express")); const js_logger_1 = __importDefault(require("js-logger")); const qs_1 = require("qs"); const logger_1 = require("./logger"); const proxy_1 = require("./proxy"); const defaultOptions = { logLevel: js_logger_1.default.INFO, }; function hawtioBackend(options = defaultOptions) { (0, logger_1.configureLog)(options.logLevel); const backend = express_1.default.Router(); backend.param('proto', (_req, res, next, proto) => { logger_1.log.debug('Requesting proto:', proto); switch (proto.toLowerCase()) { case 'http': case 'https': next(); break; default: res.status(406).send(`Invalid protocol: ${proto}`); } }); backend.param('hostname', (_req, _res, next, hostname) => { logger_1.log.debug('Requesting hostname:', hostname); next(); }); backend.param('port', (_req, res, next, port) => { logger_1.log.debug('Requesting port:', port); const portNumber = parseInt(port); logger_1.log.debug('Parsed port number:', portNumber); if (isNaN(portNumber)) { res.status(406).send(`Invalid port number: ${port}`); } else { next(); } }); backend.use('/', (req, res, next) => { if (req.path === '') { res.status(200).end(); } else { next(); } }); backend.use('/:proto/:hostname/:port/', (req, res) => { logger_1.log.debug('Requesting path:', req.path); logger_1.log.debug('Requesting query:', req.query); const uri = getTargetURI({ proto: req.params.proto, hostname: req.params.hostname, port: req.params.port, path: req.path, query: req.query, }); (0, proxy_1.proxy)(uri, req, res); }); return backend; } function getTargetURI(options) { let uri = ''; if (options.username && options.password) { uri = `${options.proto}://${options.username}:${options.password}@${options.hostname}:${options.port}${options.path}`; } else { uri = `${options.proto}://${options.hostname}:${options.port}${options.path}`; } if (Object.keys(options.query).length !== 0) { uri += '?' + (0, qs_1.stringify)(options.query); } logger_1.log.debug('Target URL:', uri); return uri; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWtCQSxzQ0F1REM7QUF6RUQsc0RBQTBFO0FBQzFFLDBEQUE2QztBQUM3QywyQkFBd0M7QUFFeEMscUNBQTRDO0FBQzVDLG1DQUErQjtBQVMvQixNQUFNLGNBQWMsR0FBeUI7SUFDM0MsUUFBUSxFQUFFLG1CQUFNLENBQUMsSUFBSTtDQUN0QixDQUFBO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLFVBQWdDLGNBQWM7SUFDMUUsSUFBQSxxQkFBWSxFQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUU5QixNQUFNLE9BQU8sR0FBRyxpQkFBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBRWhDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBYSxFQUFFLEdBQWEsRUFBRSxJQUFrQixFQUFFLEtBQWEsRUFBRSxFQUFFO1FBQ3pGLFlBQUcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDckMsUUFBUSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUM1QixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssT0FBTztnQkFDVixJQUFJLEVBQUUsQ0FBQTtnQkFDTixNQUFLO1lBQ1A7Z0JBQ0UsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDdEQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFhLEVBQUUsSUFBYyxFQUFFLElBQWtCLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO1FBQ2hHLFlBQUcsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDM0MsSUFBSSxFQUFFLENB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