From 61e9aa40f49fbe7d868adb1433a4e506347b2129 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Emarianfoo=E2=80=9C?= <13335743+marianfoo@users.noreply.github.com> Date: Mon, 9 Sep 2024 19:28:49 +0200 Subject: [PATCH] feat: use serveframework with self signed certificates --- .../ui5-middleware-serveframework/README.md | 2 ++ .../lib/index.js | 29 ++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/ui5-middleware-serveframework/README.md b/packages/ui5-middleware-serveframework/README.md index 62da57a40..1c4194391 100644 --- a/packages/ui5-middleware-serveframework/README.md +++ b/packages/ui5-middleware-serveframework/README.md @@ -24,6 +24,8 @@ npm install ui5-middleware-serveframework --save-dev Name of environment variable that contains ui5 version (in case you want to override framework version from ui5.yaml) - `envFilePath`: *`string`*, default: `./.env` Path to file with environment variables +- `strictSSL`: `boolean` + Ignore strict SSL checks. Default value `true`. ## Usage diff --git a/packages/ui5-middleware-serveframework/lib/index.js b/packages/ui5-middleware-serveframework/lib/index.js index 08657200b..e726b3251 100644 --- a/packages/ui5-middleware-serveframework/lib/index.js +++ b/packages/ui5-middleware-serveframework/lib/index.js @@ -22,6 +22,7 @@ module.exports = async ({ log, options, middlewareUtil }) => { // provide a set of default runtime options const effectiveOptions = { debug: false, + strictSSL: true, }; // config-time options from ui5.yaml for cfdestination take precedence if (options.configuration) { @@ -73,16 +74,24 @@ module.exports = async ({ log, options, middlewareUtil }) => { // support for coporate proxies const { getProxyForUrl } = await import("proxy-from-env"); - const proxyUrl = getProxyForUrl(baseUrl); const { HttpsProxyAgent } = await import("https-proxy-agent"); - const agent = proxyUrl ? new HttpsProxyAgent(proxyUrl) : undefined; - effectiveOptions.debug && log.info(`[${baseUrl}] Proxy: ${proxyUrl ? proxyUrl : "n/a"}`); + const https = await import("https"); + + const proxyUrl = getProxyForUrl(baseUrl); + const agentOptions = { rejectUnauthorized: effectiveOptions.strictSSL }; + + const agent = proxyUrl ? new HttpsProxyAgent(Object.assign(new URL(proxyUrl), agentOptions)) : new https.Agent(agentOptions); + + if (effectiveOptions.debug) { + log.info(`[${baseUrl}] Proxy: ${proxyUrl || "n/a"}, strictSSL: ${effectiveOptions.strictSSL}`); + } // fetch the version information for the concrete version from CDN const fetch = (await import("node-fetch")).default; - await fetch(`${baseUrl}/${frameworkVersion}/resources/sap-ui-version.json`, { agent }) - .then((res) => res.json()) - .then((json) => writeFile(versionInfoFile, JSON.stringify(json), { encoding: "utf-8" })); + const versionUrl = `${baseUrl}/${frameworkVersion}/resources/sap-ui-version.json`; + const response = await fetch(versionUrl, { agent }); + const versionInfo = await response.json(); + await writeFile(versionInfoFile, JSON.stringify(versionInfo), { encoding: "utf-8" }); } const versionInfo = JSON.parse(await readFile(versionInfoFile, { encoding: "utf-8" })); @@ -110,11 +119,11 @@ module.exports = async ({ log, options, middlewareUtil }) => { version: frameworkVersion, }, undefined, - 2 + 2, ), { encoding: "utf-8", - } + }, ); // create a ui5.yaml to list all librar @@ -165,11 +174,11 @@ module.exports = async ({ log, options, middlewareUtil }) => { }, }, undefined, - 2 + 2, ), { encoding: "utf-8", - } + }, ); // create a project graph with all library dependencies