mirror of
https://github.com/bitwarden/browser
synced 2025-12-15 07:43:35 +00:00
* move vault timeout and vault timeout settings to km * move browser vault timeout service to km * fix cli import * fix imports * fix some relative imports * use relative imports within common * fix imports * fix new imports * Fix new imports * fix spec imports
50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
import { combineLatest, firstValueFrom, map } from "rxjs";
|
|
|
|
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
|
|
import { VaultTimeoutService } from "@bitwarden/common/key-management/vault-timeout";
|
|
import { UserId } from "@bitwarden/common/types/guid";
|
|
|
|
export abstract class LockService {
|
|
/**
|
|
* Locks all accounts.
|
|
*/
|
|
abstract lockAll(): Promise<void>;
|
|
}
|
|
|
|
export class DefaultLockService implements LockService {
|
|
constructor(
|
|
private readonly accountService: AccountService,
|
|
private readonly vaultTimeoutService: VaultTimeoutService,
|
|
) {}
|
|
|
|
async lockAll() {
|
|
const accounts = await firstValueFrom(
|
|
combineLatest([this.accountService.activeAccount$, this.accountService.accounts$]).pipe(
|
|
map(([activeAccount, accounts]) => {
|
|
const otherAccounts = Object.keys(accounts) as UserId[];
|
|
|
|
if (activeAccount == null) {
|
|
return { activeAccount: null, otherAccounts: otherAccounts };
|
|
}
|
|
|
|
return {
|
|
activeAccount: activeAccount.id,
|
|
otherAccounts: otherAccounts.filter((accountId) => accountId !== activeAccount.id),
|
|
};
|
|
}),
|
|
),
|
|
);
|
|
|
|
for (const otherAccount of accounts.otherAccounts) {
|
|
await this.vaultTimeoutService.lock(otherAccount);
|
|
}
|
|
|
|
// Do the active account last in case we ever try to route the user on lock
|
|
// that way this whole operation will be complete before that routing
|
|
// could take place.
|
|
if (accounts.activeAccount != null) {
|
|
await this.vaultTimeoutService.lock(accounts.activeAccount);
|
|
}
|
|
}
|
|
}
|