UNPKG

@hawtio/backend-middleware

Version:

An Express middleware that implements Hawtio backend

92 lines 7.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.proxy = proxy; const node_stream_1 = require("node:stream"); const logger_1 = require("./logger"); async function proxy(uri, req, res) { var _a; const handleError = (e) => { res.status(500).end(`error proxying to "${uri}: ${e}`); }; const headers = new Headers(); for (const [key, value] of Object.entries(req.headers)) { if (key === 'referer' || value == null) { continue; } if (Array.isArray(value)) { for (const item of value) { headers.append(key, item); } } else { headers.set(key, value); } } const jolokiaAuthorization = req.headers['x-jolokia-authorization']; if (jolokiaAuthorization) { headers.set('authorization', Array.isArray(jolokiaAuthorization) ? jolokiaAuthorization[0] : jolokiaAuthorization); } try { const request = { method: req.method, headers, }; if (req.method === 'POST') { // can we pass the request to be streamed from incoming expres.js to outgoing fetch request? if (req.complete || req.readableEnded) { // pass data consumed and transformed into JSON by bodyParser.json() middleware request.body = JSON.stringify((_a = req.body) !== null && _a !== void 0 ? _a : {}); } else { // we can safely stream request.body = req; request.duplex = 'half'; } } const res2 = await fetch(uri, request); const contentType = res2.headers.get('content-type'); if (contentType) { res.header('content-type', contentType); } const newHeaders = {}; res2.headers.forEach((v, k) => { newHeaders[k] = v; }); if (res2.status == 401 && newHeaders['www-authenticate']) { // emulate Hawtio's probing of remote Jolokia. Without "WWW-Authenticate: Basic ...", // browser never displays native credentials dialog, so we can handle it nicer let v = newHeaders['www-authenticate']; if (v.toLowerCase().startsWith('basic')) { v = 'Hawtio original-scheme="Basic" ' + v.substring(6, v.length); newHeaders['WWW-Authenticate'] = v; } } switch (res2.status) { case 401: case 403: case 429: logger_1.log.info('Authentication failed on remote server:', res2.status, res2.statusText, uri); logger_1.log.debug('Response headers:', newHeaders); res.header(newHeaders).sendStatus(res2.status); break; default: if (!res2.ok) { handleError(`${res2.status} ${res2.statusText}`); return; } if (res2.body) { res.status(res2.status); node_stream_1.Readable.fromWeb(res2.body) .pipe(res) .on('error', handleError); } else { res.status(res2.status).end(); } } } catch (error) { handleError(String(error)); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxzQkF1RkM7QUE3RkQsNkNBQXNDO0FBSXRDLHFDQUE4QjtBQUV2QixLQUFLLFVBQVUsS0FBSyxDQUFDLEdBQVcsRUFBRSxHQUFZLEVBQUUsR0FBYTs7SUFDbEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtRQUNoQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDeEQsQ0FBQyxDQUFBO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtJQUM3QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZDLFNBQVE7UUFDVixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDM0IsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQTtJQUNuRSxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFD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