mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Switch to using abstraction for joining paths to control explicit side effect
Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
parent
c5b14c48d8
commit
af3325e816
@ -3,14 +3,18 @@
|
|||||||
* 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 path from "path";
|
|
||||||
import directoryForUserDataInjectable from "../directory-for-user-data/directory-for-user-data.injectable";
|
import directoryForUserDataInjectable from "../directory-for-user-data/directory-for-user-data.injectable";
|
||||||
|
import getAbsolutePathInjectable from "../../path/get-absolute-path.injectable";
|
||||||
|
|
||||||
const directoryForBinariesInjectable = getInjectable({
|
const directoryForBinariesInjectable = getInjectable({
|
||||||
id: "directory-for-binaries",
|
id: "directory-for-binaries",
|
||||||
|
|
||||||
instantiate: (di) =>
|
instantiate: (di) => {
|
||||||
path.join(di.inject(directoryForUserDataInjectable), "binaries"),
|
const getAbsolutePath = di.inject(getAbsolutePathInjectable);
|
||||||
|
const directoryForUserData = di.inject(directoryForUserDataInjectable);
|
||||||
|
|
||||||
|
return getAbsolutePath(directoryForUserData, "binaries");
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default directoryForBinariesInjectable;
|
export default directoryForBinariesInjectable;
|
||||||
|
|||||||
@ -4,13 +4,18 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import directoryForBinariesInjectable from "../directory-for-binaries/directory-for-binaries.injectable";
|
import directoryForBinariesInjectable from "../directory-for-binaries/directory-for-binaries.injectable";
|
||||||
import path from "path";
|
import getAbsolutePathInjectable from "../../path/get-absolute-path.injectable";
|
||||||
|
|
||||||
const directoryForKubectlBinariesInjectable = getInjectable({
|
const directoryForKubectlBinariesInjectable = getInjectable({
|
||||||
id: "directory-for-kubectl-binaries",
|
id: "directory-for-kubectl-binaries",
|
||||||
|
|
||||||
instantiate: (di) =>
|
instantiate: (di) => {
|
||||||
path.join(di.inject(directoryForBinariesInjectable), "kubectl"),
|
const getAbsolutePath = di.inject(getAbsolutePathInjectable);
|
||||||
|
const directoryForBinaries = di.inject(directoryForBinariesInjectable);
|
||||||
|
|
||||||
|
|
||||||
|
return getAbsolutePath(directoryForBinaries, "kubectl");
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default directoryForKubectlBinariesInjectable;
|
export default directoryForKubectlBinariesInjectable;
|
||||||
|
|||||||
@ -3,14 +3,18 @@
|
|||||||
* 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 path from "path";
|
|
||||||
import directoryForUserDataInjectable from "../../../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
import directoryForUserDataInjectable from "../../../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
||||||
|
import getAbsolutePathInjectable from "../../../../../common/path/get-absolute-path.injectable";
|
||||||
|
|
||||||
const directoryForExtensionDataInjectable = getInjectable({
|
const directoryForExtensionDataInjectable = getInjectable({
|
||||||
id: "directory-for-extension-data",
|
id: "directory-for-extension-data",
|
||||||
|
|
||||||
instantiate: (di) =>
|
instantiate: (di) => {
|
||||||
path.join(di.inject(directoryForUserDataInjectable), "extension_data"),
|
const getAbsolutePath = di.inject(getAbsolutePathInjectable);
|
||||||
|
const directoryForUserData = di.inject(directoryForUserDataInjectable);
|
||||||
|
|
||||||
|
return getAbsolutePath(directoryForUserData, "extension_data");
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default directoryForExtensionDataInjectable;
|
export default directoryForExtensionDataInjectable;
|
||||||
|
|||||||
@ -16,9 +16,9 @@ import registerChannelInjectable from "./register-channel/register-channel.injec
|
|||||||
import { getAppPaths } from "./get-app-paths";
|
import { getAppPaths } from "./get-app-paths";
|
||||||
import getElectronAppPathInjectable from "./get-electron-app-path/get-electron-app-path.injectable";
|
import getElectronAppPathInjectable from "./get-electron-app-path/get-electron-app-path.injectable";
|
||||||
import setElectronAppPathInjectable from "./set-electron-app-path/set-electron-app-path.injectable";
|
import setElectronAppPathInjectable from "./set-electron-app-path/set-electron-app-path.injectable";
|
||||||
import path from "path";
|
|
||||||
import appNameInjectable from "./app-name/app-name.injectable";
|
import appNameInjectable from "./app-name/app-name.injectable";
|
||||||
import directoryForIntegrationTestingInjectable from "./directory-for-integration-testing/directory-for-integration-testing.injectable";
|
import directoryForIntegrationTestingInjectable from "./directory-for-integration-testing/directory-for-integration-testing.injectable";
|
||||||
|
import joinPathsInjectable from "../../common/path/join-paths.injectable";
|
||||||
|
|
||||||
const appPathsInjectable = getInjectable({
|
const appPathsInjectable = getInjectable({
|
||||||
id: "app-paths",
|
id: "app-paths",
|
||||||
@ -55,10 +55,11 @@ const setupPathForUserData = async (di: DiContainerForSetup) => {
|
|||||||
const setElectronAppPath = await di.inject(setElectronAppPathInjectable);
|
const setElectronAppPath = await di.inject(setElectronAppPathInjectable);
|
||||||
const appName = await di.inject(appNameInjectable);
|
const appName = await di.inject(appNameInjectable);
|
||||||
const getAppPath = await di.inject(getElectronAppPathInjectable);
|
const getAppPath = await di.inject(getElectronAppPathInjectable);
|
||||||
|
const joinPaths = await di.inject(joinPathsInjectable);
|
||||||
|
|
||||||
const appDataPath = getAppPath("appData");
|
const appDataPath = getAppPath("appData");
|
||||||
|
|
||||||
setElectronAppPath("userData", path.join(appDataPath, appName));
|
setElectronAppPath("userData", joinPaths(appDataPath, appName));
|
||||||
};
|
};
|
||||||
|
|
||||||
// Todo: this kludge is here only until we have a proper place to setup integration testing.
|
// Todo: this kludge is here only until we have a proper place to setup integration testing.
|
||||||
|
|||||||
@ -13,20 +13,23 @@ import isDevelopmentInjectable from "../../common/vars/is-development.injectable
|
|||||||
import httpProxy from "http-proxy";
|
import httpProxy from "http-proxy";
|
||||||
import readFileBufferInjectable from "../../common/fs/read-file-buffer.injectable";
|
import readFileBufferInjectable from "../../common/fs/read-file-buffer.injectable";
|
||||||
import getAbsolutePathInjectable, { GetAbsolutePath } from "../../common/path/get-absolute-path.injectable";
|
import getAbsolutePathInjectable, { GetAbsolutePath } from "../../common/path/get-absolute-path.injectable";
|
||||||
|
import type { JoinPaths } from "../../common/path/join-paths.injectable";
|
||||||
|
import joinPathsInjectable from "../../common/path/join-paths.injectable";
|
||||||
|
|
||||||
interface ProductionDependencies {
|
interface ProductionDependencies {
|
||||||
readFileBuffer: (path: string) => Promise<Buffer>;
|
readFileBuffer: (path: string) => Promise<Buffer>;
|
||||||
getAbsolutePath: GetAbsolutePath;
|
getAbsolutePath: GetAbsolutePath;
|
||||||
|
joinPaths: JoinPaths;
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleStaticFileInProduction =
|
const handleStaticFileInProduction =
|
||||||
({ readFileBuffer, getAbsolutePath }: ProductionDependencies) =>
|
({ readFileBuffer, getAbsolutePath, joinPaths }: ProductionDependencies) =>
|
||||||
async ({ params }: LensApiRequest) => {
|
async ({ params }: LensApiRequest) => {
|
||||||
const staticPath = getAbsolutePath(__static);
|
const staticPath = getAbsolutePath(__static);
|
||||||
let filePath = params.path;
|
let filePath = params.path;
|
||||||
|
|
||||||
for (let retryCount = 0; retryCount < 5; retryCount += 1) {
|
for (let retryCount = 0; retryCount < 5; retryCount += 1) {
|
||||||
const asset = path.join(staticPath, filePath);
|
const asset = joinPaths(staticPath, filePath);
|
||||||
const normalizedFilePath = getAbsolutePath(asset);
|
const normalizedFilePath = getAbsolutePath(asset);
|
||||||
|
|
||||||
if (!normalizedFilePath.startsWith(staticPath)) {
|
if (!normalizedFilePath.startsWith(staticPath)) {
|
||||||
@ -82,13 +85,14 @@ const staticFileRouteInjectable = getInjectable({
|
|||||||
const isDevelopment = di.inject(isDevelopmentInjectable);
|
const isDevelopment = di.inject(isDevelopmentInjectable);
|
||||||
const readFileBuffer = di.inject(readFileBufferInjectable);
|
const readFileBuffer = di.inject(readFileBufferInjectable);
|
||||||
const getAbsolutePath = di.inject(getAbsolutePathInjectable);
|
const getAbsolutePath = di.inject(getAbsolutePathInjectable);
|
||||||
|
const joinPaths = di.inject(joinPathsInjectable);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `/{path*}`,
|
path: `/{path*}`,
|
||||||
handler: isDevelopment
|
handler: isDevelopment
|
||||||
? handleStaticFileInDevelopment({ proxy: httpProxy.createProxy() })
|
? handleStaticFileInDevelopment({ proxy: httpProxy.createProxy() })
|
||||||
: handleStaticFileInProduction({ readFileBuffer, getAbsolutePath }),
|
: handleStaticFileInProduction({ readFileBuffer, getAbsolutePath, joinPaths }),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user