mirror of
https://github.com/bitwarden/browser
synced 2025-12-19 09:43:23 +00:00
[SG-520] Native messaging handler (#3566)
* [SG-523] Base test runner app for native messages (#3269) * Base test runner app for native messages * Remove default test script * Add case for canceled status * Modify to allow usage of libs crypto services and functions * Small adjustments * Handshake request (#3277) * Handshake request * Fix capitalization * Update info text * lock node-ipc to 9.2.1 * [SG-569] Native Messaging settings bug (#3285) * Fix bug where updating setting wasn't starting the native messaging listener * Update test runner error message * [SG-532] Implement Status command in Native Messaging Service (#3310) * Status command start * Refactor ipc test service and add status command * fixed linter errors * Move types into a model file * Cleanup and comments * Fix auth status condition * Remove .vscode settings file. Fix this in a separate work item * Add active field to status response * Extract native messaging types into their own files * Remove experimental decorators * Turn off no console lint rule for the test runner * Casing fix * Models import casing fixes * Remove in progress file (merge error) * Move models to their own folder and add index.ts * Remove file that got un-deleted * Remove file that will be added in separate command * Fix imports that got borked * [SG-533] Implement bw-credential-retrieval (#3334) * Status command start * Refactor ipc test service and add status command * fixed linter errors * Move types into a model file * Cleanup and comments * Fix auth status condition * Remove .vscode settings file. Fix this in a separate work item * Implement bw-credential-retrieval * Add active field to status response * Extract native messaging types into their own files * Remove experimental decorators * Turn off no console lint rule for the test runner * Casing fix * Models import casing fixes * Add error handling for passing a bad public key to handshake * [SG-534] and [SG-535] Implement Credential Create and Update commands (#3342) * Status command start * Refactor ipc test service and add status command * fixed linter errors * Move types into a model file * Cleanup and comments * Fix auth status condition * Remove .vscode settings file. Fix this in a separate work item * Implement bw-credential-retrieval * Add active field to status response * Add bw-credential-create * Better response handling in test runner * Extract native messaging types into their own files * Remove experimental decorators * Turn off no console lint rule for the test runner * Casing fix * Models import casing fixes * bw-cipher-create move type into its own file * Use LogUtils for all logging * Implement bw-credential-update * Give naming conventions for types * Rename file correctly * Update handleEncyptedMessage with EncString changes * [SG-626] Fix Desktop app not showing updated credentials from native messages (#3380) * Add MessagingService to send messages on login create and update * Add `not-active-user` error to create and update and other refactors * [SG-536] Implement bw-generate-password (#3370) * implement bw-generate-password * Fix merge conflict resolution errors * Update apps/desktop/native-messaging-test-runner/src/bw-generate-password.ts Co-authored-by: Addison Beck <addisonbeck1@gmail.com> * Logging improvements * Add NativeMessagingVersion enum * Add version check in NativeMessagingHandler Co-authored-by: Addison Beck <addisonbeck1@gmail.com> * Refactor account status checks and check for locked state in generate command (#3461) * Add feawture flag to show/hide ddg setting (#3506) * [SG-649] Add confirmation dialog and tweak shared key retrieval (#3451) * Add confirmation dialog when completing handshake * Copy updates for dialog * HandshakeResponse type fixes * Add longer timeout for handshake command * [SG-663] RefactorNativeMessagingHandlerService and strengthen typing (#3551) * NativeMessageHandlerService refactor and additional types * Return empty array if no uri to retrieve command * Move commands from test runner into a separate folder * Fix bug where confirmation dialog messes with styling * Enable DDG feature * Fix generated password not saving to history * Take credentialId as parameter to update * Add applicationName to handshake payload * Add warning text to confirmation modal Co-authored-by: Addison Beck <addisonbeck1@gmail.com>
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
import { EncryptedCommand } from "./encryptedCommand";
|
||||
|
||||
export type DecryptedCommandData = {
|
||||
command: EncryptedCommand;
|
||||
payload?: any;
|
||||
};
|
||||
@@ -0,0 +1,6 @@
|
||||
export type EncryptedCommand =
|
||||
| "bw-status"
|
||||
| "bw-credential-retrieval"
|
||||
| "bw-credential-create"
|
||||
| "bw-credential-update"
|
||||
| "bw-generate-password";
|
||||
@@ -0,0 +1,8 @@
|
||||
import { EncString } from "@bitwarden/common/models/domain/encString";
|
||||
|
||||
import { MessageCommon } from "./messageCommon";
|
||||
|
||||
export type EncryptedMessage = MessageCommon & {
|
||||
// Will decrypt to a DecryptedCommandData object
|
||||
encryptedCommand: EncString;
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
export type CredentialCreatePayload = {
|
||||
userId: string;
|
||||
userName: string;
|
||||
password: string;
|
||||
name: string;
|
||||
uri: string;
|
||||
};
|
||||
@@ -0,0 +1,4 @@
|
||||
export type CredentialRetrievePayload = {
|
||||
userId: string;
|
||||
uri: string;
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
export type CredentialUpdatePayload = {
|
||||
userId: string;
|
||||
userName: string;
|
||||
password: string;
|
||||
name: string;
|
||||
uri: string;
|
||||
credentialId: string;
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
export type PasswordGeneratePayload = {
|
||||
userId: string;
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
import { EncString } from "@bitwarden/common/models/domain/encString";
|
||||
|
||||
import { MessageCommon } from "./messageCommon";
|
||||
|
||||
export type EncryptedMessageResponse = MessageCommon & {
|
||||
encryptedPayload: EncString;
|
||||
};
|
||||
@@ -0,0 +1,6 @@
|
||||
export type AccountStatusResponse = {
|
||||
id: string;
|
||||
email: string;
|
||||
status: "locked" | "unlocked";
|
||||
active: boolean;
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
export type CannotDecryptErrorResponse = {
|
||||
error: "cannot-decrypt";
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
export type CipherResponse = {
|
||||
userId: string;
|
||||
credentialId: string;
|
||||
userName: string;
|
||||
password: string;
|
||||
name: string;
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
import { AccountStatusResponse } from "./accountStatusResponse";
|
||||
import { CannotDecryptErrorResponse } from "./cannotDecryptErrorResponse";
|
||||
import { CipherResponse } from "./cipherResponse";
|
||||
import { FailureStatusResponse } from "./failureStatusResponse";
|
||||
import { GenerateResponse } from "./generateResponse";
|
||||
import { SuccessStatusResponse } from "./successStatusResponse";
|
||||
import { UserStatusErrorResponse } from "./userStatusErrorResponse";
|
||||
|
||||
export type EncyptedMessageResponse =
|
||||
| AccountStatusResponse[]
|
||||
| CannotDecryptErrorResponse
|
||||
| CipherResponse[]
|
||||
| FailureStatusResponse
|
||||
| GenerateResponse
|
||||
| SuccessStatusResponse
|
||||
| UserStatusErrorResponse;
|
||||
@@ -0,0 +1,3 @@
|
||||
export type FailureStatusResponse = {
|
||||
status: "failure";
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
export type GenerateResponse = {
|
||||
password: string;
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
export type SuccessStatusResponse = {
|
||||
status: "success";
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
export type UserStatusErrorResponse = {
|
||||
error: "locked" | "not-active-user";
|
||||
};
|
||||
25
apps/desktop/src/models/nativeMessaging/index.ts
Normal file
25
apps/desktop/src/models/nativeMessaging/index.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
export * from "./encryptedMessagePayloads/credentialCreatePayload";
|
||||
export * from "./encryptedMessagePayloads/credentialRetrievePayload";
|
||||
export * from "./encryptedMessagePayloads/credentialUpdatePayload";
|
||||
export * from "./encryptedMessagePayloads/passwordGeneratePayload";
|
||||
|
||||
export * from "./encryptedMessageResponses/accountStatusResponse";
|
||||
export * from "./encryptedMessageResponses/cannotDecryptErrorResponse";
|
||||
export * from "./encryptedMessageResponses/cipherResponse";
|
||||
export * from "./encryptedMessageResponses/encryptedMessageResponse";
|
||||
export * from "./encryptedMessageResponses/failureStatusResponse";
|
||||
export * from "./encryptedMessageResponses/generateResponse";
|
||||
export * from "./encryptedMessageResponses/successStatusResponse";
|
||||
export * from "./encryptedMessageResponses/userStatusErrorResponse";
|
||||
|
||||
export * from "./decryptedCommandData";
|
||||
export * from "./encryptedCommand";
|
||||
export * from "./encryptedMessage";
|
||||
export * from "./encryptedMessageResponse";
|
||||
export * from "./legacyMessage";
|
||||
export * from "./legacyMessageWrapper";
|
||||
export * from "./message";
|
||||
export * from "./messageCommon";
|
||||
export * from "./unencryptedCommand";
|
||||
export * from "./unencryptedMessage";
|
||||
export * from "./unencryptedMessageResponse";
|
||||
8
apps/desktop/src/models/nativeMessaging/legacyMessage.ts
Normal file
8
apps/desktop/src/models/nativeMessaging/legacyMessage.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
export type LegacyMessage = {
|
||||
command: string;
|
||||
|
||||
userId?: string;
|
||||
timestamp?: number;
|
||||
|
||||
publicKey?: string;
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
import { EncString } from "@bitwarden/common/models/domain/encString";
|
||||
|
||||
import { LegacyMessage } from "./legacyMessage";
|
||||
|
||||
export type LegacyMessageWrapper = {
|
||||
message: LegacyMessage | EncString;
|
||||
appId: string;
|
||||
};
|
||||
4
apps/desktop/src/models/nativeMessaging/message.ts
Normal file
4
apps/desktop/src/models/nativeMessaging/message.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import { EncryptedMessage } from "./encryptedMessage";
|
||||
import { UnencryptedMessage } from "./unencryptedMessage";
|
||||
|
||||
export type Message = UnencryptedMessage | EncryptedMessage;
|
||||
4
apps/desktop/src/models/nativeMessaging/messageCommon.ts
Normal file
4
apps/desktop/src/models/nativeMessaging/messageCommon.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export interface MessageCommon {
|
||||
version: number;
|
||||
messageId: string;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export type UnencryptedCommand = "bw-handshake";
|
||||
@@ -0,0 +1,10 @@
|
||||
import { MessageCommon } from "./messageCommon";
|
||||
import { UnencryptedCommand } from "./unencryptedCommand";
|
||||
|
||||
export type UnencryptedMessage = MessageCommon & {
|
||||
command: UnencryptedCommand;
|
||||
payload: {
|
||||
publicKey: string;
|
||||
applicationName: string;
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
import { MessageCommon } from "./messageCommon";
|
||||
|
||||
export type UnencryptedMessageResponse = MessageCommon &
|
||||
(
|
||||
| {
|
||||
payload: {
|
||||
status: "success";
|
||||
sharedKey: string;
|
||||
};
|
||||
}
|
||||
| {
|
||||
payload: {
|
||||
error: "canceled" | "locked" | "cannot-decrypt" | "version-discrepancy";
|
||||
};
|
||||
}
|
||||
);
|
||||
Reference in New Issue
Block a user