mirror of
https://github.com/bitwarden/browser.git
synced 2024-11-13 10:24:20 +01:00
51f482dde9
* [PM-5880] Refactor Browser Platform Utils Service to Remove Window Service * [PM-5880] Implementing BrowserClipboardService to handle clipboard logic between the BrowserPlatformUtils and offscreen document * [PM-5880] Adjusting how readText is handled within BrowserClipboardService * [PM-5880] Adjusting how readText is handled within BrowserClipboardService * [PM-5880] Working through implementation of chrome offscreen API usage * [PM-5880] Implementing jest tests for the methods added to the BrowserApi class * [PM-5880] Implementing jest tests for the OffscreenDocument class * [PM-5880] Working through jest tests for BrowserClipboardService * [PM-5880] Adding typing information to the clipboard methods present within the BrowserPlatformUtilsService * [PM-5880] Working on adding ServiceWorkerGlobalScope typing information * [PM-5880] Updating window references when calling BrowserPlatformUtils methods * [PM-5880] Finishing out jest tests for the BrowserClipboardService * [PM-5880] Finishing out jest tests for the BrowserClipboardService * [PM-5880] Implementing jest tests to validate the changes within BrowserApi * [PM-5880] Implementing jest tests to ensure coverage within OffscreenDocument * [PM-5880] Implementing jest tests for the BrowserPlatformUtilsService * [PM-5880] Removing unused catch statements * [PM-5880] Implementing jest tests for the BrowserPlatformUtilsService * [PM-5880] Implementing jest tests for the BrowserPlatformUtilsService * [PM-5880] Fixing broken tests
110 lines
3.5 KiB
TypeScript
110 lines
3.5 KiB
TypeScript
import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service";
|
|
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
|
|
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
|
|
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
|
import { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password";
|
|
|
|
import { openUnlockPopout } from "../auth/popup/utils/auth-popout-window";
|
|
import { LockedVaultPendingNotificationsData } from "../autofill/background/abstractions/notification.background";
|
|
import { BrowserApi } from "../platform/browser/browser-api";
|
|
|
|
import MainBackground from "./main.background";
|
|
|
|
export default class CommandsBackground {
|
|
private isSafari: boolean;
|
|
private isVivaldi: boolean;
|
|
|
|
constructor(
|
|
private main: MainBackground,
|
|
private passwordGenerationService: PasswordGenerationServiceAbstraction,
|
|
private platformUtilsService: PlatformUtilsService,
|
|
private vaultTimeoutService: VaultTimeoutService,
|
|
private authService: AuthService,
|
|
) {
|
|
this.isSafari = this.platformUtilsService.isSafari();
|
|
this.isVivaldi = this.platformUtilsService.isVivaldi();
|
|
}
|
|
|
|
async init() {
|
|
BrowserApi.messageListener("commands.background", (msg: any) => {
|
|
if (msg.command === "unlockCompleted" && msg.data.target === "commands.background") {
|
|
this.processCommand(
|
|
msg.data.commandToRetry.message.command,
|
|
msg.data.commandToRetry.sender,
|
|
).catch((error) => this.main.logService.error(error));
|
|
}
|
|
});
|
|
|
|
if (chrome && chrome.commands) {
|
|
chrome.commands.onCommand.addListener(async (command: string) => {
|
|
await this.processCommand(command);
|
|
});
|
|
}
|
|
}
|
|
|
|
private async processCommand(command: string, sender?: chrome.runtime.MessageSender) {
|
|
switch (command) {
|
|
case "generate_password":
|
|
await this.generatePasswordToClipboard();
|
|
break;
|
|
case "autofill_login":
|
|
await this.autoFillLogin(sender ? sender.tab : null);
|
|
break;
|
|
case "open_popup":
|
|
await this.openPopup();
|
|
break;
|
|
case "lock_vault":
|
|
await this.vaultTimeoutService.lock();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
private async generatePasswordToClipboard() {
|
|
const options = (await this.passwordGenerationService.getOptions())?.[0] ?? {};
|
|
const password = await this.passwordGenerationService.generatePassword(options);
|
|
this.platformUtilsService.copyToClipboard(password);
|
|
await this.passwordGenerationService.addHistory(password);
|
|
}
|
|
|
|
private async autoFillLogin(tab?: chrome.tabs.Tab) {
|
|
if (!tab) {
|
|
tab = await BrowserApi.getTabFromCurrentWindowId();
|
|
}
|
|
|
|
if (tab == null) {
|
|
return;
|
|
}
|
|
|
|
if ((await this.authService.getAuthStatus()) < AuthenticationStatus.Unlocked) {
|
|
const retryMessage: LockedVaultPendingNotificationsData = {
|
|
commandToRetry: {
|
|
message: { command: "autofill_login" },
|
|
sender: { tab: tab },
|
|
},
|
|
target: "commands.background",
|
|
};
|
|
await BrowserApi.tabSendMessageData(
|
|
tab,
|
|
"addToLockedVaultPendingNotifications",
|
|
retryMessage,
|
|
);
|
|
|
|
await openUnlockPopout(tab);
|
|
return;
|
|
}
|
|
|
|
await this.main.collectPageDetailsForContentScript(tab, "autofill_cmd");
|
|
}
|
|
|
|
private async openPopup() {
|
|
// Chrome APIs cannot open popup
|
|
if (!this.isSafari) {
|
|
return;
|
|
}
|
|
|
|
await this.main.openPopup();
|
|
}
|
|
}
|