1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Replace usage of request in setupLensProxy

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-11-03 16:00:51 -04:00
parent c3402562a1
commit f522d23662
4 changed files with 65 additions and 24 deletions

View File

@ -0,0 +1,33 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { Agent } from "https";
import type { RequestInit, Response } from "node-fetch";
import lensProxyPortInjectable from "../../main/lens-proxy/lens-proxy-port.injectable";
import lensProxyCertificateInjectable from "../certificate/lens-proxy-certificate.injectable";
import nodeFetchModuleInjectable from "./fetch-module.injectable";
export type LensFetch = (pathnameAndOrQuery: string, init?: Omit<RequestInit, "agent">) => Promise<Response>;
/**
* This fetch is for requesting items from the Lens Proxy and thus does not cause side effects
*/
const lensFetchInjectable = getInjectable({
id: "lens-fetch",
instantiate: (di): LensFetch => {
const { default: fetch } = di.inject(nodeFetchModuleInjectable);
const lensProxyPort = di.inject(lensProxyPortInjectable);
const lensProxyCertificate = di.inject(lensProxyCertificateInjectable);
return async (pathnameAndOrQuery, init) => fetch(`https://127.0.0.1:${lensProxyPort.get()}${pathnameAndOrQuery}`, {
...init,
agent: new Agent({
ca: lensProxyCertificate.get().cert,
}),
});
},
});
export default lensFetchInjectable;

View File

@ -7,7 +7,7 @@ import { getInjectionToken } from "@ogre-tools/injectable";
import { SemVer } from "semver"; import { SemVer } from "semver";
import type { InitializableState } from "../initializable-state/create"; import type { InitializableState } from "../initializable-state/create";
import { createInitializableState } from "../initializable-state/create"; import { createInitializableState } from "../initializable-state/create";
import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token"; import type { RequestChannel } from "../utils/channel/request-channel";
export const buildVersionInjectionToken = getInjectionToken<InitializableState<string>>({ export const buildVersionInjectionToken = getInjectionToken<InitializableState<string>>({
id: "build-version-token", id: "build-version-token",

View File

@ -0,0 +1,21 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import lensFetchInjectable from "../../../../common/fetch/lens-fetch.injectable";
const requestAppVersionViaProxyInjectable = getInjectable({
id: "request-app-version-via-proxy",
instantiate: (di) => {
const lensFetch = di.inject(lensFetchInjectable);
return async () => {
const response = await lensFetch("/version");
return (await response.json() as { version: string }).version;
};
},
});
export default requestAppVersionViaProxyInjectable;

View File

@ -3,18 +3,14 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import exitAppInjectable from "../../electron-app/features/exit-app.injectable"; import exitAppInjectable from "../../../electron-app/features/exit-app.injectable";
import lensProxyInjectable from "../../lens-proxy/lens-proxy.injectable"; import lensProxyInjectable from "../../../lens-proxy/lens-proxy.injectable";
import loggerInjectable from "../../../common/logger.injectable"; import loggerInjectable from "../../../../common/logger.injectable";
import lensProxyPortInjectable from "../../lens-proxy/lens-proxy-port.injectable"; import isWindowsInjectable from "../../../../common/vars/is-windows.injectable";
import isWindowsInjectable from "../../../common/vars/is-windows.injectable"; import showErrorPopupInjectable from "../../../electron-app/features/show-error-popup.injectable";
import showErrorPopupInjectable from "../../electron-app/features/show-error-popup.injectable"; import { beforeApplicationIsLoadingInjectionToken } from "../../runnable-tokens/before-application-is-loading-injection-token";
import { beforeApplicationIsLoadingInjectionToken } from "../runnable-tokens/before-application-is-loading-injection-token"; import buildVersionInjectable from "../../../vars/build-version/build-version.injectable";
import buildVersionInjectable from "../../vars/build-version/build-version.injectable"; import requestAppVersionViaProxyInjectable from "./request-app-version.injectable";
import initializeBuildVersionInjectable from "../../vars/build-version/init.injectable";
import lensProxyCertificateInjectable from "../../../common/certificate/lens-proxy-certificate.injectable";
import fetchInjectable from "../../../common/fetch/fetch.injectable";
import { Agent } from "https";
const setupLensProxyInjectable = getInjectable({ const setupLensProxyInjectable = getInjectable({
id: "setup-lens-proxy", id: "setup-lens-proxy",
@ -23,12 +19,10 @@ const setupLensProxyInjectable = getInjectable({
const lensProxy = di.inject(lensProxyInjectable); const lensProxy = di.inject(lensProxyInjectable);
const exitApp = di.inject(exitAppInjectable); const exitApp = di.inject(exitAppInjectable);
const logger = di.inject(loggerInjectable); const logger = di.inject(loggerInjectable);
const lensProxyPort = di.inject(lensProxyPortInjectable); const requestAppVersionViaProxy = di.inject(requestAppVersionViaProxyInjectable);
const isWindows = di.inject(isWindowsInjectable); const isWindows = di.inject(isWindowsInjectable);
const showErrorPopup = di.inject(showErrorPopupInjectable); const showErrorPopup = di.inject(showErrorPopupInjectable);
const buildVersion = di.inject(buildVersionInjectable); const buildVersion = di.inject(buildVersionInjectable);
const lensProxyCertificate = di.inject(lensProxyCertificateInjectable);
const fetch = di.inject(fetchInjectable);
return { return {
id: "setup-lens-proxy", id: "setup-lens-proxy",
@ -45,13 +39,7 @@ const setupLensProxyInjectable = getInjectable({
// test proxy connection // test proxy connection
try { try {
logger.info("🔎 Testing LensProxy connection ..."); logger.info("🔎 Testing LensProxy connection ...");
const versionResponse = await fetch(`https://127.0.0.1:${lensProxyPort.get()}/version`, { const versionFromProxy = await requestAppVersionViaProxy();
agent: new Agent({
ca: lensProxyCertificate.get()?.cert,
}),
});
const { version: versionFromProxy } = await versionResponse.json() as { version: string };
if (buildVersion.get() !== versionFromProxy) { if (buildVersion.get() !== versionFromProxy) {
logger.error("Proxy server responded with invalid response"); logger.error("Proxy server responded with invalid response");
@ -78,7 +66,6 @@ const setupLensProxyInjectable = getInjectable({
return exitApp(); return exitApp();
} }
}, },
runAfter: di.inject(initializeBuildVersionInjectable),
}; };
}, },