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

Fix ordering issues on Runnable token

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2023-01-13 11:07:26 -05:00
parent 73469c4833
commit fab36c23a0
9 changed files with 54 additions and 114 deletions

View File

@ -6,20 +6,22 @@ import { getInjectable } from "@ogre-tools/injectable";
import clusterStoreInjectable from "../../../../common/cluster-store/cluster-store.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 { beforeApplicationIsLoadingInjectionToken } from "../../../../main/start-main-application/runnable-tokens/before-application-is-loading-injection-token";
import initUserStoreInjectable from "../../../../main/stores/init-user-store.injectable"; import initUserStoreInjectable from "../../../../main/stores/init-user-store.injectable";
import initAuthHeaderStateInjectable from "../../../auth-header/main/init-state.injectable";
const initClusterStoreInjectable = getInjectable({ const initClusterStoreInjectable = getInjectable({
id: "init-cluster-store", id: "init-cluster-store",
instantiate: (di) => { instantiate: (di) => ({
const clusterStore = di.inject(clusterStoreInjectable); id: "init-cluster-store",
run: () => {
const clusterStore = di.inject(clusterStoreInjectable);
return { clusterStore.load();
id: "init-cluster-store", },
run: () => { runAfter: [
clusterStore.load(); di.inject(initUserStoreInjectable),
}, di.inject(initAuthHeaderStateInjectable),
runAfter: di.inject(initUserStoreInjectable), ],
}; }),
},
injectionToken: beforeApplicationIsLoadingInjectionToken, injectionToken: beforeApplicationIsLoadingInjectionToken,
}); });

View File

@ -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<IncomingMessage, "url" | "method">, 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;

View File

@ -10,7 +10,7 @@ import lensProxyCertificateInjectable from "../../common/certificate/lens-proxy-
import type net from "net"; import type net from "net";
import { createServer } from "https"; import { createServer } from "https";
import handleLensRequestInjectable from "./handle-lens-request.injectable"; 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 { export interface LensProxy {
listen: () => Promise<void>; listen: () => Promise<void>;

View File

@ -10,19 +10,17 @@ import initDefaultUpdateChannelInjectable from "../vars/default-update-channel/i
const initUserStoreInjectable = getInjectable({ const initUserStoreInjectable = getInjectable({
id: "init-user-store", id: "init-user-store",
instantiate: (di) => { instantiate: (di) => ({
const userStore = di.inject(userStoreInjectable); id: "init-user-store",
const userStoreFileNameMigration = di.inject(userStoreFileNameMigrationInjectable); run: async () => {
const userStore = di.inject(userStoreInjectable);
const userStoreFileNameMigration = di.inject(userStoreFileNameMigrationInjectable);
return { await userStoreFileNameMigration();
id: "init-user-store", userStore.load();
run: async () => { },
await userStoreFileNameMigration(); runAfter: di.inject(initDefaultUpdateChannelInjectable),
userStore.load(); }),
},
runAfter: di.inject(initDefaultUpdateChannelInjectable),
};
},
injectionToken: beforeApplicationIsLoadingInjectionToken, injectionToken: beforeApplicationIsLoadingInjectionToken,
}); });

View File

@ -8,14 +8,14 @@ import buildVersionInjectable from "./build-version.injectable";
const initializeBuildVersionInjectable = getInjectable({ const initializeBuildVersionInjectable = getInjectable({
id: "initialize-build-version", id: "initialize-build-version",
instantiate: (di) => { instantiate: (di) => ({
const buildVersion = di.inject(buildVersionInjectable); id: "initialize-build-version",
run: async () => {
const buildVersion = di.inject(buildVersionInjectable);
return { await buildVersion.init();
id: "initialize-build-version", },
run: () => buildVersion.init(), }),
};
},
injectionToken: beforeApplicationIsLoadingInjectionToken, injectionToken: beforeApplicationIsLoadingInjectionToken,
}); });

View File

@ -9,15 +9,15 @@ import defaultUpdateChannelInjectable from "../../../features/application-update
const initDefaultUpdateChannelInjectable = getInjectable({ const initDefaultUpdateChannelInjectable = getInjectable({
id: "init-default-update-channel", id: "init-default-update-channel",
instantiate: (di) => { instantiate: (di) => ({
const defaultUpdateChannel = di.inject(defaultUpdateChannelInjectable); id: "init-default-update-channel",
run: async () => {
const defaultUpdateChannel = di.inject(defaultUpdateChannelInjectable);
return { await defaultUpdateChannel.init();
id: "init-default-update-channel", },
run: () => defaultUpdateChannel.init(), runAfter: di.inject(initReleaseChannelInjectable),
runAfter: di.inject(initReleaseChannelInjectable), }),
};
},
injectionToken: beforeApplicationIsLoadingInjectionToken, injectionToken: beforeApplicationIsLoadingInjectionToken,
}); });

View File

@ -9,15 +9,15 @@ import initSemanticBuildVersionInjectable from "../semantic-build-version/init.i
const initReleaseChannelInjectable = getInjectable({ const initReleaseChannelInjectable = getInjectable({
id: "init-release-channel", id: "init-release-channel",
instantiate: (di) => { instantiate: (di) => ({
const releaseChannel = di.inject(releaseChannelInjectable); id: "init-release-channel",
run: async () => {
const releaseChannel = di.inject(releaseChannelInjectable);
return { await releaseChannel.init();
id: "init-release-channel", },
run: () => releaseChannel.init(), runAfter: di.inject(initSemanticBuildVersionInjectable),
runAfter: di.inject(initSemanticBuildVersionInjectable), }),
};
},
injectionToken: beforeApplicationIsLoadingInjectionToken, injectionToken: beforeApplicationIsLoadingInjectionToken,
}); });

View File

@ -9,15 +9,15 @@ import initializeBuildVersionInjectable from "../build-version/init.injectable";
const initSemanticBuildVersionInjectable = getInjectable({ const initSemanticBuildVersionInjectable = getInjectable({
id: "init-semantic-build-version", id: "init-semantic-build-version",
instantiate: (di) => { instantiate: (di) => ({
const buildSemanticVersion = di.inject(buildSemanticVersionInjectable); id: "init-semantic-build-version",
run: async () => {
const buildSemanticVersion = di.inject(buildSemanticVersionInjectable);
return { return buildSemanticVersion.init();
id: "init-semantic-build-version", },
run: () => buildSemanticVersion.init(), runAfter: di.inject(initializeBuildVersionInjectable),
runAfter: di.inject(initializeBuildVersionInjectable), }),
};
},
injectionToken: beforeApplicationIsLoadingInjectionToken, injectionToken: beforeApplicationIsLoadingInjectionToken,
}); });