From fab36c23a0af86f7af6819de2f68edc32a412272 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 13 Jan 2023 11:07:26 -0500 Subject: [PATCH] Fix ordering issues on Runnable token Signed-off-by: Sebastian Malton --- .../cluster/store/main/init.injectable.ts | 22 +++---- .../handle-proxy-upgrade.injectable.ts | 60 ------------------- src/main/lens-proxy/lens-proxy.injectable.ts | 2 +- ...ts => route-upgrade-request.injectable.ts} | 0 src/main/stores/init-user-store.injectable.ts | 22 ++++--- .../vars/build-version/init.injectable.ts | 14 ++--- .../default-update-channel/init.injectable.ts | 16 ++--- .../vars/release-channel/init.injectable.ts | 16 ++--- .../semantic-build-version/init.injectable.ts | 16 ++--- 9 files changed, 54 insertions(+), 114 deletions(-) delete mode 100644 src/main/lens-proxy/handle-proxy-upgrade.injectable.ts rename src/main/lens-proxy/upgrade-router/{router.injectable.ts => route-upgrade-request.injectable.ts} (100%) diff --git a/src/features/cluster/store/main/init.injectable.ts b/src/features/cluster/store/main/init.injectable.ts index 7849ab6acd..9c117e6729 100644 --- a/src/features/cluster/store/main/init.injectable.ts +++ b/src/features/cluster/store/main/init.injectable.ts @@ -6,20 +6,22 @@ import { getInjectable } from "@ogre-tools/injectable"; import clusterStoreInjectable from "../../../../common/cluster-store/cluster-store.injectable"; import { beforeApplicationIsLoadingInjectionToken } from "../../../../main/start-main-application/runnable-tokens/before-application-is-loading-injection-token"; import initUserStoreInjectable from "../../../../main/stores/init-user-store.injectable"; +import initAuthHeaderStateInjectable from "../../../auth-header/main/init-state.injectable"; const initClusterStoreInjectable = getInjectable({ id: "init-cluster-store", - instantiate: (di) => { - const clusterStore = di.inject(clusterStoreInjectable); + instantiate: (di) => ({ + id: "init-cluster-store", + run: () => { + const clusterStore = di.inject(clusterStoreInjectable); - return { - id: "init-cluster-store", - run: () => { - clusterStore.load(); - }, - runAfter: di.inject(initUserStoreInjectable), - }; - }, + clusterStore.load(); + }, + runAfter: [ + di.inject(initUserStoreInjectable), + di.inject(initAuthHeaderStateInjectable), + ], + }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/src/main/lens-proxy/handle-proxy-upgrade.injectable.ts b/src/main/lens-proxy/handle-proxy-upgrade.injectable.ts deleted file mode 100644 index 0ba96c8958..0000000000 --- a/src/main/lens-proxy/handle-proxy-upgrade.injectable.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - * 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 type { IncomingMessage } from "http"; -import type { Socket } from "net"; -import type { SetRequired } from "type-fest"; -import loggerInjectable from "../../common/logger.injectable"; -import { apiPrefix, apiKubePrefix } from "../../common/vars"; -import authHeaderStateInjectable from "../../features/auth-header/common/header-state.injectable"; -import { lensAuthHeaderName } from "../../features/auth-header/common/vars"; -import getClusterForRequestInjectable from "./get-cluster-for-request.injectable"; -import { kubeApiUpgradeRequest } from "./proxy-functions"; -import shellApiRequestInjectable from "./proxy-functions/shell-api-request.injectable"; - -const handleProxyUpgradeRequestInjectable = getInjectable({ - id: "handle-proxy-upgrade-request", - instantiate: (di) => { - const getClusterForRequest = di.inject(getClusterForRequestInjectable); - const shellApiRequest = di.inject(shellApiRequestInjectable); - const logger = di.inject(loggerInjectable); - const authHeaderValue = `Bearer ${di.inject(authHeaderStateInjectable).get()}`; - - return (req: SetRequired, socket: Socket, head: Buffer) => { - const cluster = getClusterForRequest(req); - const url = new URL(req.url, "https://localhost"); - - if (url.searchParams.get(lensAuthHeaderName) !== authHeaderValue) { - logger.warn(`[LENS-PROXY]: Request from url=${req.url} missing authentication`); - socket.destroy(); - - return; - } - - if (!cluster) { - logger.error(`[LENS-PROXY]: Could not find cluster for upgrade request from url=${req.url}`); - socket.destroy(); - - return; - } - - (async () => { - try { - if (url.pathname === apiPrefix) { - await shellApiRequest({ req, socket, cluster, head }); - } else if (url.pathname.startsWith(`${apiKubePrefix}/`)) { - await kubeApiUpgradeRequest({ req, socket, cluster, head }); - } else { - logger.warn(`[LENS-PROXY]: unknown upgrade request, url=${req.url}`); - } - } catch (error) { - logger.error("[LENS-PROXY]: failed to handle proxy upgrade", error); - } - })(); - }; - }, -}); - -export default handleProxyUpgradeRequestInjectable; diff --git a/src/main/lens-proxy/lens-proxy.injectable.ts b/src/main/lens-proxy/lens-proxy.injectable.ts index e035edca3e..8d1ff40aa8 100644 --- a/src/main/lens-proxy/lens-proxy.injectable.ts +++ b/src/main/lens-proxy/lens-proxy.injectable.ts @@ -10,7 +10,7 @@ import lensProxyCertificateInjectable from "../../common/certificate/lens-proxy- import type net from "net"; import { createServer } from "https"; import handleLensRequestInjectable from "./handle-lens-request.injectable"; -import routeUpgradeRequestInjectable from "./upgrade-router/router.injectable"; +import routeUpgradeRequestInjectable from "./upgrade-router/route-upgrade-request.injectable"; export interface LensProxy { listen: () => Promise; diff --git a/src/main/lens-proxy/upgrade-router/router.injectable.ts b/src/main/lens-proxy/upgrade-router/route-upgrade-request.injectable.ts similarity index 100% rename from src/main/lens-proxy/upgrade-router/router.injectable.ts rename to src/main/lens-proxy/upgrade-router/route-upgrade-request.injectable.ts diff --git a/src/main/stores/init-user-store.injectable.ts b/src/main/stores/init-user-store.injectable.ts index c8d7ec9fe0..7e2e6b3025 100644 --- a/src/main/stores/init-user-store.injectable.ts +++ b/src/main/stores/init-user-store.injectable.ts @@ -10,19 +10,17 @@ import initDefaultUpdateChannelInjectable from "../vars/default-update-channel/i const initUserStoreInjectable = getInjectable({ id: "init-user-store", - instantiate: (di) => { - const userStore = di.inject(userStoreInjectable); - const userStoreFileNameMigration = di.inject(userStoreFileNameMigrationInjectable); + instantiate: (di) => ({ + id: "init-user-store", + run: async () => { + const userStore = di.inject(userStoreInjectable); + const userStoreFileNameMigration = di.inject(userStoreFileNameMigrationInjectable); - return { - id: "init-user-store", - run: async () => { - await userStoreFileNameMigration(); - userStore.load(); - }, - runAfter: di.inject(initDefaultUpdateChannelInjectable), - }; - }, + await userStoreFileNameMigration(); + userStore.load(); + }, + runAfter: di.inject(initDefaultUpdateChannelInjectable), + }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/src/main/vars/build-version/init.injectable.ts b/src/main/vars/build-version/init.injectable.ts index f53e735a47..ede3d71a0b 100644 --- a/src/main/vars/build-version/init.injectable.ts +++ b/src/main/vars/build-version/init.injectable.ts @@ -8,14 +8,14 @@ import buildVersionInjectable from "./build-version.injectable"; const initializeBuildVersionInjectable = getInjectable({ id: "initialize-build-version", - instantiate: (di) => { - const buildVersion = di.inject(buildVersionInjectable); + instantiate: (di) => ({ + id: "initialize-build-version", + run: async () => { + const buildVersion = di.inject(buildVersionInjectable); - return { - id: "initialize-build-version", - run: () => buildVersion.init(), - }; - }, + await buildVersion.init(); + }, + }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/src/main/vars/default-update-channel/init.injectable.ts b/src/main/vars/default-update-channel/init.injectable.ts index 56e90252f3..e5c7b9fbf8 100644 --- a/src/main/vars/default-update-channel/init.injectable.ts +++ b/src/main/vars/default-update-channel/init.injectable.ts @@ -9,15 +9,15 @@ import defaultUpdateChannelInjectable from "../../../features/application-update const initDefaultUpdateChannelInjectable = getInjectable({ id: "init-default-update-channel", - instantiate: (di) => { - const defaultUpdateChannel = di.inject(defaultUpdateChannelInjectable); + instantiate: (di) => ({ + id: "init-default-update-channel", + run: async () => { + const defaultUpdateChannel = di.inject(defaultUpdateChannelInjectable); - return { - id: "init-default-update-channel", - run: () => defaultUpdateChannel.init(), - runAfter: di.inject(initReleaseChannelInjectable), - }; - }, + await defaultUpdateChannel.init(); + }, + runAfter: di.inject(initReleaseChannelInjectable), + }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/src/main/vars/release-channel/init.injectable.ts b/src/main/vars/release-channel/init.injectable.ts index 59527d2194..abca71f0dd 100644 --- a/src/main/vars/release-channel/init.injectable.ts +++ b/src/main/vars/release-channel/init.injectable.ts @@ -9,15 +9,15 @@ import initSemanticBuildVersionInjectable from "../semantic-build-version/init.i const initReleaseChannelInjectable = getInjectable({ id: "init-release-channel", - instantiate: (di) => { - const releaseChannel = di.inject(releaseChannelInjectable); + instantiate: (di) => ({ + id: "init-release-channel", + run: async () => { + const releaseChannel = di.inject(releaseChannelInjectable); - return { - id: "init-release-channel", - run: () => releaseChannel.init(), - runAfter: di.inject(initSemanticBuildVersionInjectable), - }; - }, + await releaseChannel.init(); + }, + runAfter: di.inject(initSemanticBuildVersionInjectable), + }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/src/main/vars/semantic-build-version/init.injectable.ts b/src/main/vars/semantic-build-version/init.injectable.ts index ee822a8796..f0beada429 100644 --- a/src/main/vars/semantic-build-version/init.injectable.ts +++ b/src/main/vars/semantic-build-version/init.injectable.ts @@ -9,15 +9,15 @@ import initializeBuildVersionInjectable from "../build-version/init.injectable"; const initSemanticBuildVersionInjectable = getInjectable({ id: "init-semantic-build-version", - instantiate: (di) => { - const buildSemanticVersion = di.inject(buildSemanticVersionInjectable); + instantiate: (di) => ({ + id: "init-semantic-build-version", + run: async () => { + const buildSemanticVersion = di.inject(buildSemanticVersionInjectable); - return { - id: "init-semantic-build-version", - run: () => buildSemanticVersion.init(), - runAfter: di.inject(initializeBuildVersionInjectable), - }; - }, + return buildSemanticVersion.init(); + }, + runAfter: di.inject(initializeBuildVersionInjectable), + }), injectionToken: beforeApplicationIsLoadingInjectionToken, });