mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Make response of route typed
Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
parent
4b76327489
commit
79587514d8
@ -3,7 +3,7 @@
|
|||||||
* 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 type { LensApiRequest, LensApiResult } from "../router";
|
import type { LensApiRequest, Route } from "../router";
|
||||||
import staticFileRouteInjectable from "../routes/static-file-route.injectable";
|
import staticFileRouteInjectable from "../routes/static-file-route.injectable";
|
||||||
import { getDiForUnitTesting } from "../getDiForUnitTesting";
|
import { getDiForUnitTesting } from "../getDiForUnitTesting";
|
||||||
|
|
||||||
@ -24,14 +24,14 @@ jest.mock("electron", () => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
describe("Router", () => {
|
describe("Router", () => {
|
||||||
let handleStaticFile: (request: LensApiRequest) => Promise<LensApiResult>;
|
let handleStaticFileRoute: Route<Buffer>;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
const di = getDiForUnitTesting({ doGeneralOverrides: true });
|
const di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||||
|
|
||||||
await di.runSetups();
|
await di.runSetups();
|
||||||
|
|
||||||
handleStaticFile = di.inject(staticFileRouteInjectable).handler;
|
handleStaticFileRoute = di.inject(staticFileRouteInjectable);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("blocks path traversal attacks", async () => {
|
it("blocks path traversal attacks", async () => {
|
||||||
@ -48,7 +48,7 @@ describe("Router", () => {
|
|||||||
raw: {},
|
raw: {},
|
||||||
} as LensApiRequest<any>;
|
} as LensApiRequest<any>;
|
||||||
|
|
||||||
await handleStaticFile(request);
|
await handleStaticFileRoute.handler(request);
|
||||||
|
|
||||||
expect(response.statusCode).toEqual(404);
|
expect(response.statusCode).toEqual(404);
|
||||||
});
|
});
|
||||||
@ -73,7 +73,7 @@ describe("Router", () => {
|
|||||||
raw: { req },
|
raw: { req },
|
||||||
} as LensApiRequest<any>;
|
} as LensApiRequest<any>;
|
||||||
|
|
||||||
await handleStaticFile(request);
|
await handleStaticFileRoute.handler(request);
|
||||||
|
|
||||||
expect(response.statusCode).toEqual(200);
|
expect(response.statusCode).toEqual(200);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -132,12 +132,12 @@ export const contentTypes: Record<SupportedFileExtension, LensApiResultContentTy
|
|||||||
|
|
||||||
export class Router {
|
export class Router {
|
||||||
protected router = new Call.Router();
|
protected router = new Call.Router();
|
||||||
static rootPath = path.resolve(__static);
|
protected static rootPath = path.resolve(__static);
|
||||||
|
|
||||||
constructor(routes: Route[]) {
|
constructor(routes: Route<any>[]) {
|
||||||
routes.forEach(route => {
|
routes.forEach(route => {
|
||||||
this.router.add({ method: route.method, path: route.path }, async (request: LensApiRequest) => {
|
this.router.add({ method: route.method, path: route.path }, async (request: LensApiRequest) => {
|
||||||
let result: LensApiResult | void;
|
let result: LensApiResult<any> | void;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
result = await route.handler(request);
|
result = await route.handler(request);
|
||||||
@ -220,17 +220,17 @@ interface LensApiResultContentType {
|
|||||||
respond: (content: any, statusCode: number, response: http.ServerResponse) => void;
|
respond: (content: any, statusCode: number, response: http.ServerResponse) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LensApiResult {
|
export interface LensApiResult<TResult> {
|
||||||
statusCode?: number;
|
statusCode?: number;
|
||||||
response?: any;
|
response?: TResult;
|
||||||
error?: any;
|
error?: any;
|
||||||
contentType?: LensApiResultContentType;
|
contentType?: LensApiResultContentType;
|
||||||
headers?: { Location: string };
|
headers?: { Location: string };
|
||||||
proxy?: httpProxy;
|
proxy?: httpProxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Route {
|
export interface Route<TResponse> {
|
||||||
path: string;
|
path: string;
|
||||||
method: "get" | "post" | "put" | "patch" | "delete";
|
method: "get" | "post" | "put" | "patch" | "delete";
|
||||||
handler: (request: LensApiRequest) => LensApiResult | Promise<LensApiResult>;
|
handler: (request: LensApiRequest) => LensApiResult<TResponse> | Promise<LensApiResult<TResponse>>;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
import { getInjectable, getInjectionToken } from "@ogre-tools/injectable";
|
import { getInjectable, getInjectionToken } from "@ogre-tools/injectable";
|
||||||
import { Route, Router } from "../router";
|
import { Route, Router } from "../router";
|
||||||
|
|
||||||
export const routeInjectionToken = getInjectionToken<Route>({
|
export const routeInjectionToken = getInjectionToken<Route<any>>({
|
||||||
id: "route-injection-token",
|
id: "route-injection-token",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -4,21 +4,24 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { routeInjectionToken } from "../../../router/router.injectable";
|
import { routeInjectionToken } from "../../../router/router.injectable";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../../router";
|
import type { Route } from "../../../router";
|
||||||
import { helmService } from "../../../helm/helm-service";
|
import { helmService } from "../../../helm/helm-service";
|
||||||
import { apiPrefix } from "../../../../common/vars";
|
import { apiPrefix } from "../../../../common/vars";
|
||||||
|
import type { RawHelmChart } from "../../../../common/k8s-api/endpoints/helm-charts.api";
|
||||||
|
|
||||||
|
interface GetChartResponse {
|
||||||
|
readme: string;
|
||||||
|
versions: RawHelmChart[];
|
||||||
|
}
|
||||||
|
|
||||||
const getChartRouteInjectable = getInjectable({
|
const getChartRouteInjectable = getInjectable({
|
||||||
id: "get-chart-route",
|
id: "get-chart-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<GetChartResponse> => ({
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `${apiPrefix}/v2/charts/{repo}/{chart}`,
|
path: `${apiPrefix}/v2/charts/{repo}/{chart}`,
|
||||||
|
|
||||||
handler: async ({
|
handler: async ({ params, query }) => ({
|
||||||
params,
|
|
||||||
query,
|
|
||||||
}: LensApiRequest): Promise<LensApiResult> => ({
|
|
||||||
response: await helmService.getChart(
|
response: await helmService.getChart(
|
||||||
params.repo,
|
params.repo,
|
||||||
params.chart,
|
params.chart,
|
||||||
|
|||||||
@ -4,21 +4,21 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { routeInjectionToken } from "../../../router/router.injectable";
|
import { routeInjectionToken } from "../../../router/router.injectable";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../../router";
|
import type { Route } from "../../../router";
|
||||||
import { helmService } from "../../../helm/helm-service";
|
import { helmService } from "../../../helm/helm-service";
|
||||||
import { apiPrefix } from "../../../../common/vars";
|
import { apiPrefix } from "../../../../common/vars";
|
||||||
|
|
||||||
const getChartRouteValuesInjectable = getInjectable({
|
const getChartRouteValuesInjectable = getInjectable({
|
||||||
id: "get-chart-route-values",
|
id: "get-chart-route-values",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<string> => ({
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `${apiPrefix}/v2/charts/{repo}/{chart}/values`,
|
path: `${apiPrefix}/v2/charts/{repo}/{chart}/values`,
|
||||||
|
|
||||||
handler: async ({
|
handler: async ({
|
||||||
params,
|
params,
|
||||||
query,
|
query,
|
||||||
}: LensApiRequest): Promise<LensApiResult> => ({
|
}) => ({
|
||||||
response: await helmService.getChartValues(
|
response: await helmService.getChartValues(
|
||||||
params.repo,
|
params.repo,
|
||||||
params.chart,
|
params.chart,
|
||||||
|
|||||||
@ -4,19 +4,18 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { routeInjectionToken } from "../../../router/router.injectable";
|
import { routeInjectionToken } from "../../../router/router.injectable";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../../router";
|
import type { Route } from "../../../router";
|
||||||
import { helmService } from "../../../helm/helm-service";
|
import { helmService } from "../../../helm/helm-service";
|
||||||
import { apiPrefix } from "../../../../common/vars";
|
import { apiPrefix } from "../../../../common/vars";
|
||||||
|
|
||||||
const listChartsRouteInjectable = getInjectable({
|
const listChartsRouteInjectable = getInjectable({
|
||||||
id: "list-charts-route",
|
id: "list-charts-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<any> => ({
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `${apiPrefix}/v2/charts`,
|
path: `${apiPrefix}/v2/charts`,
|
||||||
|
|
||||||
// eslint-disable-next-line unused-imports/no-unused-vars-ts
|
handler: async () => ({
|
||||||
handler: async (request: LensApiRequest): Promise<LensApiResult> => ({
|
|
||||||
response: await helmService.listCharts(),
|
response: await helmService.listCharts(),
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* 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 { apiPrefix } from "../../../../common/vars";
|
import { apiPrefix } from "../../../../common/vars";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../../router";
|
import type { Route } from "../../../router";
|
||||||
import { helmService } from "../../../helm/helm-service";
|
import { helmService } from "../../../helm/helm-service";
|
||||||
import { routeInjectionToken } from "../../../router/router.injectable";
|
import { routeInjectionToken } from "../../../router/router.injectable";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
@ -11,11 +11,11 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
const deleteReleaseRouteInjectable = getInjectable({
|
const deleteReleaseRouteInjectable = getInjectable({
|
||||||
id: "delete-release-route",
|
id: "delete-release-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<string> => ({
|
||||||
method: "delete",
|
method: "delete",
|
||||||
path: `${apiPrefix}/v2/releases/{namespace}/{release}`,
|
path: `${apiPrefix}/v2/releases/{namespace}/{release}`,
|
||||||
|
|
||||||
handler: async (request: LensApiRequest): Promise<LensApiResult> => {
|
handler: async (request) => {
|
||||||
const { cluster, params } = request;
|
const { cluster, params } = request;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* 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 { apiPrefix } from "../../../../common/vars";
|
import { apiPrefix } from "../../../../common/vars";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../../router";
|
import type { Route } from "../../../router";
|
||||||
import { helmService } from "../../../helm/helm-service";
|
import { helmService } from "../../../helm/helm-service";
|
||||||
import { routeInjectionToken } from "../../../router/router.injectable";
|
import { routeInjectionToken } from "../../../router/router.injectable";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
@ -11,11 +11,11 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
const getReleaseRouteHistoryInjectable = getInjectable({
|
const getReleaseRouteHistoryInjectable = getInjectable({
|
||||||
id: "get-release-history-route",
|
id: "get-release-history-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<any> => ({
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `${apiPrefix}/v2/releases/{namespace}/{release}/history`,
|
path: `${apiPrefix}/v2/releases/{namespace}/{release}/history`,
|
||||||
|
|
||||||
handler: async (request: LensApiRequest): Promise<LensApiResult> => {
|
handler: async (request) => {
|
||||||
const { cluster, params } = request;
|
const { cluster, params } = request;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* 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 { apiPrefix } from "../../../../common/vars";
|
import { apiPrefix } from "../../../../common/vars";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../../router";
|
import type { Route } from "../../../router";
|
||||||
import { helmService } from "../../../helm/helm-service";
|
import { helmService } from "../../../helm/helm-service";
|
||||||
import { routeInjectionToken } from "../../../router/router.injectable";
|
import { routeInjectionToken } from "../../../router/router.injectable";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
@ -11,11 +11,11 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
const getReleaseRouteInjectable = getInjectable({
|
const getReleaseRouteInjectable = getInjectable({
|
||||||
id: "get-release-route",
|
id: "get-release-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<any> => ({
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `${apiPrefix}/v2/releases/{namespace}/{release}`,
|
path: `${apiPrefix}/v2/releases/{namespace}/{release}`,
|
||||||
|
|
||||||
handler: async (request: LensApiRequest): Promise<LensApiResult> => {
|
handler: async (request) => {
|
||||||
const { cluster, params } = request;
|
const { cluster, params } = request;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* 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 { apiPrefix } from "../../../../common/vars";
|
import { apiPrefix } from "../../../../common/vars";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../../router";
|
import type { Route } from "../../../router";
|
||||||
import { helmService } from "../../../helm/helm-service";
|
import { helmService } from "../../../helm/helm-service";
|
||||||
import { routeInjectionToken } from "../../../router/router.injectable";
|
import { routeInjectionToken } from "../../../router/router.injectable";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
@ -13,11 +13,11 @@ import { contentTypes } from "../../../router";
|
|||||||
const getReleaseRouteValuesInjectable = getInjectable({
|
const getReleaseRouteValuesInjectable = getInjectable({
|
||||||
id: "get-release-values-route",
|
id: "get-release-values-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<string> => ({
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `${apiPrefix}/v2/releases/{namespace}/{release}/values`,
|
path: `${apiPrefix}/v2/releases/{namespace}/{release}/values`,
|
||||||
|
|
||||||
handler: async (request: LensApiRequest): Promise<LensApiResult> => {
|
handler: async (request) => {
|
||||||
const { cluster, params: { namespace, release }, query } = request;
|
const { cluster, params: { namespace, release }, query } = request;
|
||||||
const all = getBoolean(query, "all");
|
const all = getBoolean(query, "all");
|
||||||
|
|
||||||
|
|||||||
@ -3,19 +3,24 @@
|
|||||||
* 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 { apiPrefix } from "../../../../common/vars";
|
import { apiPrefix } from "../../../../common/vars";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../../router";
|
import type { Route } from "../../../router";
|
||||||
import { helmService } from "../../../helm/helm-service";
|
import { helmService } from "../../../helm/helm-service";
|
||||||
import { routeInjectionToken } from "../../../router/router.injectable";
|
import { routeInjectionToken } from "../../../router/router.injectable";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
|
||||||
|
interface InstallChartResponse {
|
||||||
|
log: string;
|
||||||
|
release: { name: string, namespace: string }
|
||||||
|
}
|
||||||
|
|
||||||
const installChartRouteInjectable = getInjectable({
|
const installChartRouteInjectable = getInjectable({
|
||||||
id: "install-chart-route",
|
id: "install-chart-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: () : Route<InstallChartResponse> => ({
|
||||||
method: "post",
|
method: "post",
|
||||||
path: `${apiPrefix}/v2/releases`,
|
path: `${apiPrefix}/v2/releases`,
|
||||||
|
|
||||||
handler: async (request: LensApiRequest): Promise<LensApiResult> => {
|
handler: async (request) => {
|
||||||
const { payload, cluster } = request;
|
const { payload, cluster } = request;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* 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 { apiPrefix } from "../../../../common/vars";
|
import { apiPrefix } from "../../../../common/vars";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../../router";
|
import type { Route } from "../../../router";
|
||||||
import { helmService } from "../../../helm/helm-service";
|
import { helmService } from "../../../helm/helm-service";
|
||||||
import { routeInjectionToken } from "../../../router/router.injectable";
|
import { routeInjectionToken } from "../../../router/router.injectable";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
@ -11,11 +11,11 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
const listReleasesRouteInjectable = getInjectable({
|
const listReleasesRouteInjectable = getInjectable({
|
||||||
id: "list-releases-route",
|
id: "list-releases-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<Record<string, any>> => ({
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `${apiPrefix}/v2/releases/{namespace?}`,
|
path: `${apiPrefix}/v2/releases/{namespace?}`,
|
||||||
|
|
||||||
handler: async (request: LensApiRequest): Promise<LensApiResult> => {
|
handler: async (request) => {
|
||||||
const { cluster, params } = request;
|
const { cluster, params } = request;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* 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 { apiPrefix } from "../../../../common/vars";
|
import { apiPrefix } from "../../../../common/vars";
|
||||||
import type { LensApiRequest } from "../../../router";
|
import type { Route } from "../../../router";
|
||||||
import { helmService } from "../../../helm/helm-service";
|
import { helmService } from "../../../helm/helm-service";
|
||||||
import { routeInjectionToken } from "../../../router/router.injectable";
|
import { routeInjectionToken } from "../../../router/router.injectable";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
@ -11,18 +11,17 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
const rollbackReleaseRouteInjectable = getInjectable({
|
const rollbackReleaseRouteInjectable = getInjectable({
|
||||||
id: "rollback-release-route",
|
id: "rollback-release-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<void> => ({
|
||||||
method: "put",
|
method: "put",
|
||||||
path: `${apiPrefix}/v2/releases/{namespace}/{release}/rollback`,
|
path: `${apiPrefix}/v2/releases/{namespace}/{release}/rollback`,
|
||||||
|
|
||||||
handler: async (request: LensApiRequest): Promise<void> => {
|
handler: async (request) => {
|
||||||
const { cluster, params, payload } = request;
|
const { cluster, params, payload } = request;
|
||||||
|
|
||||||
await helmService.rollback(cluster, params.release, params.namespace, payload.revision);
|
await helmService.rollback(cluster, params.release, params.namespace, payload.revision);
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
injectionToken: routeInjectionToken,
|
injectionToken: routeInjectionToken,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -3,15 +3,20 @@
|
|||||||
* 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 { apiPrefix } from "../../../../common/vars";
|
import { apiPrefix } from "../../../../common/vars";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../../router";
|
import type { Route } from "../../../router";
|
||||||
import { helmService } from "../../../helm/helm-service";
|
import { helmService } from "../../../helm/helm-service";
|
||||||
import { routeInjectionToken } from "../../../router/router.injectable";
|
import { routeInjectionToken } from "../../../router/router.injectable";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
|
||||||
|
interface UpdateReleaseResponse {
|
||||||
|
log: string;
|
||||||
|
release: { name: string, namespace: string }
|
||||||
|
}
|
||||||
|
|
||||||
const updateReleaseRouteInjectable = getInjectable({
|
const updateReleaseRouteInjectable = getInjectable({
|
||||||
id: "update-release-route",
|
id: "update-release-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<UpdateReleaseResponse> => ({
|
||||||
method: "put",
|
method: "put",
|
||||||
path: `${apiPrefix}/v2/releases/{namespace}/{release}`,
|
path: `${apiPrefix}/v2/releases/{namespace}/{release}`,
|
||||||
|
|
||||||
@ -19,7 +24,7 @@ const updateReleaseRouteInjectable = getInjectable({
|
|||||||
cluster,
|
cluster,
|
||||||
params,
|
params,
|
||||||
payload,
|
payload,
|
||||||
}: LensApiRequest): Promise<LensApiResult> => ({
|
}) => ({
|
||||||
response: await helmService.updateRelease(
|
response: await helmService.updateRelease(
|
||||||
cluster,
|
cluster,
|
||||||
params.release,
|
params.release,
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { apiPrefix } from "../../../common/vars";
|
import { apiPrefix } from "../../../common/vars";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../router";
|
import type { Route } from "../../router";
|
||||||
import { routeInjectionToken } from "../../router/router.injectable";
|
import { routeInjectionToken } from "../../router/router.injectable";
|
||||||
import type { Cluster } from "../../../common/cluster/cluster";
|
import type { Cluster } from "../../../common/cluster/cluster";
|
||||||
import { CoreV1Api, V1Secret } from "@kubernetes/client-node";
|
import { CoreV1Api, V1Secret } from "@kubernetes/client-node";
|
||||||
@ -13,11 +13,11 @@ import { CoreV1Api, V1Secret } from "@kubernetes/client-node";
|
|||||||
const getServiceAccountRouteInjectable = getInjectable({
|
const getServiceAccountRouteInjectable = getInjectable({
|
||||||
id: "get-service-account-route",
|
id: "get-service-account-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<ReturnType<typeof generateKubeConfig>> => ({
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `${apiPrefix}/kubeconfig/service-account/{namespace}/{account}`,
|
path: `${apiPrefix}/kubeconfig/service-account/{namespace}/{account}`,
|
||||||
|
|
||||||
handler: async (request: LensApiRequest): Promise<LensApiResult> => {
|
handler: async (request) => {
|
||||||
const { params, cluster } = request;
|
const { params, cluster } = request;
|
||||||
const client = (await cluster.getProxyKubeconfig()).makeApiClient(CoreV1Api);
|
const client = (await cluster.getProxyKubeconfig()).makeApiClient(CoreV1Api);
|
||||||
const secretList = await client.listNamespacedSecret(params.namespace);
|
const secretList = await client.listNamespacedSecret(params.namespace);
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { apiPrefix } from "../../../common/vars";
|
import { apiPrefix } from "../../../common/vars";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../router";
|
import type { LensApiRequest, Route } from "../../router";
|
||||||
import { routeInjectionToken } from "../../router/router.injectable";
|
import { routeInjectionToken } from "../../router/router.injectable";
|
||||||
import { ClusterMetadataKey, ClusterPrometheusMetadata } from "../../../common/cluster-types";
|
import { ClusterMetadataKey, ClusterPrometheusMetadata } from "../../../common/cluster-types";
|
||||||
import logger from "../../logger";
|
import logger from "../../logger";
|
||||||
@ -42,7 +42,7 @@ async function loadMetrics(promQueries: string[], cluster: Cluster, prometheusPa
|
|||||||
return Promise.all(queries.map(loadMetric));
|
return Promise.all(queries.map(loadMetric));
|
||||||
}
|
}
|
||||||
|
|
||||||
const addMetricsRoute = async ({ cluster, payload, query }: LensApiRequest): Promise<LensApiResult> => {
|
const addMetricsRoute = async ({ cluster, payload, query }: LensApiRequest) => {
|
||||||
const queryParams: IMetricsQuery = Object.fromEntries(query.entries());
|
const queryParams: IMetricsQuery = Object.fromEntries(query.entries());
|
||||||
const prometheusMetadata: ClusterPrometheusMetadata = {};
|
const prometheusMetadata: ClusterPrometheusMetadata = {};
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ const addMetricsRoute = async ({ cluster, payload, query }: LensApiRequest): Pro
|
|||||||
const addMetricsRouteInjectable = getInjectable({
|
const addMetricsRouteInjectable = getInjectable({
|
||||||
id: "add-metrics-route",
|
id: "add-metrics-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<any> => ({
|
||||||
method: "post",
|
method: "post",
|
||||||
path: `${apiPrefix}/metrics`,
|
path: `${apiPrefix}/metrics`,
|
||||||
handler: addMetricsRoute,
|
handler: addMetricsRoute,
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { apiPrefix } from "../../../common/vars";
|
import { apiPrefix } from "../../../common/vars";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../router";
|
import type { Route } from "../../router";
|
||||||
import { routeInjectionToken } from "../../router/router.injectable";
|
import { routeInjectionToken } from "../../router/router.injectable";
|
||||||
import { PrometheusProviderRegistry } from "../../prometheus";
|
import { PrometheusProviderRegistry } from "../../prometheus";
|
||||||
import type { MetricProviderInfo } from "../../../common/k8s-api/endpoints/metrics.api";
|
import type { MetricProviderInfo } from "../../../common/k8s-api/endpoints/metrics.api";
|
||||||
@ -13,12 +13,11 @@ import type { MetricProviderInfo } from "../../../common/k8s-api/endpoints/metri
|
|||||||
const getMetricProvidersRouteInjectable = getInjectable({
|
const getMetricProvidersRouteInjectable = getInjectable({
|
||||||
id: "get-metric-providers-route",
|
id: "get-metric-providers-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<MetricProviderInfo[]> => ({
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `${apiPrefix}/metrics/providers`,
|
path: `${apiPrefix}/metrics/providers`,
|
||||||
|
|
||||||
// eslint-disable-next-line unused-imports/no-unused-vars-ts
|
handler: async () => {
|
||||||
handler: async (request: LensApiRequest) : Promise<LensApiResult> => {
|
|
||||||
const providers: MetricProviderInfo[] = [];
|
const providers: MetricProviderInfo[] = [];
|
||||||
|
|
||||||
for (const { name, id, isConfigurable } of PrometheusProviderRegistry.getInstance().providers.values()) {
|
for (const { name, id, isConfigurable } of PrometheusProviderRegistry.getInstance().providers.values()) {
|
||||||
|
|||||||
@ -4,11 +4,11 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { routeInjectionToken } from "../../router/router.injectable";
|
import { routeInjectionToken } from "../../router/router.injectable";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../router";
|
import type { LensApiRequest, Route } from "../../router";
|
||||||
import { apiPrefix } from "../../../common/vars";
|
import { apiPrefix } from "../../../common/vars";
|
||||||
import { PortForward } from "./functionality/port-forward";
|
import { PortForward } from "./functionality/port-forward";
|
||||||
|
|
||||||
const getCurrentPortForward = async (request: LensApiRequest): Promise<LensApiResult> => {
|
const getCurrentPortForward = async (request: LensApiRequest) => {
|
||||||
const { params, query, cluster } = request;
|
const { params, query, cluster } = request;
|
||||||
const { namespace, resourceType, resourceName } = params;
|
const { namespace, resourceType, resourceName } = params;
|
||||||
const port = Number(query.get("port"));
|
const port = Number(query.get("port"));
|
||||||
@ -25,7 +25,7 @@ const getCurrentPortForward = async (request: LensApiRequest): Promise<LensApiRe
|
|||||||
const getCurrentPortForwardRouteInjectable = getInjectable({
|
const getCurrentPortForwardRouteInjectable = getInjectable({
|
||||||
id: "get-current-port-forward-route",
|
id: "get-current-port-forward-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<{ port: number }> => ({
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`,
|
path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`,
|
||||||
handler: getCurrentPortForward,
|
handler: getCurrentPortForward,
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { routeInjectionToken } from "../../router/router.injectable";
|
import { routeInjectionToken } from "../../router/router.injectable";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../router";
|
import type { LensApiRequest, Route } from "../../router";
|
||||||
import { apiPrefix } from "../../../common/vars";
|
import { apiPrefix } from "../../../common/vars";
|
||||||
import { PortForward, PortForwardArgs } from "./functionality/port-forward";
|
import { PortForward, PortForwardArgs } from "./functionality/port-forward";
|
||||||
import logger from "../../logger";
|
import logger from "../../logger";
|
||||||
@ -14,7 +14,7 @@ interface Dependencies {
|
|||||||
createPortForward: (pathToKubeConfig: string, args: PortForwardArgs) => PortForward;
|
createPortForward: (pathToKubeConfig: string, args: PortForwardArgs) => PortForward;
|
||||||
}
|
}
|
||||||
|
|
||||||
const startPortForward = ({ createPortForward }: Dependencies) => async (request: LensApiRequest): Promise<LensApiResult> => {
|
const startPortForward = ({ createPortForward }: Dependencies) => async (request: LensApiRequest) => {
|
||||||
const { params, query, cluster } = request;
|
const { params, query, cluster } = request;
|
||||||
const { namespace, resourceType, resourceName } = params;
|
const { namespace, resourceType, resourceName } = params;
|
||||||
const port = Number(query.get("port"));
|
const port = Number(query.get("port"));
|
||||||
@ -85,7 +85,7 @@ const startPortForward = ({ createPortForward }: Dependencies) => async (request
|
|||||||
const startPortForwardRouteInjectable = getInjectable({
|
const startPortForwardRouteInjectable = getInjectable({
|
||||||
id: "start-current-port-forward-route",
|
id: "start-current-port-forward-route",
|
||||||
|
|
||||||
instantiate: (di) => ({
|
instantiate: (di): Route<{ port: number }> => ({
|
||||||
method: "post",
|
method: "post",
|
||||||
path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`,
|
path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`,
|
||||||
handler: startPortForward({ createPortForward: di.inject(createPortForwardInjectable) }),
|
handler: startPortForward({ createPortForward: di.inject(createPortForwardInjectable) }),
|
||||||
|
|||||||
@ -4,12 +4,12 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { routeInjectionToken } from "../../router/router.injectable";
|
import { routeInjectionToken } from "../../router/router.injectable";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../router";
|
import type { LensApiRequest, Route } from "../../router";
|
||||||
import { apiPrefix } from "../../../common/vars";
|
import { apiPrefix } from "../../../common/vars";
|
||||||
import { PortForward } from "./functionality/port-forward";
|
import { PortForward } from "./functionality/port-forward";
|
||||||
import logger from "../../logger";
|
import logger from "../../logger";
|
||||||
|
|
||||||
const stopCurrentPortForward = async (request: LensApiRequest): Promise<LensApiResult> => {
|
const stopCurrentPortForward = async (request: LensApiRequest) => {
|
||||||
const { params, query, cluster } = request;
|
const { params, query, cluster } = request;
|
||||||
const { namespace, resourceType, resourceName } = params;
|
const { namespace, resourceType, resourceName } = params;
|
||||||
const port = Number(query.get("port"));
|
const port = Number(query.get("port"));
|
||||||
@ -39,7 +39,7 @@ const stopCurrentPortForward = async (request: LensApiRequest): Promise<LensApiR
|
|||||||
const stopCurrentPortForwardRouteInjectable = getInjectable({
|
const stopCurrentPortForwardRouteInjectable = getInjectable({
|
||||||
id: "stop-current-port-forward-route",
|
id: "stop-current-port-forward-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<{ status: boolean }> => ({
|
||||||
method: "delete",
|
method: "delete",
|
||||||
path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`,
|
path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`,
|
||||||
handler: stopCurrentPortForward,
|
handler: stopCurrentPortForward,
|
||||||
|
|||||||
@ -4,21 +4,18 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { routeInjectionToken } from "../../router/router.injectable";
|
import { routeInjectionToken } from "../../router/router.injectable";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../router";
|
import type { Route } from "../../router";
|
||||||
import { apiPrefix } from "../../../common/vars";
|
import { apiPrefix } from "../../../common/vars";
|
||||||
import { ResourceApplier } from "../../resource-applier";
|
import { ResourceApplier } from "../../resource-applier";
|
||||||
|
|
||||||
const applyResourceRouteInjectable = getInjectable({
|
const applyResourceRouteInjectable = getInjectable({
|
||||||
id: "apply-resource-route",
|
id: "apply-resource-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<string> => ({
|
||||||
method: "post",
|
method: "post",
|
||||||
path: `${apiPrefix}/stack`,
|
path: `${apiPrefix}/stack`,
|
||||||
|
|
||||||
handler: async ({
|
handler: async ({ cluster, payload }) => ({
|
||||||
cluster,
|
|
||||||
payload,
|
|
||||||
}: LensApiRequest): Promise<LensApiResult> => ({
|
|
||||||
response: await new ResourceApplier(cluster).apply(payload),
|
response: await new ResourceApplier(cluster).apply(payload),
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
|
|||||||
@ -4,21 +4,18 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { routeInjectionToken } from "../../router/router.injectable";
|
import { routeInjectionToken } from "../../router/router.injectable";
|
||||||
import type { LensApiRequest, LensApiResult } from "../../router";
|
import type { Route } from "../../router";
|
||||||
import { apiPrefix } from "../../../common/vars";
|
import { apiPrefix } from "../../../common/vars";
|
||||||
import { ResourceApplier } from "../../resource-applier";
|
import { ResourceApplier } from "../../resource-applier";
|
||||||
|
|
||||||
const patchResourceRouteInjectable = getInjectable({
|
const patchResourceRouteInjectable = getInjectable({
|
||||||
id: "patch-resource-route",
|
id: "patch-resource-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<string> => ({
|
||||||
method: "patch",
|
method: "patch",
|
||||||
path: `${apiPrefix}/stack`,
|
path: `${apiPrefix}/stack`,
|
||||||
|
|
||||||
handler: async ({
|
handler: async ({ cluster, payload }) => ({
|
||||||
cluster,
|
|
||||||
payload,
|
|
||||||
}: LensApiRequest): Promise<LensApiResult> => ({
|
|
||||||
response: await new ResourceApplier(cluster).patch(
|
response: await new ResourceApplier(cluster).patch(
|
||||||
payload.name,
|
payload.name,
|
||||||
payload.kind,
|
payload.kind,
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* 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 type { LensApiRequest, LensApiResult, SupportedFileExtension, Route } from "../router";
|
import type { LensApiRequest, SupportedFileExtension, Route } from "../router";
|
||||||
import { contentTypes } from "../router";
|
import { contentTypes } from "../router";
|
||||||
import logger from "../logger";
|
import logger from "../logger";
|
||||||
import { routeInjectionToken } from "../router/router.injectable";
|
import { routeInjectionToken } from "../router/router.injectable";
|
||||||
@ -19,7 +19,7 @@ interface ProductionDependencies {
|
|||||||
|
|
||||||
const handleStaticFileInProduction =
|
const handleStaticFileInProduction =
|
||||||
({ readFile }: ProductionDependencies) =>
|
({ readFile }: ProductionDependencies) =>
|
||||||
async ({ params }: LensApiRequest): Promise<LensApiResult> => {
|
async ({ params }: LensApiRequest) => {
|
||||||
const staticPath = path.resolve(__static);
|
const staticPath = path.resolve(__static);
|
||||||
let filePath = params.path;
|
let filePath = params.path;
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ const handleStaticFileInDevelopment =
|
|||||||
const staticFileRouteInjectable = getInjectable({
|
const staticFileRouteInjectable = getInjectable({
|
||||||
id: "static-file-route",
|
id: "static-file-route",
|
||||||
|
|
||||||
instantiate: (di): Route => {
|
instantiate: (di): Route<Buffer> => {
|
||||||
const isDevelopment = di.inject(isDevelopmentInjectable);
|
const isDevelopment = di.inject(isDevelopmentInjectable);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -3,19 +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 type { LensApiRequest, LensApiResult } from "../../router";
|
import type { Route } from "../../router";
|
||||||
import { routeInjectionToken } from "../../router/router.injectable";
|
import { routeInjectionToken } from "../../router/router.injectable";
|
||||||
import { getAppVersion } from "../../../common/utils";
|
import { getAppVersion } from "../../../common/utils";
|
||||||
|
|
||||||
const getVersionRouteInjectable = getInjectable({
|
const getVersionRouteInjectable = getInjectable({
|
||||||
id: "get-version-route",
|
id: "get-version-route",
|
||||||
|
|
||||||
instantiate: () => ({
|
instantiate: (): Route<{ version: string }> => ({
|
||||||
method: "get",
|
method: "get",
|
||||||
path: `/version`,
|
path: `/version`,
|
||||||
|
|
||||||
// eslint-disable-next-line unused-imports/no-unused-vars-ts
|
handler: async () => {
|
||||||
handler: async (request: LensApiRequest): Promise<LensApiResult> => {
|
|
||||||
return { response: { version: getAppVersion() }};
|
return { response: { version: getAppVersion() }};
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user