@hawtio/backend-middleware
Version:
An Express middleware that implements Hawtio backend
81 lines • 6.5 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.hawtioBackend = void 0;
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;
}
exports.hawtioBackend = hawtioBackend;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBMEU7QUFDMUUsMERBQTZDO0FBQzdDLDJCQUF3QztBQUV4QyxxQ0FBNEM7QUFDNUMsbUNBQStCO0FBUy9CLE1BQU0sY0FBYyxHQUF5QjtJQUMzQyxRQUFRLEVBQUUsbUJBQU0sQ0FBQyxJQUFJO0NBQ3RCLENBQUE7QUFFRCxTQUFnQixhQUFhLENBQUMsVUFBZ0MsY0FBYztJQUMxRSxJQUFBLHFCQUFZLEVBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRTlCLE1BQU0sT0FBTyxHQUFHLGlCQUFPLENBQUMsTUFBTSxFQUFFLENBQUE7SUFFaEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFhLEVBQUUsR0FBYSxFQUFFLElBQWtCLEVBQUUsS0FBYSxFQUFFLEVBQUU7UUFDekYsWUFBRyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNyQyxRQUFRLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQzVCLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxPQUFPO2dCQUNWLElBQUksRUFBRSxDQUFBO2dCQUNOLE1BQUs7WUFDUDtnQkFDRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUN0RCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQWEsRUFBRSxJQUFjLEVBQUUsSUFBa0IsRUFBRSxRQUFnQixFQUFFLEVBQUU7UUFDaEcsWUFBRyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMzQyxJQUFJLEVBQUUsQ0FBQTtJQUNSLENBQUMs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