UNPKG

@talentsoft-opensource/widget-display-tool

Version:

Widget Simulator

85 lines (79 loc) 3.16 kB
const bodyParser = require("body-parser"); const urlParse = require("url").parse; import { Application, Request as ERequest } from "express"; import { Logger } from "../logging"; import { RequestOptions } from "@talentsoft-opensource/integration-widget-contract"; import { requestExternalResource } from "./requestExternalResource"; import { downloadExternalResource } from "./downloadExternalResource"; import { SecurityMode } from "../securityModes/securityMode"; export function setupProxy(app: Application, logger: Logger) { function logRequest(req: ERequest) { logger.info(`incoming request - ${req.method} - ${req.url}`); } app.use(bodyParser.text({ type: '*/*'})); app.all("/proxy", async function(req, res, next) { logRequest(req); const query = urlParse(req.url, true).query; const { url, secretkey, login } = query; const securitymode: SecurityMode = query.securitymode || "directconnect"; if (!url || !secretkey || !login) { res.sendStatus(400).json({ error: "Missing querystring parameter. You must provide url, secretKey, login and securityMode" }); return; } try { const options: RequestOptions = { url, verb: req.method as any, // no solution for the moment :-( body: req.body, headers: req.headers as Record<string, string> }; const result = await requestExternalResource( options, secretkey, login, securitymode ); await res.json(result); } catch (err) { logger.error(err); next(err); } }); app.all("/download", async function(req, res, next) { const query = urlParse(req.url, true).query; const { url, secretkey, login } = query; const securitymode: SecurityMode = query.securitymode || "directconnect"; if (!url || !secretkey || !login) { res.sendStatus(400).json({ error: "Missing querystring parameter. You must provide url, secretKey, login and securityMode" }); return; } try { const options: RequestOptions = { url, verb: req.method as any, // no solution for the moment :-( body: req.body, headers: req.headers as Record<string, string> }; const result = await downloadExternalResource( options, secretkey, login, securitymode ); res.set('Content-Type', result.headers["content-type"]); res.set('Content-Disposition', result.headers["content-disposition"]); return res.send(Buffer.from(result.body)); } catch (err) { logger.error(err); next(err); } }); }