diff --git a/jslib/angular/src/services/jslib-services.module.ts b/jslib/angular/src/services/jslib-services.module.ts index ededcee0..d62c9ded 100644 --- a/jslib/angular/src/services/jslib-services.module.ts +++ b/jslib/angular/src/services/jslib-services.module.ts @@ -4,7 +4,6 @@ import { ApiService as ApiServiceAbstraction } from "@/jslib/common/src/abstract import { AppIdService as AppIdServiceAbstraction } from "@/jslib/common/src/abstractions/appId.service"; import { AuthService as AuthServiceAbstraction } from "@/jslib/common/src/abstractions/auth.service"; import { BroadcasterService as BroadcasterServiceAbstraction } from "@/jslib/common/src/abstractions/broadcaster.service"; -import { CollectionService as CollectionServiceAbstraction } from "@/jslib/common/src/abstractions/collection.service"; import { CryptoService as CryptoServiceAbstraction } from "@/jslib/common/src/abstractions/crypto.service"; import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "@/jslib/common/src/abstractions/cryptoFunction.service"; import { EnvironmentService as EnvironmentServiceAbstraction } from "@/jslib/common/src/abstractions/environment.service"; @@ -37,7 +36,6 @@ import { GlobalState } from "@/jslib/common/src/models/domain/globalState"; import { ApiService } from "@/jslib/common/src/services/api.service"; import { AppIdService } from "@/jslib/common/src/services/appId.service"; import { AuthService } from "@/jslib/common/src/services/auth.service"; -import { CollectionService } from "@/jslib/common/src/services/collection.service"; import { ConsoleLogService } from "@/jslib/common/src/services/consoleLog.service"; import { CryptoService } from "@/jslib/common/src/services/crypto.service"; import { EnvironmentService } from "@/jslib/common/src/services/environment.service"; @@ -105,11 +103,6 @@ import { ValidationService } from "./validation.service"; ], }, { provide: LogService, useFactory: () => new ConsoleLogService(false) }, - { - provide: CollectionServiceAbstraction, - useClass: CollectionService, - deps: [CryptoServiceAbstraction, I18nServiceAbstraction, StateServiceAbstraction], - }, { provide: EnvironmentServiceAbstraction, useClass: EnvironmentService, @@ -166,7 +159,6 @@ import { ValidationService } from "./validation.service"; apiService: ApiServiceAbstraction, settingsService: SettingsServiceAbstraction, cryptoService: CryptoServiceAbstraction, - collectionService: CollectionServiceAbstraction, messagingService: MessagingServiceAbstraction, policyService: PolicyServiceAbstraction, logService: LogService, @@ -179,7 +171,6 @@ import { ValidationService } from "./validation.service"; apiService, settingsService, cryptoService, - collectionService, messagingService, policyService, logService, @@ -193,7 +184,6 @@ import { ValidationService } from "./validation.service"; ApiServiceAbstraction, SettingsServiceAbstraction, CryptoServiceAbstraction, - CollectionServiceAbstraction, MessagingServiceAbstraction, PolicyServiceAbstraction, LogService, @@ -212,7 +202,6 @@ import { ValidationService } from "./validation.service"; { provide: VaultTimeoutServiceAbstraction, useFactory: ( - collectionService: CollectionServiceAbstraction, cryptoService: CryptoServiceAbstraction, platformUtilsService: PlatformUtilsServiceAbstraction, messagingService: MessagingServiceAbstraction, @@ -223,7 +212,6 @@ import { ValidationService } from "./validation.service"; stateService: StateServiceAbstraction, ) => new VaultTimeoutService( - collectionService, cryptoService, platformUtilsService, messagingService, @@ -237,7 +225,6 @@ import { ValidationService } from "./validation.service"; messagingService.send("logout", { expired: false, userId: userId }), ), deps: [ - CollectionServiceAbstraction, CryptoServiceAbstraction, PlatformUtilsServiceAbstraction, MessagingServiceAbstraction, diff --git a/jslib/common/src/abstractions/collection.service.ts b/jslib/common/src/abstractions/collection.service.ts deleted file mode 100644 index 0673e906..00000000 --- a/jslib/common/src/abstractions/collection.service.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { CollectionData } from "../models/data/collectionData"; -import { Collection } from "../models/domain/collection"; -import { TreeNode } from "../models/domain/treeNode"; -import { CollectionView } from "../models/view/collectionView"; - -export abstract class CollectionService { - clearCache: (userId?: string) => Promise; - encrypt: (model: CollectionView) => Promise; - decryptMany: (collections: Collection[]) => Promise; - get: (id: string) => Promise; - getAll: () => Promise; - getAllDecrypted: () => Promise; - getAllNested: (collections?: CollectionView[]) => Promise[]>; - getNested: (id: string) => Promise>; - upsert: (collection: CollectionData | CollectionData[]) => Promise; - replace: (collections: { [id: string]: CollectionData }) => Promise; - clear: (userId: string) => Promise; - delete: (id: string | string[]) => Promise; -} diff --git a/jslib/common/src/services/collection.service.ts b/jslib/common/src/services/collection.service.ts deleted file mode 100644 index be8ceb3d..00000000 --- a/jslib/common/src/services/collection.service.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { CollectionService as CollectionServiceAbstraction } from "../abstractions/collection.service"; -import { CryptoService } from "../abstractions/crypto.service"; -import { I18nService } from "../abstractions/i18n.service"; -import { StateService } from "../abstractions/state.service"; -import { ServiceUtils } from "../misc/serviceUtils"; -import { Utils } from "../misc/utils"; -import { CollectionData } from "../models/data/collectionData"; -import { Collection } from "../models/domain/collection"; -import { TreeNode } from "../models/domain/treeNode"; -import { CollectionView } from "../models/view/collectionView"; - -const NestingDelimiter = "/"; - -export class CollectionService implements CollectionServiceAbstraction { - constructor( - private cryptoService: CryptoService, - private i18nService: I18nService, - private stateService: StateService, - ) {} - - async clearCache(userId?: string): Promise { - await this.stateService.setDecryptedCollections(null, { userId: userId }); - } - - async encrypt(model: CollectionView): Promise { - if (model.organizationId == null) { - throw new Error("Collection has no organization id."); - } - const key = await this.cryptoService.getOrgKey(model.organizationId); - if (key == null) { - throw new Error("No key for this collection's organization."); - } - const collection = new Collection(); - collection.id = model.id; - collection.organizationId = model.organizationId; - collection.readOnly = model.readOnly; - collection.name = await this.cryptoService.encrypt(model.name, key); - return collection; - } - - async decryptMany(collections: Collection[]): Promise { - if (collections == null) { - return []; - } - const decCollections: CollectionView[] = []; - const promises: Promise[] = []; - collections.forEach((collection) => { - promises.push(collection.decrypt().then((c) => decCollections.push(c))); - }); - await Promise.all(promises); - return decCollections.sort(Utils.getSortFunction(this.i18nService, "name")); - } - - async get(id: string): Promise { - const collections = await this.stateService.getEncryptedCollections(); - // eslint-disable-next-line - if (collections == null || !collections.hasOwnProperty(id)) { - return null; - } - - return new Collection(collections[id]); - } - - async getAll(): Promise { - const collections = await this.stateService.getEncryptedCollections(); - const response: Collection[] = []; - for (const id in collections) { - // eslint-disable-next-line - if (collections.hasOwnProperty(id)) { - response.push(new Collection(collections[id])); - } - } - return response; - } - - async getAllDecrypted(): Promise { - let decryptedCollections = await this.stateService.getDecryptedCollections(); - if (decryptedCollections != null) { - return decryptedCollections; - } - - const hasKey = await this.cryptoService.hasKey(); - if (!hasKey) { - throw new Error("No key."); - } - - const collections = await this.getAll(); - decryptedCollections = await this.decryptMany(collections); - await this.stateService.setDecryptedCollections(decryptedCollections); - return decryptedCollections; - } - - async getAllNested(collections: CollectionView[] = null): Promise[]> { - if (collections == null) { - collections = await this.getAllDecrypted(); - } - const nodes: TreeNode[] = []; - collections.forEach((c) => { - const collectionCopy = new CollectionView(); - collectionCopy.id = c.id; - collectionCopy.organizationId = c.organizationId; - const parts = c.name != null ? c.name.replace(/^\/+|\/+$/g, "").split(NestingDelimiter) : []; - ServiceUtils.nestedTraverse(nodes, 0, parts, collectionCopy, null, NestingDelimiter); - }); - return nodes; - } - - async getNested(id: string): Promise> { - const collections = await this.getAllNested(); - return ServiceUtils.getTreeNodeObject(collections, id) as TreeNode; - } - - async upsert(collection: CollectionData | CollectionData[]): Promise { - let collections = await this.stateService.getEncryptedCollections(); - if (collections == null) { - collections = {}; - } - - if (collection instanceof CollectionData) { - const c = collection as CollectionData; - collections[c.id] = c; - } else { - (collection as CollectionData[]).forEach((c) => { - collections[c.id] = c; - }); - } - - await this.replace(collections); - } - - async replace(collections: { [id: string]: CollectionData }): Promise { - await this.clearCache(); - await this.stateService.setEncryptedCollections(collections); - } - - async clear(userId?: string): Promise { - await this.clearCache(userId); - await this.stateService.setEncryptedCollections(null, { userId: userId }); - } - - async delete(id: string | string[]): Promise { - const collections = await this.stateService.getEncryptedCollections(); - if (collections == null) { - return; - } - - if (typeof id === "string") { - delete collections[id]; - } else { - (id as string[]).forEach((i) => { - delete collections[i]; - }); - } - - await this.replace(collections); - } -} diff --git a/jslib/common/src/services/sync.service.ts b/jslib/common/src/services/sync.service.ts index 9f043110..7fdb6e23 100644 --- a/jslib/common/src/services/sync.service.ts +++ b/jslib/common/src/services/sync.service.ts @@ -1,5 +1,4 @@ import { ApiService } from "../abstractions/api.service"; -import { CollectionService } from "../abstractions/collection.service"; import { CryptoService } from "../abstractions/crypto.service"; import { KeyConnectorService } from "../abstractions/keyConnector.service"; import { LogService } from "../abstractions/log.service"; @@ -11,11 +10,9 @@ import { SettingsService } from "../abstractions/settings.service"; import { StateService } from "../abstractions/state.service"; import { SyncService as SyncServiceAbstraction } from "../abstractions/sync.service"; import { sequentialize } from "../misc/sequentialize"; -import { CollectionData } from "../models/data/collectionData"; import { OrganizationData } from "../models/data/organizationData"; import { PolicyData } from "../models/data/policyData"; import { ProviderData } from "../models/data/providerData"; -import { CollectionDetailsResponse } from "../models/response/collectionResponse"; import { DomainsResponse } from "../models/response/domainsResponse"; import { PolicyResponse } from "../models/response/policyResponse"; import { ProfileResponse } from "../models/response/profileResponse"; @@ -27,7 +24,6 @@ export class SyncService implements SyncServiceAbstraction { private apiService: ApiService, private settingsService: SettingsService, private cryptoService: CryptoService, - private collectionService: CollectionService, private messagingService: MessagingService, private policyService: PolicyService, private logService: LogService, @@ -83,7 +79,6 @@ export class SyncService implements SyncServiceAbstraction { const response = await this.apiService.getSync(); await this.syncProfile(response.profile); - await this.syncCollections(response.collections); await this.syncSettings(response.domains); await this.syncPolicies(response.policies); @@ -175,14 +170,6 @@ export class SyncService implements SyncServiceAbstraction { } } - private async syncCollections(response: CollectionDetailsResponse[]) { - const collections: { [id: string]: CollectionData } = {}; - response.forEach((c) => { - collections[c.id] = new CollectionData(c); - }); - return await this.collectionService.replace(collections); - } - private async syncSettings(response: DomainsResponse) { let eqDomains: string[][] = []; if (response != null && response.equivalentDomains != null) { diff --git a/jslib/common/src/services/vaultTimeout.service.ts b/jslib/common/src/services/vaultTimeout.service.ts index 3793a80b..503c96df 100644 --- a/jslib/common/src/services/vaultTimeout.service.ts +++ b/jslib/common/src/services/vaultTimeout.service.ts @@ -1,6 +1,5 @@ import { firstValueFrom } from "rxjs"; -import { CollectionService } from "../abstractions/collection.service"; import { CryptoService } from "../abstractions/crypto.service"; import { KeyConnectorService } from "../abstractions/keyConnector.service"; import { MessagingService } from "../abstractions/messaging.service"; @@ -17,7 +16,6 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { private inited = false; constructor( - private collectionService: CollectionService, private cryptoService: CryptoService, protected platformUtilsService: PlatformUtilsService, private messagingService: MessagingService, @@ -102,8 +100,6 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { await this.cryptoService.clearKeyPair(true, userId); await this.cryptoService.clearEncKey(true, userId); - await this.collectionService.clearCache(userId); - this.messagingService.send("locked", { userId: userId }); if (this.lockedCallback != null) { diff --git a/src/bwdc.ts b/src/bwdc.ts index 4e97c3c7..0de5c713 100644 --- a/src/bwdc.ts +++ b/src/bwdc.ts @@ -8,12 +8,10 @@ import { LogLevelType } from "@/jslib/common/src/enums/logLevelType"; import { StateFactory } from "@/jslib/common/src/factories/stateFactory"; import { GlobalState } from "@/jslib/common/src/models/domain/globalState"; import { AppIdService } from "@/jslib/common/src/services/appId.service"; -import { CollectionService } from "@/jslib/common/src/services/collection.service"; import { ContainerService } from "@/jslib/common/src/services/container.service"; import { CryptoService } from "@/jslib/common/src/services/crypto.service"; import { EnvironmentService } from "@/jslib/common/src/services/environment.service"; import { FileUploadService } from "@/jslib/common/src/services/fileUpload.service"; -import { FolderService } from "@/jslib/common/src/services/folder.service"; import { KeyConnectorService } from "@/jslib/common/src/services/keyConnector.service"; import { NoopMessagingService } from "@/jslib/common/src/services/noopMessaging.service"; import { OrganizationService } from "@/jslib/common/src/services/organization.service"; @@ -59,9 +57,7 @@ export class Main { containerService: ContainerService; cryptoFunctionService: NodeCryptoFunctionService; authService: AuthService; - collectionService: CollectionService; fileUploadService: FileUploadService; - folderService: FolderService; searchService: SearchService; settingsService: SettingsService; syncService: SyncService; @@ -218,19 +214,6 @@ export class Main { this.searchService = new SearchService(this.logService, this.i18nService); - this.folderService = new FolderService( - this.cryptoService, - this.apiService, - this.i18nService, - this.stateService, - ); - - this.collectionService = new CollectionService( - this.cryptoService, - this.i18nService, - this.stateService, - ); - this.providerService = new ProviderService(this.stateService); this.program = new Program(this);