From f79c4f0c65c775a91ca60b836ffc7d940fbd431b Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Fri, 8 Jul 2022 15:40:31 +0200 Subject: [PATCH] Extract API logic from FolderService to FolderApiService (#3011) --- .../browser/src/background/main.background.ts | 12 +++-- .../src/background/notification.background.ts | 2 +- .../src/popup/services/services.module.ts | 14 +++++- .../settings/folder-add-edit.component.ts | 6 ++- .../src/popup/settings/folders.component.ts | 2 +- .../src/popup/vault/add-edit.component.ts | 2 +- .../src/popup/vault/ciphers.component.ts | 2 +- .../src/services/vaultFilter.service.ts | 2 +- apps/cli/src/bw.ts | 11 ++-- apps/cli/src/commands/create.command.ts | 8 +-- apps/cli/src/commands/delete.command.ts | 8 +-- apps/cli/src/commands/edit.command.ts | 8 +-- apps/cli/src/commands/get.command.ts | 2 +- apps/cli/src/commands/list.command.ts | 2 +- apps/cli/src/commands/serve.command.ts | 9 ++-- apps/cli/src/vault.program.ts | 9 ++-- apps/desktop/src/app/app.component.ts | 6 +-- .../src/app/vault/add-edit.component.ts | 2 +- .../app/vault/folder-add-edit.component.ts | 6 ++- apps/web/src/app/app.component.ts | 6 +-- .../vault-filter/vault-filter.service.ts | 2 +- .../import-export/org-import-export.module.ts | 2 +- .../organizations/vault/add-edit.component.ts | 2 +- .../app/settings/change-password.component.ts | 2 +- .../settings/emergency-add-edit.component.ts | 2 +- .../src/app/settings/update-key.component.ts | 2 +- .../import-export/import-export.module.ts | 2 +- apps/web/src/app/vault/add-edit.component.ts | 2 +- apps/web/src/app/vault/bulk-move.component.ts | 2 +- .../app/vault/folder-add-edit.component.ts | 6 ++- .../src/components/add-edit.component.ts | 2 +- .../components/folder-add-edit.component.ts | 8 +-- .../vault-filter/vault-filter.service.ts | 2 +- .../src/services/jslib-services.module.ts | 20 ++++++-- .../spec/services/export.service.spec.ts | 2 +- .../spec/services/import.service.spec.ts | 2 +- libs/common/src/abstractions/api.service.ts | 17 ++++--- .../folder/folder-api.service.abstraction.ts | 8 +++ .../folder.service.abstraction.ts} | 15 +++--- libs/common/src/services/api.service.ts | 25 +--------- libs/common/src/services/export.service.ts | 2 +- .../src/services/folder/folder-api.service.ts | 50 +++++++++++++++++++ .../services/{ => folder}/folder.service.ts | 50 +++++-------------- libs/common/src/services/import.service.ts | 2 +- libs/common/src/services/sync.service.ts | 8 +-- .../src/services/vaultTimeout.service.ts | 2 +- 46 files changed, 212 insertions(+), 146 deletions(-) create mode 100644 libs/common/src/abstractions/folder/folder-api.service.abstraction.ts rename libs/common/src/abstractions/{folder.service.ts => folder/folder.service.abstraction.ts} (62%) create mode 100644 libs/common/src/services/folder/folder-api.service.ts rename libs/common/src/services/{ => folder}/folder.service.ts (75%) diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index 725cb1954b4..908f1211b5b 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -10,7 +10,8 @@ import { EnvironmentService as EnvironmentServiceAbstraction } from "@bitwarden/ import { EventService as EventServiceAbstraction } from "@bitwarden/common/abstractions/event.service"; import { ExportService as ExportServiceAbstraction } from "@bitwarden/common/abstractions/export.service"; import { FileUploadService as FileUploadServiceAbstraction } from "@bitwarden/common/abstractions/fileUpload.service"; -import { FolderService as FolderServiceAbstraction } from "@bitwarden/common/abstractions/folder.service"; +import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; +import { InternalFolderService as InternalFolderServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/abstractions/i18n.service"; import { KeyConnectorService as KeyConnectorServiceAbstraction } from "@bitwarden/common/abstractions/keyConnector.service"; import { LogService as LogServiceAbstraction } from "@bitwarden/common/abstractions/log.service"; @@ -52,7 +53,8 @@ import { EnvironmentService } from "@bitwarden/common/services/environment.servi import { EventService } from "@bitwarden/common/services/event.service"; import { ExportService } from "@bitwarden/common/services/export.service"; import { FileUploadService } from "@bitwarden/common/services/fileUpload.service"; -import { FolderService } from "@bitwarden/common/services/folder.service"; +import { FolderApiService } from "@bitwarden/common/services/folder/folder-api.service"; +import { FolderService } from "@bitwarden/common/services/folder/folder.service"; import { KeyConnectorService } from "@bitwarden/common/services/keyConnector.service"; import { MemoryStorageService } from "@bitwarden/common/services/memoryStorage.service"; import { NotificationsService } from "@bitwarden/common/services/notifications.service"; @@ -118,7 +120,7 @@ export default class MainBackground { environmentService: EnvironmentServiceAbstraction; settingsService: SettingsServiceAbstraction; cipherService: CipherServiceAbstraction; - folderService: FolderServiceAbstraction; + folderService: InternalFolderServiceAbstraction; collectionService: CollectionServiceAbstraction; vaultTimeoutService: VaultTimeoutServiceAbstraction; syncService: SyncServiceAbstraction; @@ -147,6 +149,7 @@ export default class MainBackground { vaultFilterService: VaultFilterService; usernameGenerationService: UsernameGenerationServiceAbstraction; encryptService: EncryptService; + folderApiService: FolderApiServiceAbstraction; onUpdatedRan: boolean; onReplacedRan: boolean; @@ -266,11 +269,11 @@ export default class MainBackground { ); this.folderService = new FolderService( this.cryptoService, - this.apiService, this.i18nService, this.cipherService, this.stateService ); + this.folderApiService = new FolderApiService(this.folderService, this.apiService); this.collectionService = new CollectionService( this.cryptoService, this.i18nService, @@ -368,6 +371,7 @@ export default class MainBackground { this.stateService, this.organizationService, this.providerService, + this.folderApiService, logoutCallback ); this.eventService = new EventService( diff --git a/apps/browser/src/background/notification.background.ts b/apps/browser/src/background/notification.background.ts index b44ce820079..f8db259cb70 100644 --- a/apps/browser/src/background/notification.background.ts +++ b/apps/browser/src/background/notification.background.ts @@ -1,6 +1,6 @@ import { AuthService } from "@bitwarden/common/abstractions/auth.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { PolicyService } from "@bitwarden/common/abstractions/policy.service"; import { AuthenticationStatus } from "@bitwarden/common/enums/authenticationStatus"; import { CipherType } from "@bitwarden/common/enums/cipherType"; diff --git a/apps/browser/src/popup/services/services.module.ts b/apps/browser/src/popup/services/services.module.ts index 0c60df6c2f9..63360194cd0 100644 --- a/apps/browser/src/popup/services/services.module.ts +++ b/apps/browser/src/popup/services/services.module.ts @@ -20,7 +20,8 @@ import { EventService } from "@bitwarden/common/abstractions/event.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { FileUploadService } from "@bitwarden/common/abstractions/fileUpload.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { KeyConnectorService } from "@bitwarden/common/abstractions/keyConnector.service"; import { LogService as LogServiceAbstraction } from "@bitwarden/common/abstractions/log.service"; @@ -148,7 +149,16 @@ function getBgService(service: keyof MainBackground) { useFactory: getBgService("cryptoFunctionService"), deps: [], }, - { provide: FolderService, useFactory: getBgService("folderService"), deps: [] }, + { + provide: FolderService, + useFactory: getBgService("folderService"), + deps: [], + }, + { + provide: FolderApiServiceAbstraction, + useFactory: getBgService("folderApiService"), + deps: [], + }, { provide: CollectionService, useFactory: getBgService("collectionService"), diff --git a/apps/browser/src/popup/settings/folder-add-edit.component.ts b/apps/browser/src/popup/settings/folder-add-edit.component.ts index 6b8a2718e0a..c601292bb81 100644 --- a/apps/browser/src/popup/settings/folder-add-edit.component.ts +++ b/apps/browser/src/popup/settings/folder-add-edit.component.ts @@ -3,7 +3,8 @@ import { ActivatedRoute, Router } from "@angular/router"; import { first } from "rxjs/operators"; import { FolderAddEditComponent as BaseFolderAddEditComponent } from "@bitwarden/angular/components/folder-add-edit.component"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -15,13 +16,14 @@ import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUti export class FolderAddEditComponent extends BaseFolderAddEditComponent { constructor( folderService: FolderService, + folderApiService: FolderApiServiceAbstraction, i18nService: I18nService, platformUtilsService: PlatformUtilsService, private router: Router, private route: ActivatedRoute, logService: LogService ) { - super(folderService, i18nService, platformUtilsService, logService); + super(folderService, folderApiService, i18nService, platformUtilsService, logService); } async ngOnInit() { diff --git a/apps/browser/src/popup/settings/folders.component.ts b/apps/browser/src/popup/settings/folders.component.ts index eb289e8dcff..0e2a6036218 100644 --- a/apps/browser/src/popup/settings/folders.component.ts +++ b/apps/browser/src/popup/settings/folders.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from "@angular/core"; import { Router } from "@angular/router"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { FolderView } from "@bitwarden/common/models/view/folderView"; @Component({ diff --git a/apps/browser/src/popup/vault/add-edit.component.ts b/apps/browser/src/popup/vault/add-edit.component.ts index 237c3d40fae..899b9d6cff3 100644 --- a/apps/browser/src/popup/vault/add-edit.component.ts +++ b/apps/browser/src/popup/vault/add-edit.component.ts @@ -8,7 +8,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; diff --git a/apps/browser/src/popup/vault/ciphers.component.ts b/apps/browser/src/popup/vault/ciphers.component.ts index 8c3675101f6..383633a1c28 100644 --- a/apps/browser/src/popup/vault/ciphers.component.ts +++ b/apps/browser/src/popup/vault/ciphers.component.ts @@ -8,7 +8,7 @@ import { VaultFilter } from "@bitwarden/angular/modules/vault-filter/models/vaul import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { OrganizationService } from "@bitwarden/common/abstractions/organization.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; diff --git a/apps/browser/src/services/vaultFilter.service.ts b/apps/browser/src/services/vaultFilter.service.ts index 117cb901195..15fa3523a38 100644 --- a/apps/browser/src/services/vaultFilter.service.ts +++ b/apps/browser/src/services/vaultFilter.service.ts @@ -2,7 +2,7 @@ import { VaultFilter } from "@bitwarden/angular/modules/vault-filter/models/vaul import { VaultFilterService as BaseVaultFilterService } from "@bitwarden/angular/modules/vault-filter/vault-filter.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { OrganizationService } from "@bitwarden/common/abstractions/organization.service"; import { PolicyService } from "@bitwarden/common/abstractions/policy.service"; import { StateService } from "@bitwarden/common/abstractions/state.service"; diff --git a/apps/cli/src/bw.ts b/apps/cli/src/bw.ts index 217782aac75..82a63bff96a 100644 --- a/apps/cli/src/bw.ts +++ b/apps/cli/src/bw.ts @@ -4,6 +4,7 @@ import * as path from "path"; import * as program from "commander"; import * as jsdom from "jsdom"; +import { InternalFolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { ClientType } from "@bitwarden/common/enums/clientType"; import { KeySuffixOptions } from "@bitwarden/common/enums/keySuffixOptions"; import { LogLevelType } from "@bitwarden/common/enums/logLevelType"; @@ -21,7 +22,8 @@ import { EncryptService } from "@bitwarden/common/services/encrypt.service"; import { EnvironmentService } from "@bitwarden/common/services/environment.service"; import { ExportService } from "@bitwarden/common/services/export.service"; import { FileUploadService } from "@bitwarden/common/services/fileUpload.service"; -import { FolderService } from "@bitwarden/common/services/folder.service"; +import { FolderApiService } from "@bitwarden/common/services/folder/folder-api.service"; +import { FolderService } from "@bitwarden/common/services/folder/folder.service"; import { ImportService } from "@bitwarden/common/services/import.service"; import { KeyConnectorService } from "@bitwarden/common/services/keyConnector.service"; import { MemoryStorageService } from "@bitwarden/common/services/memoryStorage.service"; @@ -73,7 +75,7 @@ export class Main { environmentService: EnvironmentService; settingsService: SettingsService; cipherService: CipherService; - folderService: FolderService; + folderService: InternalFolderService; collectionService: CollectionService; vaultTimeoutService: VaultTimeoutService; syncService: SyncService; @@ -101,6 +103,7 @@ export class Main { organizationService: OrganizationService; providerService: ProviderService; twoFactorService: TwoFactorService; + folderApiService: FolderApiService; constructor() { let p = null; @@ -197,12 +200,13 @@ export class Main { this.folderService = new FolderService( this.cryptoService, - this.apiService, this.i18nService, this.cipherService, this.stateService ); + this.folderApiService = new FolderApiService(this.folderService, this.apiService); + this.collectionService = new CollectionService( this.cryptoService, this.i18nService, @@ -293,6 +297,7 @@ export class Main { this.stateService, this.organizationService, this.providerService, + this.folderApiService, async (expired: boolean) => await this.logout() ); diff --git a/apps/cli/src/commands/create.command.ts b/apps/cli/src/commands/create.command.ts index 3951c9ec78e..ad69efe51e8 100644 --- a/apps/cli/src/commands/create.command.ts +++ b/apps/cli/src/commands/create.command.ts @@ -4,7 +4,8 @@ import * as path from "path"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { StateService } from "@bitwarden/common/abstractions/state.service"; import { Utils } from "@bitwarden/common/misc/utils"; import { CipherExport } from "@bitwarden/common/models/export/cipherExport"; @@ -26,7 +27,8 @@ export class CreateCommand { private folderService: FolderService, private stateService: StateService, private cryptoService: CryptoService, - private apiService: ApiService + private apiService: ApiService, + private folderApiService: FolderApiServiceAbstraction ) {} async run( @@ -148,7 +150,7 @@ export class CreateCommand { private async createFolder(req: FolderExport) { const folder = await this.folderService.encrypt(FolderExport.toView(req)); try { - await this.folderService.saveWithServer(folder); + await this.folderApiService.save(folder); const newFolder = await this.folderService.get(folder.id); const decFolder = await newFolder.decrypt(); const res = new FolderResponse(decFolder); diff --git a/apps/cli/src/commands/delete.command.ts b/apps/cli/src/commands/delete.command.ts index 2a35b46637e..4ad4ac592af 100644 --- a/apps/cli/src/commands/delete.command.ts +++ b/apps/cli/src/commands/delete.command.ts @@ -1,6 +1,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { StateService } from "@bitwarden/common/abstractions/state.service"; import { Utils } from "@bitwarden/common/misc/utils"; import { Response } from "@bitwarden/node/cli/models/response"; @@ -12,7 +13,8 @@ export class DeleteCommand { private cipherService: CipherService, private folderService: FolderService, private stateService: StateService, - private apiService: ApiService + private apiService: ApiService, + private folderApiService: FolderApiServiceAbstraction ) {} async run(object: string, id: string, cmdOptions: Record): Promise { @@ -92,7 +94,7 @@ export class DeleteCommand { } try { - await this.folderService.deleteWithServer(id); + await this.folderApiService.delete(id); return Response.success(); } catch (e) { return Response.error(e); diff --git a/apps/cli/src/commands/edit.command.ts b/apps/cli/src/commands/edit.command.ts index b331b0551bc..9c8f68c8285 100644 --- a/apps/cli/src/commands/edit.command.ts +++ b/apps/cli/src/commands/edit.command.ts @@ -1,7 +1,8 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { Utils } from "@bitwarden/common/misc/utils"; import { CipherExport } from "@bitwarden/common/models/export/cipherExport"; import { CollectionExport } from "@bitwarden/common/models/export/collectionExport"; @@ -21,7 +22,8 @@ export class EditCommand { private cipherService: CipherService, private folderService: FolderService, private cryptoService: CryptoService, - private apiService: ApiService + private apiService: ApiService, + private folderApiService: FolderApiServiceAbstraction ) {} async run( @@ -125,7 +127,7 @@ export class EditCommand { folderView = FolderExport.toView(req, folderView); const encFolder = await this.folderService.encrypt(folderView); try { - await this.folderService.saveWithServer(encFolder); + await this.folderApiService.save(encFolder); const updatedFolder = await this.folderService.get(folder.id); const decFolder = await updatedFolder.decrypt(); const res = new FolderResponse(decFolder); diff --git a/apps/cli/src/commands/get.command.ts b/apps/cli/src/commands/get.command.ts index 8fa9598dc9d..c597745fcb5 100644 --- a/apps/cli/src/commands/get.command.ts +++ b/apps/cli/src/commands/get.command.ts @@ -3,7 +3,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { OrganizationService } from "@bitwarden/common/abstractions/organization.service"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { StateService } from "@bitwarden/common/abstractions/state.service"; diff --git a/apps/cli/src/commands/list.command.ts b/apps/cli/src/commands/list.command.ts index e7dfef3104a..e32bc3f7914 100644 --- a/apps/cli/src/commands/list.command.ts +++ b/apps/cli/src/commands/list.command.ts @@ -1,7 +1,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { OrganizationService } from "@bitwarden/common/abstractions/organization.service"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { Utils } from "@bitwarden/common/misc/utils"; diff --git a/apps/cli/src/commands/serve.command.ts b/apps/cli/src/commands/serve.command.ts index 2ce8b90409e..6900b1f93f1 100644 --- a/apps/cli/src/commands/serve.command.ts +++ b/apps/cli/src/commands/serve.command.ts @@ -79,13 +79,15 @@ export class ServeCommand { this.main.folderService, this.main.stateService, this.main.cryptoService, - this.main.apiService + this.main.apiService, + this.main.folderApiService ); this.editCommand = new EditCommand( this.main.cipherService, this.main.folderService, this.main.cryptoService, - this.main.apiService + this.main.apiService, + this.main.folderApiService ); this.generateCommand = new GenerateCommand( this.main.passwordGenerationService, @@ -102,7 +104,8 @@ export class ServeCommand { this.main.cipherService, this.main.folderService, this.main.stateService, - this.main.apiService + this.main.apiService, + this.main.folderApiService ); this.confirmCommand = new ConfirmCommand(this.main.apiService, this.main.cryptoService); this.restoreCommand = new RestoreCommand(this.main.cipherService); diff --git a/apps/cli/src/vault.program.ts b/apps/cli/src/vault.program.ts index 0237b164d18..616568fe248 100644 --- a/apps/cli/src/vault.program.ts +++ b/apps/cli/src/vault.program.ts @@ -229,7 +229,8 @@ export class VaultProgram extends Program { this.main.folderService, this.main.stateService, this.main.cryptoService, - this.main.apiService + this.main.apiService, + this.main.folderApiService ); const response = await command.run(object, encodedJson, cmd); this.processResponse(response); @@ -272,7 +273,8 @@ export class VaultProgram extends Program { this.main.cipherService, this.main.folderService, this.main.cryptoService, - this.main.apiService + this.main.apiService, + this.main.folderApiService ); const response = await command.run(object, id, encodedJson, cmd); this.processResponse(response); @@ -314,7 +316,8 @@ export class VaultProgram extends Program { this.main.cipherService, this.main.folderService, this.main.stateService, - this.main.apiService + this.main.apiService, + this.main.folderApiService ); const response = await command.run(object, id, cmd); this.processResponse(response); diff --git a/apps/desktop/src/app/app.component.ts b/apps/desktop/src/app/app.component.ts index 9732173b564..36afd026e23 100644 --- a/apps/desktop/src/app/app.component.ts +++ b/apps/desktop/src/app/app.component.ts @@ -20,7 +20,7 @@ import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { InternalFolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { KeyConnectorService } from "@bitwarden/common/abstractions/keyConnector.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; @@ -34,7 +34,6 @@ import { SettingsService } from "@bitwarden/common/abstractions/settings.service import { StateService } from "@bitwarden/common/abstractions/state.service"; import { SyncService } from "@bitwarden/common/abstractions/sync.service"; import { SystemService } from "@bitwarden/common/abstractions/system.service"; -import { TokenService } from "@bitwarden/common/abstractions/token.service"; import { VaultTimeoutService } from "@bitwarden/common/abstractions/vaultTimeout.service"; import { AuthenticationStatus } from "@bitwarden/common/enums/authenticationStatus"; import { CipherType } from "@bitwarden/common/enums/cipherType"; @@ -101,8 +100,7 @@ export class AppComponent implements OnInit { constructor( private broadcasterService: BroadcasterService, - private tokenService: TokenService, - private folderService: FolderService, + private folderService: InternalFolderService, private settingsService: SettingsService, private syncService: SyncService, private passwordGenerationService: PasswordGenerationService, diff --git a/apps/desktop/src/app/vault/add-edit.component.ts b/apps/desktop/src/app/vault/add-edit.component.ts index b37d27b8ecc..0d3842998d2 100644 --- a/apps/desktop/src/app/vault/add-edit.component.ts +++ b/apps/desktop/src/app/vault/add-edit.component.ts @@ -7,7 +7,7 @@ import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.s import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; diff --git a/apps/desktop/src/app/vault/folder-add-edit.component.ts b/apps/desktop/src/app/vault/folder-add-edit.component.ts index 9c7369ac876..a014389577d 100644 --- a/apps/desktop/src/app/vault/folder-add-edit.component.ts +++ b/apps/desktop/src/app/vault/folder-add-edit.component.ts @@ -1,7 +1,8 @@ import { Component } from "@angular/core"; import { FolderAddEditComponent as BaseFolderAddEditComponent } from "@bitwarden/angular/components/folder-add-edit.component"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -13,10 +14,11 @@ import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUti export class FolderAddEditComponent extends BaseFolderAddEditComponent { constructor( folderService: FolderService, + folderApiService: FolderApiServiceAbstraction, i18nService: I18nService, platformUtilsService: PlatformUtilsService, logService: LogService ) { - super(folderService, i18nService, platformUtilsService, logService); + super(folderService, folderApiService, i18nService, platformUtilsService, logService); } } diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts index 4d934820730..16e6236c015 100644 --- a/apps/web/src/app/app.component.ts +++ b/apps/web/src/app/app.component.ts @@ -12,7 +12,7 @@ import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { InternalFolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { KeyConnectorService } from "@bitwarden/common/abstractions/keyConnector.service"; import { NotificationsService } from "@bitwarden/common/abstractions/notifications.service"; @@ -23,7 +23,6 @@ import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { SettingsService } from "@bitwarden/common/abstractions/settings.service"; import { StateService } from "@bitwarden/common/abstractions/state.service"; import { SyncService } from "@bitwarden/common/abstractions/sync.service"; -import { TokenService } from "@bitwarden/common/abstractions/token.service"; import { VaultTimeoutService } from "@bitwarden/common/abstractions/vaultTimeout.service"; import { DisableSendPolicy } from "./organizations/policies/disable-send.component"; @@ -53,8 +52,7 @@ export class AppComponent implements OnDestroy, OnInit { constructor( @Inject(DOCUMENT) private document: Document, private broadcasterService: BroadcasterService, - private tokenService: TokenService, - private folderService: FolderService, + private folderService: InternalFolderService, private settingsService: SettingsService, private syncService: SyncService, private passwordGenerationService: PasswordGenerationService, diff --git a/apps/web/src/app/modules/vault-filter/vault-filter.service.ts b/apps/web/src/app/modules/vault-filter/vault-filter.service.ts index d85ef3df169..6e221b219ac 100644 --- a/apps/web/src/app/modules/vault-filter/vault-filter.service.ts +++ b/apps/web/src/app/modules/vault-filter/vault-filter.service.ts @@ -6,7 +6,7 @@ import { VaultFilterService as BaseVaultFilterService } from "@bitwarden/angular import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { OrganizationService } from "@bitwarden/common/abstractions/organization.service"; import { PolicyService } from "@bitwarden/common/abstractions/policy.service"; diff --git a/apps/web/src/app/organizations/tools/import-export/org-import-export.module.ts b/apps/web/src/app/organizations/tools/import-export/org-import-export.module.ts index b450f12dbd4..4de8023d4b9 100644 --- a/apps/web/src/app/organizations/tools/import-export/org-import-export.module.ts +++ b/apps/web/src/app/organizations/tools/import-export/org-import-export.module.ts @@ -7,7 +7,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { ImportService as ImportServiceAbstraction } from "@bitwarden/common/abstractions/import.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; diff --git a/apps/web/src/app/organizations/vault/add-edit.component.ts b/apps/web/src/app/organizations/vault/add-edit.component.ts index d271a568044..dac29f4e33f 100644 --- a/apps/web/src/app/organizations/vault/add-edit.component.ts +++ b/apps/web/src/app/organizations/vault/add-edit.component.ts @@ -5,7 +5,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; diff --git a/apps/web/src/app/settings/change-password.component.ts b/apps/web/src/app/settings/change-password.component.ts index 9e4fde680be..073314510fa 100644 --- a/apps/web/src/app/settings/change-password.component.ts +++ b/apps/web/src/app/settings/change-password.component.ts @@ -5,7 +5,7 @@ import { ChangePasswordComponent as BaseChangePasswordComponent } from "@bitward import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { KeyConnectorService } from "@bitwarden/common/abstractions/keyConnector.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; diff --git a/apps/web/src/app/settings/emergency-add-edit.component.ts b/apps/web/src/app/settings/emergency-add-edit.component.ts index c0aabd8da36..28b69693431 100644 --- a/apps/web/src/app/settings/emergency-add-edit.component.ts +++ b/apps/web/src/app/settings/emergency-add-edit.component.ts @@ -4,7 +4,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; diff --git a/apps/web/src/app/settings/update-key.component.ts b/apps/web/src/app/settings/update-key.component.ts index 77aaab86aba..d771d57a79e 100644 --- a/apps/web/src/app/settings/update-key.component.ts +++ b/apps/web/src/app/settings/update-key.component.ts @@ -3,7 +3,7 @@ import { Component } from "@angular/core"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; diff --git a/apps/web/src/app/tools/import-export/import-export.module.ts b/apps/web/src/app/tools/import-export/import-export.module.ts index b34f78324a6..917df5cd6fc 100644 --- a/apps/web/src/app/tools/import-export/import-export.module.ts +++ b/apps/web/src/app/tools/import-export/import-export.module.ts @@ -7,7 +7,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { ImportService as ImportServiceAbstraction } from "@bitwarden/common/abstractions/import.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; diff --git a/apps/web/src/app/vault/add-edit.component.ts b/apps/web/src/app/vault/add-edit.component.ts index c5da24f8919..45afad6b583 100644 --- a/apps/web/src/app/vault/add-edit.component.ts +++ b/apps/web/src/app/vault/add-edit.component.ts @@ -5,7 +5,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; diff --git a/apps/web/src/app/vault/bulk-move.component.ts b/apps/web/src/app/vault/bulk-move.component.ts index 3dd906e5834..c4c674a9cce 100644 --- a/apps/web/src/app/vault/bulk-move.component.ts +++ b/apps/web/src/app/vault/bulk-move.component.ts @@ -1,7 +1,7 @@ import { Component, EventEmitter, Input, OnInit, Output } from "@angular/core"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; import { FolderView } from "@bitwarden/common/models/view/folderView"; diff --git a/apps/web/src/app/vault/folder-add-edit.component.ts b/apps/web/src/app/vault/folder-add-edit.component.ts index 9c7369ac876..a014389577d 100644 --- a/apps/web/src/app/vault/folder-add-edit.component.ts +++ b/apps/web/src/app/vault/folder-add-edit.component.ts @@ -1,7 +1,8 @@ import { Component } from "@angular/core"; import { FolderAddEditComponent as BaseFolderAddEditComponent } from "@bitwarden/angular/components/folder-add-edit.component"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -13,10 +14,11 @@ import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUti export class FolderAddEditComponent extends BaseFolderAddEditComponent { constructor( folderService: FolderService, + folderApiService: FolderApiServiceAbstraction, i18nService: I18nService, platformUtilsService: PlatformUtilsService, logService: LogService ) { - super(folderService, i18nService, platformUtilsService, logService); + super(folderService, folderApiService, i18nService, platformUtilsService, logService); } } diff --git a/libs/angular/src/components/add-edit.component.ts b/libs/angular/src/components/add-edit.component.ts index aa6ec4aee14..aeac25aade2 100644 --- a/libs/angular/src/components/add-edit.component.ts +++ b/libs/angular/src/components/add-edit.component.ts @@ -4,7 +4,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; diff --git a/libs/angular/src/components/folder-add-edit.component.ts b/libs/angular/src/components/folder-add-edit.component.ts index 9668f372ecd..2558482c2da 100644 --- a/libs/angular/src/components/folder-add-edit.component.ts +++ b/libs/angular/src/components/folder-add-edit.component.ts @@ -1,6 +1,7 @@ import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -20,6 +21,7 @@ export class FolderAddEditComponent implements OnInit { constructor( protected folderService: FolderService, + protected folderApiService: FolderApiServiceAbstraction, protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService, private logService: LogService @@ -41,7 +43,7 @@ export class FolderAddEditComponent implements OnInit { try { const folder = await this.folderService.encrypt(this.folder); - this.formPromise = this.folderService.saveWithServer(folder); + this.formPromise = this.folderApiService.save(folder); await this.formPromise; this.platformUtilsService.showToast( "success", @@ -70,7 +72,7 @@ export class FolderAddEditComponent implements OnInit { } try { - this.deletePromise = this.folderService.deleteWithServer(this.folder.id); + this.deletePromise = this.folderApiService.delete(this.folder.id); await this.deletePromise; this.platformUtilsService.showToast("success", null, this.i18nService.t("deletedFolder")); this.onDeletedFolder.emit(this.folder); diff --git a/libs/angular/src/modules/vault-filter/vault-filter.service.ts b/libs/angular/src/modules/vault-filter/vault-filter.service.ts index ea5f52ee909..6223433c036 100644 --- a/libs/angular/src/modules/vault-filter/vault-filter.service.ts +++ b/libs/angular/src/modules/vault-filter/vault-filter.service.ts @@ -2,7 +2,7 @@ import { Injectable } from "@angular/core"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { OrganizationService } from "@bitwarden/common/abstractions/organization.service"; import { PolicyService } from "@bitwarden/common/abstractions/policy.service"; import { StateService } from "@bitwarden/common/abstractions/state.service"; diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 245fa58bf95..e90acd075e7 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -16,7 +16,11 @@ import { EnvironmentService as EnvironmentServiceAbstraction } from "@bitwarden/ import { EventService as EventServiceAbstraction } from "@bitwarden/common/abstractions/event.service"; import { ExportService as ExportServiceAbstraction } from "@bitwarden/common/abstractions/export.service"; import { FileUploadService as FileUploadServiceAbstraction } from "@bitwarden/common/abstractions/fileUpload.service"; -import { FolderService as FolderServiceAbstraction } from "@bitwarden/common/abstractions/folder.service"; +import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; +import { + FolderService as FolderServiceAbstraction, + InternalFolderService, +} from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { FormValidationErrorsService as FormValidationErrorsServiceAbstraction } from "@bitwarden/common/abstractions/formValidationErrors.service"; import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/abstractions/i18n.service"; import { KeyConnectorService as KeyConnectorServiceAbstraction } from "@bitwarden/common/abstractions/keyConnector.service"; @@ -58,7 +62,8 @@ import { EnvironmentService } from "@bitwarden/common/services/environment.servi import { EventService } from "@bitwarden/common/services/event.service"; import { ExportService } from "@bitwarden/common/services/export.service"; import { FileUploadService } from "@bitwarden/common/services/fileUpload.service"; -import { FolderService } from "@bitwarden/common/services/folder.service"; +import { FolderApiService } from "@bitwarden/common/services/folder/folder-api.service"; +import { FolderService } from "@bitwarden/common/services/folder/folder.service"; import { FormValidationErrorsService } from "@bitwarden/common/services/formValidationErrors.service"; import { KeyConnectorService } from "@bitwarden/common/services/keyConnector.service"; import { NotificationsService } from "@bitwarden/common/services/notifications.service"; @@ -215,12 +220,20 @@ export const LOG_MAC_FAILURES = new InjectionToken("LOG_MAC_FAILURES"); useClass: FolderService, deps: [ CryptoServiceAbstraction, - ApiServiceAbstraction, I18nServiceAbstraction, CipherServiceAbstraction, StateServiceAbstraction, ], }, + { + provide: InternalFolderService, + useExisting: FolderServiceAbstraction, + }, + { + provide: FolderApiServiceAbstraction, + useClass: FolderApiService, + deps: [FolderServiceAbstraction, ApiServiceAbstraction], + }, { provide: LogService, useFactory: () => new ConsoleLogService(false) }, { provide: CollectionServiceAbstraction, @@ -293,6 +306,7 @@ export const LOG_MAC_FAILURES = new InjectionToken("LOG_MAC_FAILURES"); StateServiceAbstraction, OrganizationServiceAbstraction, ProviderServiceAbstraction, + FolderApiServiceAbstraction, LOGOUT_CALLBACK, ], }, diff --git a/libs/common/spec/services/export.service.spec.ts b/libs/common/spec/services/export.service.spec.ts index 7c0a20c4507..089073cb37a 100644 --- a/libs/common/spec/services/export.service.spec.ts +++ b/libs/common/spec/services/export.service.spec.ts @@ -4,7 +4,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { CryptoFunctionService } from "@bitwarden/common/abstractions/cryptoFunction.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { CipherType } from "@bitwarden/common/enums/cipherType"; import { KdfType } from "@bitwarden/common/enums/kdfType"; import { Utils } from "@bitwarden/common/misc/utils"; diff --git a/libs/common/spec/services/import.service.spec.ts b/libs/common/spec/services/import.service.spec.ts index 5f0789943b5..34646565684 100644 --- a/libs/common/spec/services/import.service.spec.ts +++ b/libs/common/spec/services/import.service.spec.ts @@ -4,7 +4,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; import { BitwardenPasswordProtectedImporter } from "@bitwarden/common/importers/bitwardenPasswordProtectedImporter"; diff --git a/libs/common/src/abstractions/api.service.ts b/libs/common/src/abstractions/api.service.ts index d485328d0d2..8405c533663 100644 --- a/libs/common/src/abstractions/api.service.ts +++ b/libs/common/src/abstractions/api.service.ts @@ -23,7 +23,6 @@ import { EmergencyAccessInviteRequest } from "../models/request/emergencyAccessI import { EmergencyAccessPasswordRequest } from "../models/request/emergencyAccessPasswordRequest"; import { EmergencyAccessUpdateRequest } from "../models/request/emergencyAccessUpdateRequest"; import { EventRequest } from "../models/request/eventRequest"; -import { FolderRequest } from "../models/request/folderRequest"; import { GroupRequest } from "../models/request/groupRequest"; import { IapCheckRequest } from "../models/request/iapCheckRequest"; import { ApiTokenRequest } from "../models/request/identityToken/apiTokenRequest"; @@ -117,7 +116,6 @@ import { EmergencyAccessViewResponse, } from "../models/response/emergencyAccessResponse"; import { EventResponse } from "../models/response/eventResponse"; -import { FolderResponse } from "../models/response/folderResponse"; import { GroupDetailsResponse, GroupResponse } from "../models/response/groupResponse"; import { IdentityCaptchaResponse } from "../models/response/identityCaptchaResponse"; import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; @@ -182,6 +180,16 @@ import { UserKeyResponse } from "../models/response/userKeyResponse"; import { SendAccessView } from "../models/view/sendAccessView"; export abstract class ApiService { + send: ( + method: "GET" | "POST" | "PUT" | "DELETE", + path: string, + body: any, + authed: boolean, + hasResponse: boolean, + apiUrl?: string, + alterHeaders?: (headers: Headers) => void + ) => Promise; + postIdentityToken: ( request: PasswordTokenRequest | SsoTokenRequest | ApiTokenRequest ) => Promise; @@ -228,11 +236,6 @@ export abstract class ApiService { getUserBillingHistory: () => Promise; getUserBillingPayment: () => Promise; - getFolder: (id: string) => Promise; - postFolder: (request: FolderRequest) => Promise; - putFolder: (id: string, request: FolderRequest) => Promise; - deleteFolder: (id: string) => Promise; - getSend: (id: string) => Promise; postSendAccess: ( id: string, diff --git a/libs/common/src/abstractions/folder/folder-api.service.abstraction.ts b/libs/common/src/abstractions/folder/folder-api.service.abstraction.ts new file mode 100644 index 00000000000..97f3b724afe --- /dev/null +++ b/libs/common/src/abstractions/folder/folder-api.service.abstraction.ts @@ -0,0 +1,8 @@ +import { Folder } from "@bitwarden/common/models/domain/folder"; +import { FolderResponse } from "@bitwarden/common/models/response/folderResponse"; + +export class FolderApiServiceAbstraction { + save: (folder: Folder) => Promise; + delete: (id: string) => Promise; + get: (id: string) => Promise; +} diff --git a/libs/common/src/abstractions/folder.service.ts b/libs/common/src/abstractions/folder/folder.service.abstraction.ts similarity index 62% rename from libs/common/src/abstractions/folder.service.ts rename to libs/common/src/abstractions/folder/folder.service.abstraction.ts index f848de90920..e7655bbd815 100644 --- a/libs/common/src/abstractions/folder.service.ts +++ b/libs/common/src/abstractions/folder/folder.service.abstraction.ts @@ -1,8 +1,8 @@ -import { FolderData } from "../models/data/folderData"; -import { Folder } from "../models/domain/folder"; -import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; -import { TreeNode } from "../models/domain/treeNode"; -import { FolderView } from "../models/view/folderView"; +import { FolderData } from "../../models/data/folderData"; +import { Folder } from "../../models/domain/folder"; +import { SymmetricCryptoKey } from "../../models/domain/symmetricCryptoKey"; +import { TreeNode } from "../../models/domain/treeNode"; +import { FolderView } from "../../models/view/folderView"; export abstract class FolderService { clearCache: (userId?: string) => Promise; @@ -12,10 +12,11 @@ export abstract class FolderService { getAllDecrypted: () => Promise; getAllNested: (folders?: FolderView[]) => Promise[]>; getNested: (id: string) => Promise>; - saveWithServer: (folder: Folder) => Promise; +} + +export abstract class InternalFolderService extends FolderService { upsert: (folder: FolderData | FolderData[]) => Promise; replace: (folders: { [id: string]: FolderData }) => Promise; clear: (userId: string) => Promise; delete: (id: string | string[]) => Promise; - deleteWithServer: (id: string) => Promise; } diff --git a/libs/common/src/services/api.service.ts b/libs/common/src/services/api.service.ts index 9f2108663cf..7cf4964caf9 100644 --- a/libs/common/src/services/api.service.ts +++ b/libs/common/src/services/api.service.ts @@ -30,7 +30,6 @@ import { EmergencyAccessInviteRequest } from "../models/request/emergencyAccessI import { EmergencyAccessPasswordRequest } from "../models/request/emergencyAccessPasswordRequest"; import { EmergencyAccessUpdateRequest } from "../models/request/emergencyAccessUpdateRequest"; import { EventRequest } from "../models/request/eventRequest"; -import { FolderRequest } from "../models/request/folderRequest"; import { GroupRequest } from "../models/request/groupRequest"; import { IapCheckRequest } from "../models/request/iapCheckRequest"; import { ApiTokenRequest } from "../models/request/identityToken/apiTokenRequest"; @@ -126,7 +125,6 @@ import { } from "../models/response/emergencyAccessResponse"; import { ErrorResponse } from "../models/response/errorResponse"; import { EventResponse } from "../models/response/eventResponse"; -import { FolderResponse } from "../models/response/folderResponse"; import { GroupDetailsResponse, GroupResponse } from "../models/response/groupResponse"; import { IdentityCaptchaResponse } from "../models/response/identityCaptchaResponse"; import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; @@ -487,27 +485,6 @@ export class ApiService implements ApiServiceAbstraction { return new BillingPaymentResponse(r); } - // Folder APIs - - async getFolder(id: string): Promise { - const r = await this.send("GET", "/folders/" + id, null, true, true); - return new FolderResponse(r); - } - - async postFolder(request: FolderRequest): Promise { - const r = await this.send("POST", "/folders", request, true, true); - return new FolderResponse(r); - } - - async putFolder(id: string, request: FolderRequest): Promise { - const r = await this.send("PUT", "/folders/" + id, request, true, true); - return new FolderResponse(r); - } - - deleteFolder(id: string): Promise { - return this.send("DELETE", "/folders/" + id, null, true, false); - } - // Send APIs async getSend(id: string): Promise { @@ -2566,7 +2543,7 @@ export class ApiService implements ApiServiceAbstraction { await this.tokenService.setToken(response.accessToken); } - private async send( + async send( method: "GET" | "POST" | "PUT" | "DELETE", path: string, body: any, diff --git a/libs/common/src/services/export.service.ts b/libs/common/src/services/export.service.ts index c6f08be6d26..06b4221ba0d 100644 --- a/libs/common/src/services/export.service.ts +++ b/libs/common/src/services/export.service.ts @@ -8,7 +8,7 @@ import { ExportFormat, ExportService as ExportServiceAbstraction, } from "../abstractions/export.service"; -import { FolderService } from "../abstractions/folder.service"; +import { FolderService } from "../abstractions/folder/folder.service.abstraction"; import { CipherType } from "../enums/cipherType"; import { DEFAULT_KDF_ITERATIONS, KdfType } from "../enums/kdfType"; import { Utils } from "../misc/utils"; diff --git a/libs/common/src/services/folder/folder-api.service.ts b/libs/common/src/services/folder/folder-api.service.ts new file mode 100644 index 00000000000..d855c063539 --- /dev/null +++ b/libs/common/src/services/folder/folder-api.service.ts @@ -0,0 +1,50 @@ +import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; +import { InternalFolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; +import { FolderData } from "@bitwarden/common/models/data/folderData"; +import { Folder } from "@bitwarden/common/models/domain/folder"; +import { FolderRequest } from "@bitwarden/common/models/request/folderRequest"; +import { FolderResponse } from "@bitwarden/common/models/response/folderResponse"; + +export class FolderApiService implements FolderApiServiceAbstraction { + constructor(private folderService: InternalFolderService, private apiService: ApiService) {} + + async save(folder: Folder): Promise { + const request = new FolderRequest(folder); + + let response: FolderResponse; + if (folder.id == null) { + response = await this.postFolder(request); + folder.id = response.id; + } else { + response = await this.putFolder(folder.id, request); + } + + const data = new FolderData(response); + await this.folderService.upsert(data); + } + + async delete(id: string): Promise { + await this.deleteFolder(id); + await this.folderService.delete(id); + } + + async get(id: string): Promise { + const r = await this.apiService.send("GET", "/folders/" + id, null, true, true); + return new FolderResponse(r); + } + + private async postFolder(request: FolderRequest): Promise { + const r = await this.apiService.send("POST", "/folders", request, true, true); + return new FolderResponse(r); + } + + async putFolder(id: string, request: FolderRequest): Promise { + const r = await this.apiService.send("PUT", "/folders/" + id, request, true, true); + return new FolderResponse(r); + } + + private deleteFolder(id: string): Promise { + return this.apiService.send("DELETE", "/folders/" + id, null, true, false); + } +} diff --git a/libs/common/src/services/folder.service.ts b/libs/common/src/services/folder/folder.service.ts similarity index 75% rename from libs/common/src/services/folder.service.ts rename to libs/common/src/services/folder/folder.service.ts index f791c07f4d2..77d8cfc0a93 100644 --- a/libs/common/src/services/folder.service.ts +++ b/libs/common/src/services/folder/folder.service.ts @@ -1,26 +1,22 @@ -import { ApiService } from "../abstractions/api.service"; -import { CipherService } from "../abstractions/cipher.service"; -import { CryptoService } from "../abstractions/crypto.service"; -import { FolderService as FolderServiceAbstraction } from "../abstractions/folder.service"; -import { I18nService } from "../abstractions/i18n.service"; -import { StateService } from "../abstractions/state.service"; -import { ServiceUtils } from "../misc/serviceUtils"; -import { Utils } from "../misc/utils"; -import { CipherData } from "../models/data/cipherData"; -import { FolderData } from "../models/data/folderData"; -import { Folder } from "../models/domain/folder"; -import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; -import { TreeNode } from "../models/domain/treeNode"; -import { FolderRequest } from "../models/request/folderRequest"; -import { FolderResponse } from "../models/response/folderResponse"; -import { FolderView } from "../models/view/folderView"; +import { CipherService } from "../../abstractions/cipher.service"; +import { CryptoService } from "../../abstractions/crypto.service"; +import { FolderService as FolderServiceAbstraction } from "../../abstractions/folder/folder.service.abstraction"; +import { I18nService } from "../../abstractions/i18n.service"; +import { StateService } from "../../abstractions/state.service"; +import { ServiceUtils } from "../../misc/serviceUtils"; +import { Utils } from "../../misc/utils"; +import { CipherData } from "../../models/data/cipherData"; +import { FolderData } from "../../models/data/folderData"; +import { Folder } from "../../models/domain/folder"; +import { SymmetricCryptoKey } from "../../models/domain/symmetricCryptoKey"; +import { TreeNode } from "../../models/domain/treeNode"; +import { FolderView } from "../../models/view/folderView"; const NestingDelimiter = "/"; export class FolderService implements FolderServiceAbstraction { constructor( private cryptoService: CryptoService, - private apiService: ApiService, private i18nService: I18nService, private cipherService: CipherService, private stateService: StateService @@ -106,21 +102,6 @@ export class FolderService implements FolderServiceAbstraction { return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode; } - async saveWithServer(folder: Folder): Promise { - const request = new FolderRequest(folder); - - let response: FolderResponse; - if (folder.id == null) { - response = await this.apiService.postFolder(request); - folder.id = response.id; - } else { - response = await this.apiService.putFolder(folder.id, request); - } - - const data = new FolderData(response); - await this.upsert(data); - } - async upsert(folder: FolderData | FolderData[]): Promise { let folders = await this.stateService.getEncryptedFolders(); if (folders == null) { @@ -185,9 +166,4 @@ export class FolderService implements FolderServiceAbstraction { } } } - - async deleteWithServer(id: string): Promise { - await this.apiService.deleteFolder(id); - await this.delete(id); - } } diff --git a/libs/common/src/services/import.service.ts b/libs/common/src/services/import.service.ts index 86226d7d6a7..2b1b7bd5678 100644 --- a/libs/common/src/services/import.service.ts +++ b/libs/common/src/services/import.service.ts @@ -2,7 +2,7 @@ import { ApiService } from "../abstractions/api.service"; import { CipherService } from "../abstractions/cipher.service"; import { CollectionService } from "../abstractions/collection.service"; import { CryptoService } from "../abstractions/crypto.service"; -import { FolderService } from "../abstractions/folder.service"; +import { FolderService } from "../abstractions/folder/folder.service.abstraction"; import { I18nService } from "../abstractions/i18n.service"; import { ImportService as ImportServiceAbstraction } from "../abstractions/import.service"; import { PlatformUtilsService } from "../abstractions/platformUtils.service"; diff --git a/libs/common/src/services/sync.service.ts b/libs/common/src/services/sync.service.ts index c054a211f1c..8a061bcbb17 100644 --- a/libs/common/src/services/sync.service.ts +++ b/libs/common/src/services/sync.service.ts @@ -2,7 +2,8 @@ import { ApiService } from "../abstractions/api.service"; import { CipherService } from "../abstractions/cipher.service"; import { CollectionService } from "../abstractions/collection.service"; import { CryptoService } from "../abstractions/crypto.service"; -import { FolderService } from "../abstractions/folder.service"; +import { FolderApiServiceAbstraction } from "../abstractions/folder/folder-api.service.abstraction"; +import { InternalFolderService } from "../abstractions/folder/folder.service.abstraction"; import { KeyConnectorService } from "../abstractions/keyConnector.service"; import { LogService } from "../abstractions/log.service"; import { MessagingService } from "../abstractions/messaging.service"; @@ -40,7 +41,7 @@ export class SyncService implements SyncServiceAbstraction { constructor( private apiService: ApiService, private settingsService: SettingsService, - private folderService: FolderService, + private folderService: InternalFolderService, private cipherService: CipherService, private cryptoService: CryptoService, private collectionService: CollectionService, @@ -52,6 +53,7 @@ export class SyncService implements SyncServiceAbstraction { private stateService: StateService, private organizationService: OrganizationService, private providerService: ProviderService, + private folderApiService: FolderApiServiceAbstraction, private logoutCallback: (expired: boolean) => Promise ) {} @@ -127,7 +129,7 @@ export class SyncService implements SyncServiceAbstraction { (!isEdit && localFolder == null) || (isEdit && localFolder != null && localFolder.revisionDate < notification.revisionDate) ) { - const remoteFolder = await this.apiService.getFolder(notification.id); + const remoteFolder = await this.folderApiService.get(notification.id); if (remoteFolder != null) { await this.folderService.upsert(new FolderData(remoteFolder)); this.messagingService.send("syncedUpsertedFolder", { folderId: notification.id }); diff --git a/libs/common/src/services/vaultTimeout.service.ts b/libs/common/src/services/vaultTimeout.service.ts index 935c55d8e6b..dcb5db62d24 100644 --- a/libs/common/src/services/vaultTimeout.service.ts +++ b/libs/common/src/services/vaultTimeout.service.ts @@ -2,7 +2,7 @@ import { AuthService } from "../abstractions/auth.service"; import { CipherService } from "../abstractions/cipher.service"; import { CollectionService } from "../abstractions/collection.service"; import { CryptoService } from "../abstractions/crypto.service"; -import { FolderService } from "../abstractions/folder.service"; +import { FolderService } from "../abstractions/folder/folder.service.abstraction"; import { KeyConnectorService } from "../abstractions/keyConnector.service"; import { MessagingService } from "../abstractions/messaging.service"; import { PlatformUtilsService } from "../abstractions/platformUtils.service";