Lens proxy with TLS (#6851)

* lens proxy tls support

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* integration test fix

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* don't override getRequestOptions if they are set

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* fix electronAppInjectable override

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* use runnables on renderer

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* move certificate generation to runnables

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* simplify

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
Jari Kolehmainen authored and GitHub committed 2023-01-04 19:18:02 +02:00
1 parent fba93b889e
commit 7052dc0dba
35 files changed
+353 -66

No files matched your search

@@ -0,0 +1,24 @@
/**
* 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 { beforeFrameStartsFirstInjectionToken } from "../tokens";
import lensProxyCertificateInjectable from "../../../common/certificate/lens-proxy-certificate.injectable";
import requestLensProxyCertificateInjectable from "../../certificate/request-lens-proxy-certificate.injectable";
const setupLensProxyCertificateInjectable = getInjectable({
id: "setup-lens-proxy-certificate",
instantiate: (di) => ({
id: "setup-lens-proxy-certificate",
run: async () => {
const requestLensProxyCertificate = di.inject(requestLensProxyCertificateInjectable);
const lensProxyCertificate = di.inject(lensProxyCertificateInjectable);
lensProxyCertificate.set(await requestLensProxyCertificate());
},
}),
injectionToken: beforeFrameStartsFirstInjectionToken,
});
export default setupLensProxyCertificateInjectable;
@@ -0,0 +1,18 @@
/**
* 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 { lensProxyCertificateChannel } from "../../common/certificate/lens-proxy-certificate-channel";
import requestFromChannelInjectable from "../utils/channel/request-from-channel.injectable";
const requestLensProxyCertificateInjectable = getInjectable({
id: "request-lens-proxy-certificate",
instantiate: (di) => {
const requestFromChannel = di.inject(requestFromChannelInjectable);
return () => requestFromChannel(lensProxyCertificateChannel);
},
});
export default requestLensProxyCertificateInjectable;
@@ -88,8 +88,8 @@ describe("<NamespaceSelectFilter />", () => {
describe("once the subscribe resolves", () => {
beforeEach(async () => {
await fetchMock.resolveSpecific([
"http://127.0.0.1:12345/api-kube/api/v1/namespaces",
], createMockResponseFromString("http://127.0.0.1:12345/api-kube/api/v1/namespaces", JSON.stringify({
"https://127.0.0.1:12345/api-kube/api/v1/namespaces",
], createMockResponseFromString("https://127.0.0.1:12345/api-kube/api/v1/namespaces", JSON.stringify({
apiVersion: "v1",
kind: "NamespaceList",
metadata: {},
@@ -11,7 +11,7 @@ const apiBaseServerAddressInjectable = getInjectable({
instantiate: (di) => {
const { port } = di.inject(windowLocationInjectable);
return `http://127.0.0.1:${port}`;
return `https://127.0.0.1:${port}`;
},
injectionToken: apiBaseServerAddressInjectionToken,
});
+4 -2
View File
@@ -11,18 +11,20 @@ import createKubeJsonApiInjectable from "../../common/k8s-api/create-kube-json-a
import isDevelopmentInjectable from "../../common/vars/is-development.injectable";
import showErrorNotificationInjectable from "../components/notifications/show-error-notification.injectable";
import windowLocationInjectable from "../../common/k8s-api/window-location.injectable";
import { apiBaseServerAddressInjectionToken } from "../../common/k8s-api/api-base-configs";
const apiKubeInjectable = getInjectable({
id: "api-kube",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "apiKube is only available in certain environments");
const createKubeJsonApi = di.inject(createKubeJsonApiInjectable);
const apiBaseServerAddress = di.inject(apiBaseServerAddressInjectionToken);
const isDevelopment = di.inject(isDevelopmentInjectable);
const showErrorNotification = di.inject(showErrorNotificationInjectable);
const { port, host } = di.inject(windowLocationInjectable);
const { host } = di.inject(windowLocationInjectable);
const apiKube = createKubeJsonApi({
serverAddress: `http://127.0.0.1:${port}`,
serverAddress: apiBaseServerAddress,
apiBase: apiKubePrefix,
debug: isDevelopment,
}, {