From 8e03b273ae1365c3824f9916985d3296161c6d37 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 4 Jul 2024 11:58:32 -0600 Subject: [PATCH] Add Electron IPC APIs for authenticated media --- src/@types/global.d.ts | 4 +++- src/vector/platform/ElectronPlatform.tsx | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index bb8fcae60..dd8bd3747 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -33,7 +33,9 @@ type ElectronChannel = | "update-downloaded" | "userDownloadCompleted" | "userDownloadAction" - | "openDesktopCapturerSourcePicker"; + | "openDesktopCapturerSourcePicker" + | "userAccessToken" + | "serverSupportedVersions"; declare global { interface Window { diff --git a/src/vector/platform/ElectronPlatform.tsx b/src/vector/platform/ElectronPlatform.tsx index 0ec3cf4e8..1e41db9e7 100644 --- a/src/vector/platform/ElectronPlatform.tsx +++ b/src/vector/platform/ElectronPlatform.tsx @@ -44,6 +44,7 @@ import { UPDATE_EVENT } from "matrix-react-sdk/src/stores/AsyncStore"; import { avatarUrlForRoom, getInitialLetter } from "matrix-react-sdk/src/Avatar"; import DesktopCapturerSourcePicker from "matrix-react-sdk/src/components/views/elements/DesktopCapturerSourcePicker"; import { OidcRegistrationClientMetadata } from "matrix-js-sdk/src/matrix"; +import { MatrixClientPeg } from "matrix-react-sdk/src/MatrixClientPeg"; import VectorBasePlatform from "./VectorBasePlatform"; import { SeshatIndexManager } from "./SeshatIndexManager"; @@ -127,6 +128,19 @@ export default class ElectronPlatform extends VectorBasePlatform { }); }); + // `userAccessToken` (IPC) is requested by the main process when appending authentication + // to media downloads. A reply is sent over the same channel. + window.electron.on("userAccessToken", () => { + window.electron!.send("userAccessToken", MatrixClientPeg.get()?.getAccessToken()); + }); + + // `serverSupportedVersions` is requested by the main process when it needs to know if the + // server supports a particular version. This is primarily used to detect authenticated media + // support. A reply is sent over the same channel. + window.electron.on("serverSupportedVersions", async () => { + window.electron!.send("serverSupportedVersions", await MatrixClientPeg.get()?.getVersions()); + }); + // try to flush the rageshake logs to indexeddb before quit. window.electron.on("before-quit", function () { logger.log("element-desktop closing");