1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-11 05:43:41 +00:00

[PM-23789][PM-237090][PM-23791][PM-23792] - [Web][Desktop][Browser] - Do not import cards if policy is enabled (#15740)

* restrict item types in import

* add comment

* fix spec

* fix dep

* clean up logic
This commit is contained in:
Jordan Aasen
2025-07-23 10:37:40 -07:00
committed by GitHub
parent d45cacc1af
commit fe1c040993
5 changed files with 20 additions and 0 deletions

View File

@@ -1070,6 +1070,7 @@ export default class MainBackground {
this.pinService, this.pinService,
this.accountService, this.accountService,
this.sdkService, this.sdkService,
this.restrictedItemTypesService,
); );
this.individualVaultExportService = new IndividualVaultExportService( this.individualVaultExportService = new IndividualVaultExportService(

View File

@@ -821,6 +821,7 @@ export class ServiceContainer {
this.pinService, this.pinService,
this.accountService, this.accountService,
this.sdkService, this.sdkService,
this.restrictedItemTypesService,
); );
this.individualExportService = new IndividualVaultExportService( this.individualExportService = new IndividualVaultExportService(

View File

@@ -100,6 +100,7 @@ const safeProviders: SafeProvider[] = [
PinServiceAbstraction, PinServiceAbstraction,
AccountService, AccountService,
SdkService, SdkService,
RestrictedItemTypesService,
], ],
}), }),
]; ];

View File

@@ -13,6 +13,7 @@ import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.servi
import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view";
import { RestrictedItemTypesService } from "@bitwarden/common/vault/services/restricted-item-types.service";
import { KeyService } from "@bitwarden/key-management"; import { KeyService } from "@bitwarden/key-management";
import { BitwardenPasswordProtectedImporter } from "../importers/bitwarden/bitwarden-password-protected-importer"; import { BitwardenPasswordProtectedImporter } from "../importers/bitwarden/bitwarden-password-protected-importer";
@@ -34,6 +35,7 @@ describe("ImportService", () => {
let pinService: MockProxy<PinServiceAbstraction>; let pinService: MockProxy<PinServiceAbstraction>;
let accountService: MockProxy<AccountService>; let accountService: MockProxy<AccountService>;
let sdkService: MockSdkService; let sdkService: MockSdkService;
let restrictedItemTypesService: MockProxy<RestrictedItemTypesService>;
beforeEach(() => { beforeEach(() => {
cipherService = mock<CipherService>(); cipherService = mock<CipherService>();
@@ -45,6 +47,7 @@ describe("ImportService", () => {
encryptService = mock<EncryptService>(); encryptService = mock<EncryptService>();
pinService = mock<PinServiceAbstraction>(); pinService = mock<PinServiceAbstraction>();
sdkService = new MockSdkService(); sdkService = new MockSdkService();
restrictedItemTypesService = mock<RestrictedItemTypesService>();
importService = new ImportService( importService = new ImportService(
cipherService, cipherService,
@@ -57,6 +60,7 @@ describe("ImportService", () => {
pinService, pinService,
accountService, accountService,
sdkService, sdkService,
restrictedItemTypesService,
); );
}); });

View File

@@ -26,6 +26,7 @@ import { CipherRequest } from "@bitwarden/common/vault/models/request/cipher.req
import { FolderWithIdRequest } from "@bitwarden/common/vault/models/request/folder-with-id.request"; import { FolderWithIdRequest } from "@bitwarden/common/vault/models/request/folder-with-id.request";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view";
import { RestrictedItemTypesService } from "@bitwarden/common/vault/services/restricted-item-types.service";
import { KeyService } from "@bitwarden/key-management"; import { KeyService } from "@bitwarden/key-management";
import { import {
@@ -119,6 +120,7 @@ export class ImportService implements ImportServiceAbstraction {
private pinService: PinServiceAbstraction, private pinService: PinServiceAbstraction,
private accountService: AccountService, private accountService: AccountService,
private sdkService: SdkService, private sdkService: SdkService,
private restrictedItemTypesService: RestrictedItemTypesService,
) {} ) {}
getImportOptions(): ImportOption[] { getImportOptions(): ImportOption[] {
@@ -166,6 +168,17 @@ export class ImportService implements ImportServiceAbstraction {
} }
} }
const restrictedItemTypes = await firstValueFrom(
this.restrictedItemTypesService.restricted$.pipe(
map((restrictedItemTypes) => restrictedItemTypes.map((r) => r.cipherType)),
),
);
// Filter out restricted item types from the import result
importResult.ciphers = importResult.ciphers.filter(
(cipher) => !restrictedItemTypes.includes(cipher.type),
);
if (organizationId && !selectedImportTarget && !canAccessImportExport) { if (organizationId && !selectedImportTarget && !canAccessImportExport) {
const hasUnassignedCollections = const hasUnassignedCollections =
importResult.collectionRelationships.length < importResult.ciphers.length; importResult.collectionRelationships.length < importResult.ciphers.length;