From b7fe3deaa16ca40d4d2437f89841ab3bbca91681 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Thu, 13 Oct 2022 14:13:05 +0300 Subject: [PATCH] Introduce competition for proxy preference tab Co-authored-by: Mikko Aspiala Signed-off-by: Janne Savolainen --- ...certificates-preference-item.injectable.ts | 23 +++++++++ .../allow-untrusted-certificates.tsx | 44 +++++++++++++++++ ...tp-proxy-url-preference-item.injectable.ts | 23 +++++++++ .../proxy/http-proxy-url/http-proxy-url.tsx | 48 +++++++++++++++++++ .../proxy/proxy-preference-page.injectable.ts | 23 +++++++++ .../proxy/proxy-preference-page.tsx | 11 +++++ .../proxy/proxy-preference-tab.injectable.ts | 24 ++++++++++ 7 files changed, 196 insertions(+) create mode 100644 src/features/preferences/renderer/preference-items/proxy/allow-untrusted-certificates/allow-untrusted-certificates-preference-item.injectable.ts create mode 100644 src/features/preferences/renderer/preference-items/proxy/allow-untrusted-certificates/allow-untrusted-certificates.tsx create mode 100644 src/features/preferences/renderer/preference-items/proxy/http-proxy-url/http-proxy-url-preference-item.injectable.ts create mode 100644 src/features/preferences/renderer/preference-items/proxy/http-proxy-url/http-proxy-url.tsx create mode 100644 src/features/preferences/renderer/preference-items/proxy/proxy-preference-page.injectable.ts create mode 100644 src/features/preferences/renderer/preference-items/proxy/proxy-preference-page.tsx create mode 100644 src/features/preferences/renderer/preference-items/proxy/proxy-preference-tab.injectable.ts diff --git a/src/features/preferences/renderer/preference-items/proxy/allow-untrusted-certificates/allow-untrusted-certificates-preference-item.injectable.ts b/src/features/preferences/renderer/preference-items/proxy/allow-untrusted-certificates/allow-untrusted-certificates-preference-item.injectable.ts new file mode 100644 index 0000000000..a145bc240d --- /dev/null +++ b/src/features/preferences/renderer/preference-items/proxy/allow-untrusted-certificates/allow-untrusted-certificates-preference-item.injectable.ts @@ -0,0 +1,23 @@ +/** + * 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 { preferenceItemInjectionToken } from "../../preference-item-injection-token"; +import { AllowUntrustedCertificates } from "./allow-untrusted-certificates"; + +const allowUntrustedCertificatesPreferenceItemInjectable = getInjectable({ + id: "allow-untrusted-certificates-preference-item", + + instantiate: () => ({ + kind: "item" as const, + id: "allow-untrusted-certificates", + parentId: "proxy-page", + orderNumber: 20, + Component: AllowUntrustedCertificates, + }), + + injectionToken: preferenceItemInjectionToken, +}); + +export default allowUntrustedCertificatesPreferenceItemInjectable; diff --git a/src/features/preferences/renderer/preference-items/proxy/allow-untrusted-certificates/allow-untrusted-certificates.tsx b/src/features/preferences/renderer/preference-items/proxy/allow-untrusted-certificates/allow-untrusted-certificates.tsx new file mode 100644 index 0000000000..ce5ff14bf1 --- /dev/null +++ b/src/features/preferences/renderer/preference-items/proxy/allow-untrusted-certificates/allow-untrusted-certificates.tsx @@ -0,0 +1,44 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import React from "react"; +import { SubTitle } from "../../../../../../renderer/components/layout/sub-title"; +import { withInjectables } from "@ogre-tools/injectable-react"; +import type { UserStore } from "../../../../../../common/user-store"; +import userStoreInjectable from "../../../../../../common/user-store/user-store.injectable"; +import { observer } from "mobx-react"; +import { Switch } from "../../../../../../renderer/components/switch"; + +interface Dependencies { + userStore: UserStore; +} + +const NonInjectedAllowUntrustedCertificates = observer(({ userStore }: Dependencies) => ( +
+ + + (userStore.allowUntrustedCAs = !userStore.allowUntrustedCAs) + } + > + Allow untrusted Certificate Authorities + + + This will make Lens to trust ANY certificate authority without any + validations. Needed with some corporate proxies that do certificate + re-writing. Does not affect cluster communications! + +
+)); + +export const AllowUntrustedCertificates = withInjectables( + NonInjectedAllowUntrustedCertificates, + + { + getProps: (di) => ({ + userStore: di.inject(userStoreInjectable), + }), + }, +); diff --git a/src/features/preferences/renderer/preference-items/proxy/http-proxy-url/http-proxy-url-preference-item.injectable.ts b/src/features/preferences/renderer/preference-items/proxy/http-proxy-url/http-proxy-url-preference-item.injectable.ts new file mode 100644 index 0000000000..bb43ceb470 --- /dev/null +++ b/src/features/preferences/renderer/preference-items/proxy/http-proxy-url/http-proxy-url-preference-item.injectable.ts @@ -0,0 +1,23 @@ +/** + * 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 { preferenceItemInjectionToken } from "../../preference-item-injection-token"; +import { HttpProxyUrl } from "./http-proxy-url"; + +const httpProxyUrlPreferenceItemInjectable = getInjectable({ + id: "http-proxy-url-preference-item", + + instantiate: () => ({ + kind: "item" as const, + id: "http-proxy-url", + parentId: "proxy-page", + orderNumber: 10, + Component: HttpProxyUrl, + }), + + injectionToken: preferenceItemInjectionToken, +}); + +export default httpProxyUrlPreferenceItemInjectable; diff --git a/src/features/preferences/renderer/preference-items/proxy/http-proxy-url/http-proxy-url.tsx b/src/features/preferences/renderer/preference-items/proxy/http-proxy-url/http-proxy-url.tsx new file mode 100644 index 0000000000..9b82a6ee35 --- /dev/null +++ b/src/features/preferences/renderer/preference-items/proxy/http-proxy-url/http-proxy-url.tsx @@ -0,0 +1,48 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import React from "react"; +import { SubTitle } from "../../../../../../renderer/components/layout/sub-title"; +import { withInjectables } from "@ogre-tools/injectable-react"; +import type { UserStore } from "../../../../../../common/user-store"; +import userStoreInjectable from "../../../../../../common/user-store/user-store.injectable"; +import { observer } from "mobx-react"; +import { Input } from "../../../../../../renderer/components/input"; + +interface Dependencies { + userStore: UserStore; +} + +const NonInjectedHttpProxyUrl = observer( + ({ userStore }: Dependencies) => { + const [proxy, setProxy] = React.useState(userStore.httpsProxy || ""); + + return ( +
+

Proxy

+ + setProxy(v)} + onBlur={() => (userStore.httpsProxy = proxy)} + /> + + Proxy is used only for non-cluster communication. + +
+ ); + }, +); + +export const HttpProxyUrl = withInjectables( + NonInjectedHttpProxyUrl, + + { + getProps: (di) => ({ + userStore: di.inject(userStoreInjectable), + }), + }, +); diff --git a/src/features/preferences/renderer/preference-items/proxy/proxy-preference-page.injectable.ts b/src/features/preferences/renderer/preference-items/proxy/proxy-preference-page.injectable.ts new file mode 100644 index 0000000000..1fbfd460a2 --- /dev/null +++ b/src/features/preferences/renderer/preference-items/proxy/proxy-preference-page.injectable.ts @@ -0,0 +1,23 @@ +/** + * 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 { preferenceItemInjectionToken } from "../preference-item-injection-token"; +import { ProxyPreferencePage } from "./proxy-preference-page"; + +const proxyPreferencePageInjectable = getInjectable({ + id: "proxy-preference-page", + + instantiate: () => ({ + kind: "page" as const, + id: "proxy-page", + parentId: "proxy-tab", + orderNumber: 0, + Component: ProxyPreferencePage, + }), + + injectionToken: preferenceItemInjectionToken, +}); + +export default proxyPreferencePageInjectable; diff --git a/src/features/preferences/renderer/preference-items/proxy/proxy-preference-page.tsx b/src/features/preferences/renderer/preference-items/proxy/proxy-preference-page.tsx new file mode 100644 index 0000000000..702f92f4d7 --- /dev/null +++ b/src/features/preferences/renderer/preference-items/proxy/proxy-preference-page.tsx @@ -0,0 +1,11 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import React from "react"; + +export const ProxyPreferencePage = () => ( +
+

Proxy

+
+); diff --git a/src/features/preferences/renderer/preference-items/proxy/proxy-preference-tab.injectable.ts b/src/features/preferences/renderer/preference-items/proxy/proxy-preference-tab.injectable.ts new file mode 100644 index 0000000000..6a68608e9c --- /dev/null +++ b/src/features/preferences/renderer/preference-items/proxy/proxy-preference-tab.injectable.ts @@ -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 { preferenceItemInjectionToken } from "../preference-item-injection-token"; + +const proxyPreferenceTabInjectable = getInjectable({ + id: "proxy-preference-tab", + + instantiate: () => ({ + kind: "tab" as const, + id: "proxy-tab", + parentId: "preference-tabs" as const, + pathId: "proxy", + testId: "proxy-preferences-page", + label: "Proxy", + orderNumber: 20, + }), + + injectionToken: preferenceItemInjectionToken, +}); + +export default proxyPreferenceTabInjectable;