Skip to content

Commit

Permalink
[PM-3687] Remove ipcRenderer from native-messaging (bitwarden#6893)
Browse files Browse the repository at this point in the history
  • Loading branch information
dani-garcia authored and BlackDex committed Nov 21, 2023
1 parent f0f5bfb commit 652ac90
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 12 deletions.
21 changes: 19 additions & 2 deletions apps/desktop/src/platform/preload.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
import { ipcRenderer } from "electron";

import { DeviceType, ThemeType, KeySuffixOptions } from "@bitwarden/common/enums";

import { EncryptedMessageResponse, UnencryptedMessageResponse } from "../models/native-messaging";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";

import {
EncryptedMessageResponse,
LegacyMessageWrapper,
Message,
UnencryptedMessageResponse,
} from "../models/native-messaging";
import { BiometricMessage, BiometricAction } from "../types/biometric-message";
import { isDev, isWindowsStore } from "../utils";

Expand Down Expand Up @@ -56,6 +62,17 @@ const nativeMessaging = {
sendReply: (message: EncryptedMessageResponse | UnencryptedMessageResponse) => {
ipcRenderer.send("nativeMessagingReply", message);
},
sendMessage: (message: {
appId: string;
command?: string;
sharedSecret?: string;
message?: EncString;
}) => {
ipcRenderer.send("nativeMessagingReply", message);
},
onMessage: (callback: (message: LegacyMessageWrapper | Message) => void) => {
ipcRenderer.on("nativeMessaging", (_event, message) => callback(message));
},
};

export default {
Expand Down
29 changes: 19 additions & 10 deletions apps/desktop/src/services/native-messaging.service.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Injectable, NgZone } from "@angular/core";
import { ipcRenderer } from "electron";
import { firstValueFrom } from "rxjs";

import { KeySuffixOptions } from "@bitwarden/common/enums";
Expand Down Expand Up @@ -43,9 +42,7 @@ export class NativeMessagingService {
) {}

init() {
ipcRenderer.on("nativeMessaging", async (_event: any, message: any) => {
this.messageHandler(message);
});
ipc.platform.nativeMessaging.onMessage((message) => this.messageHandler(message));
}

private async messageHandler(msg: LegacyMessageWrapper | Message) {
Expand All @@ -65,12 +62,18 @@ export class NativeMessagingService {
const accounts = await firstValueFrom(this.stateService.accounts$);
const userIds = Object.keys(accounts);
if (!userIds.includes(rawMessage.userId)) {
ipcRenderer.send("nativeMessagingReply", { command: "wrongUserId", appId: appId });
ipc.platform.nativeMessaging.sendMessage({
command: "wrongUserId",
appId: appId,
});
return;
}

if (await this.stateService.getEnableBrowserIntegrationFingerprint()) {
ipcRenderer.send("nativeMessagingReply", { command: "verifyFingerprint", appId: appId });
ipc.platform.nativeMessaging.sendMessage({
command: "verifyFingerprint",
appId: appId,
});

const fingerprint = await this.cryptoService.getFingerprint(
await this.stateService.getUserId(),
Expand All @@ -95,7 +98,10 @@ export class NativeMessagingService {
}

if (this.sharedSecrets.get(appId) == null) {
ipcRenderer.send("nativeMessagingReply", { command: "invalidateEncryption", appId: appId });
ipc.platform.nativeMessaging.sendMessage({
command: "invalidateEncryption",
appId: appId,
});
return;
}

Expand All @@ -105,7 +111,10 @@ export class NativeMessagingService {

// Shared secret is invalidated, force re-authentication
if (message == null) {
ipcRenderer.send("nativeMessagingReply", { command: "invalidateEncryption", appId: appId });
ipc.platform.nativeMessaging.sendMessage({
command: "invalidateEncryption",
appId: appId,
});
return;
}

Expand Down Expand Up @@ -174,7 +183,7 @@ export class NativeMessagingService {
this.sharedSecrets.get(appId)
);

ipcRenderer.send("nativeMessagingReply", { appId: appId, message: encrypted });
ipc.platform.nativeMessaging.sendMessage({ appId: appId, message: encrypted });
}

private async secureCommunication(remotePublicKey: Uint8Array, appId: string) {
Expand All @@ -186,7 +195,7 @@ export class NativeMessagingService {
remotePublicKey,
EncryptionAlgorithm
);
ipcRenderer.send("nativeMessagingReply", {
ipc.platform.nativeMessaging.sendMessage({
appId: appId,
command: "setupEncryption",
sharedSecret: Utils.fromBufferToB64(encryptedSecret),
Expand Down

0 comments on commit 652ac90

Please sign in to comment.