mirror of
https://github.com/bitwarden/browser.git
synced 2024-09-24 03:32:51 +02:00
3a298bd989
* Added abstractions for PolicyApiService and PolicyService * Added implementations for PolicyApiService and PolicyService * Updated all references to new PolicyApiService and PolicyService * Deleted old PolicyService abstraction and implementation * Fixed CLI import path for policy.service * Fixed main.background.ts policyApiService dependency for policyService * Ran prettier * Updated policy-api.service with the correct imports * [EC-377] Removed methods from StateService that read policies * [EC-377] Updated policy service getAll method to use observable collection * [EC-377] Added first unit tests for policy service * [EC-377] Added more unit tests for Policy Service * [EC-376] Sorted methods order in PolicyApiService * [EC-376] Removed unused clearCache method from PolicyService * [EC-376] Added upsert method to PolicyService * [EC-376] PolicyApiService putPolicy method now upserts data to PolicyService * [EC-377] Removed tests for deleted clearCache method * [EC-377] Added unit test for PolicyService.upsert * [EC-377] Updated references to state service observables * [EC-377] Removed getAll method from PolicyService and refactored components to use observable collection * [EC-377] Updated components to use concatMap instead of async subscribe * [EC-377] Removed getPolicyForOrganization from policyApiService * [EC-377] Updated policyAppliesToUser to return observable collection * [EC-377] Changed policyService.policyAppliesToUser to return observable * [EC-377] Fixed browser settings.component.ts getting vault timeout * Updated people.component.ts to get ResetPassword policy through a subscription * [EC-377] Changed passwordGenerationService.getOptions to return observable * [EC-377] Fixed CLI generate.command.ts getting enforcePasswordGeneratorPoliciesOnOptions * [EC-377] Fixed eslint errors on rxjs * [EC-377] Reverted changes on passwordGeneration.service and vaultTimeout.service * [EC-377] Removed eslint disable on web/vault/add-edit-component * [EC-377] Changed AccountData.policies to TemporaryDataEncryption * [EC-377] Updated import.component to be reactive to policyAppliesToUser$ * [EC-377] Updated importBlockedByPolicy$ * [EC-377] Fixed missing rename * [EC-377] Updated policyService.masterPasswordPolicyOptions to return observable * [EC-377] Fixed vaultTimeout imports from merge * [EC-377] Reverted call to passwordGenerationService.getOptions * [EC-377] Reverted call to enforcePasswordGeneratorPoliciesOnOptions * [EC-377] Removed unneeded ngOnDestroy * Apply suggestions from code review Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com> * [EC-377] Fixed login.component.ts and register.component.ts * [EC-377] Updated PolicyService to update vaultTimeout * [EC-377] Updated PolicyService dependencies * [EC-377] Renamed policyAppliesToUser to policyAppliesToActiveUser * [EC-377] VaultTimeoutSettings service now gets the vault timeout directly instead of using observables * [EC-377] Fixed unit tests by removing unneeded vaultTimeoutSettingsService * [EC-377] Set getDecryptedPolicies and setDecryptedPolicies as deprecated * [EC-377] Set PolicyService.getAll as deprecated and updated to use prototype.hasOwnProperty * [EC-565] Reverted unintended change to vaultTimeoutSettings that was causing a bug to not display the correct vault timeout * [EC-377] Removed unneeded destroy$ from preferences.component.ts * [EC-377] Fixed policy.service.ts import of OrganizationService Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com> Co-authored-by: mimartin12 <77340197+mimartin12@users.noreply.github.com>
112 lines
3.5 KiB
TypeScript
112 lines
3.5 KiB
TypeScript
import { AuthService } from "@bitwarden/common/abstractions/auth.service";
|
|
import { PasswordGenerationService } from "@bitwarden/common/abstractions/passwordGeneration.service";
|
|
import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service";
|
|
import { VaultTimeoutService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service";
|
|
import { AuthenticationStatus } from "@bitwarden/common/enums/authenticationStatus";
|
|
|
|
import { BrowserApi } from "../browser/browserApi";
|
|
|
|
import MainBackground from "./main.background";
|
|
import LockedVaultPendingNotificationsItem from "./models/lockedVaultPendingNotificationsItem";
|
|
|
|
export default class CommandsBackground {
|
|
private isSafari: boolean;
|
|
private isVivaldi: boolean;
|
|
|
|
constructor(
|
|
private main: MainBackground,
|
|
private passwordGenerationService: PasswordGenerationService,
|
|
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",
|
|
async (msg: any, sender: chrome.runtime.MessageSender, sendResponse: any) => {
|
|
if (msg.command === "unlockCompleted" && msg.data.target === "commands.background") {
|
|
await this.processCommand(
|
|
msg.data.commandToRetry.msg.command,
|
|
msg.data.commandToRetry.sender
|
|
);
|
|
}
|
|
}
|
|
);
|
|
|
|
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, { window: window });
|
|
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: LockedVaultPendingNotificationsItem = {
|
|
commandToRetry: {
|
|
msg: { command: "autofill_login" },
|
|
sender: { tab: tab },
|
|
},
|
|
target: "commands.background",
|
|
};
|
|
await BrowserApi.tabSendMessageData(
|
|
tab,
|
|
"addToLockedVaultPendingNotifications",
|
|
retryMessage
|
|
);
|
|
|
|
BrowserApi.tabSendMessageData(tab, "promptForLogin");
|
|
return;
|
|
}
|
|
|
|
await this.main.collectPageDetailsForContentScript(tab, "autofill_cmd");
|
|
}
|
|
|
|
private async openPopup() {
|
|
// Chrome APIs cannot open popup
|
|
if (!this.isSafari) {
|
|
return;
|
|
}
|
|
|
|
this.main.openPopup();
|
|
}
|
|
}
|