Browse Source

Delete `CipherService`

ac/addison/ac-2777/directory-connector-code-cleanup
Addison Beck 1 year ago
parent
commit
b123ca785e
No known key found for this signature in database
  1. 49
      jslib/angular/src/services/jslib-services.module.ts
  2. 69
      jslib/common/spec/services/cipher.service.spec.ts
  3. 79
      jslib/common/src/abstractions/cipher.service.ts
  4. 3
      jslib/common/src/abstractions/sync.service.ts
  5. 1282
      jslib/common/src/services/cipher.service.ts
  6. 8
      jslib/common/src/services/event.service.ts
  7. 5
      jslib/common/src/services/folder.service.ts
  8. 12
      jslib/common/src/services/notifications.service.ts
  9. 8
      jslib/common/src/services/search.service.ts
  10. 87
      jslib/common/src/services/sync.service.ts
  11. 3
      jslib/common/src/services/vaultTimeout.service.ts
  12. 16
      src/bwdc.ts

49
jslib/angular/src/services/jslib-services.module.ts

@ -1,10 +1,9 @@
import { Injector, LOCALE_ID, NgModule } from "@angular/core"; import { LOCALE_ID, NgModule } from "@angular/core";
import { ApiService as ApiServiceAbstraction } from "@/jslib/common/src/abstractions/api.service"; import { ApiService as ApiServiceAbstraction } from "@/jslib/common/src/abstractions/api.service";
import { AppIdService as AppIdServiceAbstraction } from "@/jslib/common/src/abstractions/appId.service"; import { AppIdService as AppIdServiceAbstraction } from "@/jslib/common/src/abstractions/appId.service";
import { AuthService as AuthServiceAbstraction } from "@/jslib/common/src/abstractions/auth.service"; import { AuthService as AuthServiceAbstraction } from "@/jslib/common/src/abstractions/auth.service";
import { BroadcasterService as BroadcasterServiceAbstraction } from "@/jslib/common/src/abstractions/broadcaster.service"; import { BroadcasterService as BroadcasterServiceAbstraction } from "@/jslib/common/src/abstractions/broadcaster.service";
import { CipherService as CipherServiceAbstraction } from "@/jslib/common/src/abstractions/cipher.service";
import { CollectionService as CollectionServiceAbstraction } from "@/jslib/common/src/abstractions/collection.service"; import { CollectionService as CollectionServiceAbstraction } from "@/jslib/common/src/abstractions/collection.service";
import { CryptoService as CryptoServiceAbstraction } from "@/jslib/common/src/abstractions/crypto.service"; import { CryptoService as CryptoServiceAbstraction } from "@/jslib/common/src/abstractions/crypto.service";
import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "@/jslib/common/src/abstractions/cryptoFunction.service"; import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "@/jslib/common/src/abstractions/cryptoFunction.service";
@ -39,7 +38,6 @@ import { GlobalState } from "@/jslib/common/src/models/domain/globalState";
import { ApiService } from "@/jslib/common/src/services/api.service"; import { ApiService } from "@/jslib/common/src/services/api.service";
import { AppIdService } from "@/jslib/common/src/services/appId.service"; import { AppIdService } from "@/jslib/common/src/services/appId.service";
import { AuthService } from "@/jslib/common/src/services/auth.service"; import { AuthService } from "@/jslib/common/src/services/auth.service";
import { CipherService } from "@/jslib/common/src/services/cipher.service";
import { CollectionService } from "@/jslib/common/src/services/collection.service"; import { CollectionService } from "@/jslib/common/src/services/collection.service";
import { ConsoleLogService } from "@/jslib/common/src/services/consoleLog.service"; import { ConsoleLogService } from "@/jslib/common/src/services/consoleLog.service";
import { CryptoService } from "@/jslib/common/src/services/crypto.service"; import { CryptoService } from "@/jslib/common/src/services/crypto.service";
@ -108,39 +106,6 @@ import { ValidationService } from "./validation.service";
I18nServiceAbstraction, I18nServiceAbstraction,
], ],
}, },
{
provide: CipherServiceAbstraction,
useFactory: (
cryptoService: CryptoServiceAbstraction,
settingsService: SettingsServiceAbstraction,
apiService: ApiServiceAbstraction,
fileUploadService: FileUploadServiceAbstraction,
i18nService: I18nServiceAbstraction,
injector: Injector,
logService: LogService,
stateService: StateServiceAbstraction,
) =>
new CipherService(
cryptoService,
settingsService,
apiService,
fileUploadService,
i18nService,
() => injector.get(SearchServiceAbstraction),
logService,
stateService,
),
deps: [
CryptoServiceAbstraction,
SettingsServiceAbstraction,
ApiServiceAbstraction,
FileUploadServiceAbstraction,
I18nServiceAbstraction,
Injector, // TODO: Get rid of this circular dependency!
LogService,
StateServiceAbstraction,
],
},
{ {
provide: FolderServiceAbstraction, provide: FolderServiceAbstraction,
useClass: FolderService, useClass: FolderService,
@ -148,7 +113,6 @@ import { ValidationService } from "./validation.service";
CryptoServiceAbstraction, CryptoServiceAbstraction,
ApiServiceAbstraction, ApiServiceAbstraction,
I18nServiceAbstraction, I18nServiceAbstraction,
CipherServiceAbstraction,
StateServiceAbstraction, StateServiceAbstraction,
], ],
}, },
@ -206,7 +170,7 @@ import { ValidationService } from "./validation.service";
{ {
provide: FileUploadServiceAbstraction, provide: FileUploadServiceAbstraction,
useClass: FileUploadService, useClass: FileUploadService,
deps: [LogServiceAbstraction, ApiServiceAbstraction], deps: [LogService, ApiServiceAbstraction],
}, },
{ {
provide: SyncServiceAbstraction, provide: SyncServiceAbstraction,
@ -214,7 +178,6 @@ import { ValidationService } from "./validation.service";
apiService: ApiServiceAbstraction, apiService: ApiServiceAbstraction,
settingsService: SettingsServiceAbstraction, settingsService: SettingsServiceAbstraction,
folderService: FolderServiceAbstraction, folderService: FolderServiceAbstraction,
cipherService: CipherServiceAbstraction,
cryptoService: CryptoServiceAbstraction, cryptoService: CryptoServiceAbstraction,
collectionService: CollectionServiceAbstraction, collectionService: CollectionServiceAbstraction,
messagingService: MessagingServiceAbstraction, messagingService: MessagingServiceAbstraction,
@ -229,7 +192,6 @@ import { ValidationService } from "./validation.service";
apiService, apiService,
settingsService, settingsService,
folderService, folderService,
cipherService,
cryptoService, cryptoService,
collectionService, collectionService,
messagingService, messagingService,
@ -245,7 +207,6 @@ import { ValidationService } from "./validation.service";
ApiServiceAbstraction, ApiServiceAbstraction,
SettingsServiceAbstraction, SettingsServiceAbstraction,
FolderServiceAbstraction, FolderServiceAbstraction,
CipherServiceAbstraction,
CryptoServiceAbstraction, CryptoServiceAbstraction,
CollectionServiceAbstraction, CollectionServiceAbstraction,
MessagingServiceAbstraction, MessagingServiceAbstraction,
@ -266,7 +227,6 @@ import { ValidationService } from "./validation.service";
{ {
provide: VaultTimeoutServiceAbstraction, provide: VaultTimeoutServiceAbstraction,
useFactory: ( useFactory: (
cipherService: CipherServiceAbstraction,
folderService: FolderServiceAbstraction, folderService: FolderServiceAbstraction,
collectionService: CollectionServiceAbstraction, collectionService: CollectionServiceAbstraction,
cryptoService: CryptoServiceAbstraction, cryptoService: CryptoServiceAbstraction,
@ -279,7 +239,6 @@ import { ValidationService } from "./validation.service";
stateService: StateServiceAbstraction, stateService: StateServiceAbstraction,
) => ) =>
new VaultTimeoutService( new VaultTimeoutService(
cipherService,
folderService, folderService,
collectionService, collectionService,
cryptoService, cryptoService,
@ -295,7 +254,6 @@ import { ValidationService } from "./validation.service";
messagingService.send("logout", { expired: false, userId: userId }), messagingService.send("logout", { expired: false, userId: userId }),
), ),
deps: [ deps: [
CipherServiceAbstraction,
FolderServiceAbstraction, FolderServiceAbstraction,
CollectionServiceAbstraction, CollectionServiceAbstraction,
CryptoServiceAbstraction, CryptoServiceAbstraction,
@ -346,7 +304,7 @@ import { ValidationService } from "./validation.service";
{ {
provide: SearchServiceAbstraction, provide: SearchServiceAbstraction,
useClass: SearchService, useClass: SearchService,
deps: [CipherServiceAbstraction, LogService, I18nServiceAbstraction], deps: [LogService, I18nServiceAbstraction],
}, },
{ {
provide: NotificationsServiceAbstraction, provide: NotificationsServiceAbstraction,
@ -386,7 +344,6 @@ import { ValidationService } from "./validation.service";
useClass: EventService, useClass: EventService,
deps: [ deps: [
ApiServiceAbstraction, ApiServiceAbstraction,
CipherServiceAbstraction,
StateServiceAbstraction, StateServiceAbstraction,
LogService, LogService,
OrganizationServiceAbstraction, OrganizationServiceAbstraction,

69
jslib/common/spec/services/cipher.service.spec.ts

@ -1,69 +0,0 @@
import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute";
import { ApiService } from "@/jslib/common/src/abstractions/api.service";
import { CryptoService } from "@/jslib/common/src/abstractions/crypto.service";
import { FileUploadService } from "@/jslib/common/src/abstractions/fileUpload.service";
import { I18nService } from "@/jslib/common/src/abstractions/i18n.service";
import { LogService } from "@/jslib/common/src/abstractions/log.service";
import { SearchService } from "@/jslib/common/src/abstractions/search.service";
import { SettingsService } from "@/jslib/common/src/abstractions/settings.service";
import { StateService } from "@/jslib/common/src/abstractions/state.service";
import { Utils } from "@/jslib/common/src/misc/utils";
import { Cipher } from "@/jslib/common/src/models/domain/cipher";
import { EncArrayBuffer } from "@/jslib/common/src/models/domain/encArrayBuffer";
import { EncString } from "@/jslib/common/src/models/domain/encString";
import { SymmetricCryptoKey } from "@/jslib/common/src/models/domain/symmetricCryptoKey";
import { CipherService } from "@/jslib/common/src/services/cipher.service";
const ENCRYPTED_TEXT = "This data has been encrypted";
const ENCRYPTED_BYTES = new EncArrayBuffer(Utils.fromUtf8ToArray(ENCRYPTED_TEXT).buffer);
describe("Cipher Service", () => {
let cryptoService: SubstituteOf<CryptoService>;
let stateService: SubstituteOf<StateService>;
let settingsService: SubstituteOf<SettingsService>;
let apiService: SubstituteOf<ApiService>;
let fileUploadService: SubstituteOf<FileUploadService>;
let i18nService: SubstituteOf<I18nService>;
let searchService: SubstituteOf<SearchService>;
let logService: SubstituteOf<LogService>;
let cipherService: CipherService;
beforeEach(() => {
cryptoService = Substitute.for<CryptoService>();
stateService = Substitute.for<StateService>();
settingsService = Substitute.for<SettingsService>();
apiService = Substitute.for<ApiService>();
fileUploadService = Substitute.for<FileUploadService>();
i18nService = Substitute.for<I18nService>();
searchService = Substitute.for<SearchService>();
logService = Substitute.for<LogService>();
cryptoService.encryptToBytes(Arg.any(), Arg.any()).resolves(ENCRYPTED_BYTES);
cryptoService.encrypt(Arg.any(), Arg.any()).resolves(new EncString(ENCRYPTED_TEXT));
cipherService = new CipherService(
cryptoService,
settingsService,
apiService,
fileUploadService,
i18nService,
() => searchService,
logService,
stateService,
);
});
it("attachments upload encrypted file contents", async () => {
const fileName = "filename";
const fileData = new Uint8Array(10).buffer;
cryptoService.getOrgKey(Arg.any()).resolves(new SymmetricCryptoKey(new Uint8Array(32).buffer));
await cipherService.saveAttachmentRawWithServer(new Cipher(), fileName, fileData);
fileUploadService
.received(1)
.uploadCipherAttachment(Arg.any(), Arg.any(), new EncString(ENCRYPTED_TEXT), ENCRYPTED_BYTES);
});
});

79
jslib/common/src/abstractions/cipher.service.ts

@ -1,79 +0,0 @@
import { CipherType } from "../enums/cipherType";
import { UriMatchType } from "../enums/uriMatchType";
import { CipherData } from "../models/data/cipherData";
import { Cipher } from "../models/domain/cipher";
import { Field } from "../models/domain/field";
import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey";
import { CipherView } from "../models/view/cipherView";
import { FieldView } from "../models/view/fieldView";
export abstract class CipherService {
clearCache: (userId?: string) => Promise<void>;
encrypt: (
model: CipherView,
key?: SymmetricCryptoKey,
originalCipher?: Cipher,
) => Promise<Cipher>;
encryptFields: (fieldsModel: FieldView[], key: SymmetricCryptoKey) => Promise<Field[]>;
encryptField: (fieldModel: FieldView, key: SymmetricCryptoKey) => Promise<Field>;
get: (id: string) => Promise<Cipher>;
getAll: () => Promise<Cipher[]>;
getAllDecrypted: () => Promise<CipherView[]>;
getAllDecryptedForGrouping: (groupingId: string, folder?: boolean) => Promise<CipherView[]>;
getAllDecryptedForUrl: (
url: string,
includeOtherTypes?: CipherType[],
defaultMatch?: UriMatchType,
) => Promise<CipherView[]>;
getAllFromApiForOrganization: (organizationId: string) => Promise<CipherView[]>;
getLastUsedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise<CipherView>;
getLastLaunchedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise<CipherView>;
getNextCipherForUrl: (url: string) => Promise<CipherView>;
updateLastUsedIndexForUrl: (url: string) => void;
updateLastUsedDate: (id: string) => Promise<void>;
updateLastLaunchedDate: (id: string) => Promise<void>;
saveNeverDomain: (domain: string) => Promise<void>;
saveWithServer: (cipher: Cipher) => Promise<any>;
shareWithServer: (
cipher: CipherView,
organizationId: string,
collectionIds: string[],
) => Promise<any>;
shareManyWithServer: (
ciphers: CipherView[],
organizationId: string,
collectionIds: string[],
) => Promise<any>;
saveAttachmentWithServer: (
cipher: Cipher,
unencryptedFile: any,
admin?: boolean,
) => Promise<Cipher>;
saveAttachmentRawWithServer: (
cipher: Cipher,
filename: string,
data: ArrayBuffer,
admin?: boolean,
) => Promise<Cipher>;
saveCollectionsWithServer: (cipher: Cipher) => Promise<any>;
upsert: (cipher: CipherData | CipherData[]) => Promise<any>;
replace: (ciphers: { [id: string]: CipherData }) => Promise<any>;
clear: (userId: string) => Promise<any>;
moveManyWithServer: (ids: string[], folderId: string) => Promise<any>;
delete: (id: string | string[]) => Promise<any>;
deleteWithServer: (id: string) => Promise<any>;
deleteManyWithServer: (ids: string[]) => Promise<any>;
deleteAttachment: (id: string, attachmentId: string) => Promise<void>;
deleteAttachmentWithServer: (id: string, attachmentId: string) => Promise<void>;
sortCiphersByLastUsed: (a: any, b: any) => number;
sortCiphersByLastUsedThenName: (a: any, b: any) => number;
getLocaleSortingFunction: () => (a: CipherView, b: CipherView) => number;
softDelete: (id: string | string[]) => Promise<any>;
softDeleteWithServer: (id: string) => Promise<any>;
softDeleteManyWithServer: (ids: string[]) => Promise<any>;
restore: (
cipher: { id: string; revisionDate: string } | { id: string; revisionDate: string }[],
) => Promise<any>;
restoreWithServer: (id: string) => Promise<any>;
restoreManyWithServer: (ids: string[]) => Promise<any>;
}

3
jslib/common/src/abstractions/sync.service.ts

@ -1,5 +1,4 @@
import { import {
SyncCipherNotification,
SyncFolderNotification, SyncFolderNotification,
} from "../models/response/notificationResponse"; } from "../models/response/notificationResponse";
@ -11,6 +10,4 @@ export abstract class SyncService {
fullSync: (forceSync: boolean, allowThrowOnError?: boolean) => Promise<boolean>; fullSync: (forceSync: boolean, allowThrowOnError?: boolean) => Promise<boolean>;
syncUpsertFolder: (notification: SyncFolderNotification, isEdit: boolean) => Promise<boolean>; syncUpsertFolder: (notification: SyncFolderNotification, isEdit: boolean) => Promise<boolean>;
syncDeleteFolder: (notification: SyncFolderNotification) => Promise<boolean>; syncDeleteFolder: (notification: SyncFolderNotification) => Promise<boolean>;
syncUpsertCipher: (notification: SyncCipherNotification, isEdit: boolean) => Promise<boolean>;
syncDeleteCipher: (notification: SyncFolderNotification) => Promise<boolean>;
} }

1282
jslib/common/src/services/cipher.service.ts

File diff suppressed because it is too large Load Diff

8
jslib/common/src/services/event.service.ts

@ -1,5 +1,4 @@
import { ApiService } from "../abstractions/api.service"; import { ApiService } from "../abstractions/api.service";
import { CipherService } from "../abstractions/cipher.service";
import { EventService as EventServiceAbstraction } from "../abstractions/event.service"; import { EventService as EventServiceAbstraction } from "../abstractions/event.service";
import { LogService } from "../abstractions/log.service"; import { LogService } from "../abstractions/log.service";
import { OrganizationService } from "../abstractions/organization.service"; import { OrganizationService } from "../abstractions/organization.service";
@ -13,7 +12,6 @@ export class EventService implements EventServiceAbstraction {
constructor( constructor(
private apiService: ApiService, private apiService: ApiService,
private cipherService: CipherService,
private stateService: StateService, private stateService: StateService,
private logService: LogService, private logService: LogService,
private organizationService: OrganizationService, private organizationService: OrganizationService,
@ -48,12 +46,6 @@ export class EventService implements EventServiceAbstraction {
if (orgIds.size === 0) { if (orgIds.size === 0) {
return; return;
} }
if (cipherId != null) {
const cipher = await this.cipherService.get(cipherId);
if (cipher == null || cipher.organizationId == null || !orgIds.has(cipher.organizationId)) {
return;
}
}
let eventCollection = await this.stateService.getEventCollection(); let eventCollection = await this.stateService.getEventCollection();
if (eventCollection == null) { if (eventCollection == null) {
eventCollection = []; eventCollection = [];

5
jslib/common/src/services/folder.service.ts

@ -1,5 +1,4 @@
import { ApiService } from "../abstractions/api.service"; import { ApiService } from "../abstractions/api.service";
import { CipherService } from "../abstractions/cipher.service";
import { CryptoService } from "../abstractions/crypto.service"; import { CryptoService } from "../abstractions/crypto.service";
import { FolderService as FolderServiceAbstraction } from "../abstractions/folder.service"; import { FolderService as FolderServiceAbstraction } from "../abstractions/folder.service";
import { I18nService } from "../abstractions/i18n.service"; import { I18nService } from "../abstractions/i18n.service";
@ -22,7 +21,6 @@ export class FolderService implements FolderServiceAbstraction {
private cryptoService: CryptoService, private cryptoService: CryptoService,
private apiService: ApiService, private apiService: ApiService,
private i18nService: I18nService, private i18nService: I18nService,
private cipherService: CipherService,
private stateService: StateService, private stateService: StateService,
) {} ) {}
@ -181,9 +179,6 @@ export class FolderService implements FolderServiceAbstraction {
updates.push(ciphers[cId]); updates.push(ciphers[cId]);
} }
} }
if (updates.length > 0) {
this.cipherService.upsert(updates);
}
} }
} }

12
jslib/common/src/services/notifications.service.ts

@ -12,7 +12,6 @@ import { VaultTimeoutService } from "../abstractions/vaultTimeout.service";
import { NotificationType } from "../enums/notificationType"; import { NotificationType } from "../enums/notificationType";
import { import {
NotificationResponse, NotificationResponse,
SyncCipherNotification,
SyncFolderNotification, SyncFolderNotification,
} from "../models/response/notificationResponse"; } from "../models/response/notificationResponse";
@ -131,17 +130,6 @@ export class NotificationsService implements NotificationsServiceAbstraction {
} }
switch (notification.type) { switch (notification.type) {
case NotificationType.SyncCipherCreate:
case NotificationType.SyncCipherUpdate:
await this.syncService.syncUpsertCipher(
notification.payload as SyncCipherNotification,
notification.type === NotificationType.SyncCipherUpdate,
);
break;
case NotificationType.SyncCipherDelete:
case NotificationType.SyncLoginDelete:
await this.syncService.syncDeleteCipher(notification.payload as SyncCipherNotification);
break;
case NotificationType.SyncFolderCreate: case NotificationType.SyncFolderCreate:
case NotificationType.SyncFolderUpdate: case NotificationType.SyncFolderUpdate:
await this.syncService.syncUpsertFolder( await this.syncService.syncUpsertFolder(

8
jslib/common/src/services/search.service.ts

@ -1,6 +1,5 @@
import * as lunr from "lunr"; import * as lunr from "lunr";
import { CipherService } from "../abstractions/cipher.service";
import { I18nService } from "../abstractions/i18n.service"; import { I18nService } from "../abstractions/i18n.service";
import { LogService } from "../abstractions/log.service"; import { LogService } from "../abstractions/log.service";
import { SearchService as SearchServiceAbstraction } from "../abstractions/search.service"; import { SearchService as SearchServiceAbstraction } from "../abstractions/search.service";
@ -17,7 +16,6 @@ export class SearchService implements SearchServiceAbstraction {
private searchableMinLength = 2; private searchableMinLength = 2;
constructor( constructor(
private cipherService: CipherService,
private logService: LogService, private logService: LogService,
private i18nService: I18nService, private i18nService: I18nService,
) { ) {
@ -76,7 +74,6 @@ export class SearchService implements SearchServiceAbstraction {
extractor: (c: CipherView) => this.attachmentExtractor(c, true), extractor: (c: CipherView) => this.attachmentExtractor(c, true),
}); });
builder.field("organizationid", { extractor: (c: CipherView) => c.organizationId }); builder.field("organizationid", { extractor: (c: CipherView) => c.organizationId });
ciphers = ciphers || (await this.cipherService.getAllDecrypted());
ciphers.forEach((c) => builder.add(c)); ciphers.forEach((c) => builder.add(c));
this.index = builder.build(); this.index = builder.build();
@ -97,11 +94,6 @@ export class SearchService implements SearchServiceAbstraction {
if (query === "") { if (query === "") {
query = null; query = null;
} }
if (ciphers == null) {
ciphers = await this.cipherService.getAllDecrypted();
}
if (filter != null && Array.isArray(filter) && filter.length > 0) { if (filter != null && Array.isArray(filter) && filter.length > 0) {
ciphers = ciphers.filter((c) => filter.every((f) => f == null || f(c))); ciphers = ciphers.filter((c) => filter.every((f) => f == null || f(c)));
} else if (filter != null) { } else if (filter != null) {

87
jslib/common/src/services/sync.service.ts

@ -1,5 +1,4 @@
import { ApiService } from "../abstractions/api.service"; import { ApiService } from "../abstractions/api.service";
import { CipherService } from "../abstractions/cipher.service";
import { CollectionService } from "../abstractions/collection.service"; import { CollectionService } from "../abstractions/collection.service";
import { CryptoService } from "../abstractions/crypto.service"; import { CryptoService } from "../abstractions/crypto.service";
import { FolderService } from "../abstractions/folder.service"; import { FolderService } from "../abstractions/folder.service";
@ -13,18 +12,15 @@ import { SettingsService } from "../abstractions/settings.service";
import { StateService } from "../abstractions/state.service"; import { StateService } from "../abstractions/state.service";
import { SyncService as SyncServiceAbstraction } from "../abstractions/sync.service"; import { SyncService as SyncServiceAbstraction } from "../abstractions/sync.service";
import { sequentialize } from "../misc/sequentialize"; import { sequentialize } from "../misc/sequentialize";
import { CipherData } from "../models/data/cipherData";
import { CollectionData } from "../models/data/collectionData"; import { CollectionData } from "../models/data/collectionData";
import { FolderData } from "../models/data/folderData"; import { FolderData } from "../models/data/folderData";
import { OrganizationData } from "../models/data/organizationData"; import { OrganizationData } from "../models/data/organizationData";
import { PolicyData } from "../models/data/policyData"; import { PolicyData } from "../models/data/policyData";
import { ProviderData } from "../models/data/providerData"; import { ProviderData } from "../models/data/providerData";
import { CipherResponse } from "../models/response/cipherResponse";
import { CollectionDetailsResponse } from "../models/response/collectionResponse"; import { CollectionDetailsResponse } from "../models/response/collectionResponse";
import { DomainsResponse } from "../models/response/domainsResponse"; import { DomainsResponse } from "../models/response/domainsResponse";
import { FolderResponse } from "../models/response/folderResponse"; import { FolderResponse } from "../models/response/folderResponse";
import { import {
SyncCipherNotification,
SyncFolderNotification, SyncFolderNotification,
} from "../models/response/notificationResponse"; } from "../models/response/notificationResponse";
import { PolicyResponse } from "../models/response/policyResponse"; import { PolicyResponse } from "../models/response/policyResponse";
@ -37,7 +33,6 @@ export class SyncService implements SyncServiceAbstraction {
private apiService: ApiService, private apiService: ApiService,
private settingsService: SettingsService, private settingsService: SettingsService,
private folderService: FolderService, private folderService: FolderService,
private cipherService: CipherService,
private cryptoService: CryptoService, private cryptoService: CryptoService,
private collectionService: CollectionService, private collectionService: CollectionService,
private messagingService: MessagingService, private messagingService: MessagingService,
@ -98,7 +93,6 @@ export class SyncService implements SyncServiceAbstraction {
await this.syncProfile(response.profile); await this.syncProfile(response.profile);
await this.syncFolders(userId, response.folders); await this.syncFolders(userId, response.folders);
await this.syncCollections(response.collections); await this.syncCollections(response.collections);
await this.syncCiphers(userId, response.ciphers);
await this.syncSettings(response.domains); await this.syncSettings(response.domains);
await this.syncPolicies(response.policies); await this.syncPolicies(response.policies);
@ -148,79 +142,6 @@ export class SyncService implements SyncServiceAbstraction {
return this.syncCompleted(false); return this.syncCompleted(false);
} }
async syncUpsertCipher(notification: SyncCipherNotification, isEdit: boolean): Promise<boolean> {
this.syncStarted();
if (await this.stateService.getIsAuthenticated()) {
try {
let shouldUpdate = true;
const localCipher = await this.cipherService.get(notification.id);
if (localCipher != null && localCipher.revisionDate >= notification.revisionDate) {
shouldUpdate = false;
}
let checkCollections = false;
if (shouldUpdate) {
if (isEdit) {
shouldUpdate = localCipher != null;
checkCollections = true;
} else {
if (notification.collectionIds == null || notification.organizationId == null) {
shouldUpdate = localCipher == null;
} else {
shouldUpdate = false;
checkCollections = true;
}
}
}
if (
!shouldUpdate &&
checkCollections &&
notification.organizationId != null &&
notification.collectionIds != null &&
notification.collectionIds.length > 0
) {
const collections = await this.collectionService.getAll();
if (collections != null) {
for (let i = 0; i < collections.length; i++) {
if (notification.collectionIds.indexOf(collections[i].id) > -1) {
shouldUpdate = true;
break;
}
}
}
}
if (shouldUpdate) {
const remoteCipher = await this.apiService.getCipher(notification.id);
if (remoteCipher != null) {
const userId = await this.stateService.getUserId();
await this.cipherService.upsert(new CipherData(remoteCipher, userId));
this.messagingService.send("syncedUpsertedCipher", { cipherId: notification.id });
return this.syncCompleted(true);
}
}
} catch (e) {
if (e != null && e.statusCode === 404 && isEdit) {
await this.cipherService.delete(notification.id);
this.messagingService.send("syncedDeletedCipher", { cipherId: notification.id });
return this.syncCompleted(true);
}
}
}
return this.syncCompleted(false);
}
async syncDeleteCipher(notification: SyncCipherNotification): Promise<boolean> {
this.syncStarted();
if (await this.stateService.getIsAuthenticated()) {
await this.cipherService.delete(notification.id);
this.messagingService.send("syncedDeletedCipher", { cipherId: notification.id });
return this.syncCompleted(true);
}
return this.syncCompleted(false);
}
// Helpers // Helpers
private syncStarted() { private syncStarted() {
@ -314,14 +235,6 @@ export class SyncService implements SyncServiceAbstraction {
return await this.collectionService.replace(collections); return await this.collectionService.replace(collections);
} }
private async syncCiphers(userId: string, response: CipherResponse[]) {
const ciphers: { [id: string]: CipherData } = {};
response.forEach((c) => {
ciphers[c.id] = new CipherData(c, userId);
});
return await this.cipherService.replace(ciphers);
}
private async syncSettings(response: DomainsResponse) { private async syncSettings(response: DomainsResponse) {
let eqDomains: string[][] = []; let eqDomains: string[][] = [];
if (response != null && response.equivalentDomains != null) { if (response != null && response.equivalentDomains != null) {

3
jslib/common/src/services/vaultTimeout.service.ts

@ -1,6 +1,5 @@
import { firstValueFrom } from "rxjs"; import { firstValueFrom } from "rxjs";
import { CipherService } from "../abstractions/cipher.service";
import { CollectionService } from "../abstractions/collection.service"; import { CollectionService } from "../abstractions/collection.service";
import { CryptoService } from "../abstractions/crypto.service"; import { CryptoService } from "../abstractions/crypto.service";
import { FolderService } from "../abstractions/folder.service"; import { FolderService } from "../abstractions/folder.service";
@ -19,7 +18,6 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction {
private inited = false; private inited = false;
constructor( constructor(
private cipherService: CipherService,
private folderService: FolderService, private folderService: FolderService,
private collectionService: CollectionService, private collectionService: CollectionService,
private cryptoService: CryptoService, private cryptoService: CryptoService,
@ -107,7 +105,6 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction {
await this.cryptoService.clearEncKey(true, userId); await this.cryptoService.clearEncKey(true, userId);
await this.folderService.clearCache(userId); await this.folderService.clearCache(userId);
await this.cipherService.clearCache(userId);
await this.collectionService.clearCache(userId); await this.collectionService.clearCache(userId);
this.messagingService.send("locked", { userId: userId }); this.messagingService.send("locked", { userId: userId });

16
src/bwdc.ts

@ -8,7 +8,6 @@ import { LogLevelType } from "@/jslib/common/src/enums/logLevelType";
import { StateFactory } from "@/jslib/common/src/factories/stateFactory"; import { StateFactory } from "@/jslib/common/src/factories/stateFactory";
import { GlobalState } from "@/jslib/common/src/models/domain/globalState"; import { GlobalState } from "@/jslib/common/src/models/domain/globalState";
import { AppIdService } from "@/jslib/common/src/services/appId.service"; import { AppIdService } from "@/jslib/common/src/services/appId.service";
import { CipherService } from "@/jslib/common/src/services/cipher.service";
import { CollectionService } from "@/jslib/common/src/services/collection.service"; import { CollectionService } from "@/jslib/common/src/services/collection.service";
import { ContainerService } from "@/jslib/common/src/services/container.service"; import { ContainerService } from "@/jslib/common/src/services/container.service";
import { CryptoService } from "@/jslib/common/src/services/crypto.service"; import { CryptoService } from "@/jslib/common/src/services/crypto.service";
@ -61,7 +60,6 @@ export class Main {
cryptoFunctionService: NodeCryptoFunctionService; cryptoFunctionService: NodeCryptoFunctionService;
authService: AuthService; authService: AuthService;
collectionService: CollectionService; collectionService: CollectionService;
cipherService: CipherService;
fileUploadService: FileUploadService; fileUploadService: FileUploadService;
folderService: FolderService; folderService: FolderService;
searchService: SearchService; searchService: SearchService;
@ -218,24 +216,12 @@ export class Main {
this.fileUploadService = new FileUploadService(this.logService, this.apiService); this.fileUploadService = new FileUploadService(this.logService, this.apiService);
this.cipherService = new CipherService( this.searchService = new SearchService(this.logService, this.i18nService);
this.cryptoService,
this.settingsService,
this.apiService,
this.fileUploadService,
this.i18nService,
() => searchService,
this.logService,
this.stateService,
);
this.searchService = new SearchService(this.cipherService, this.logService, this.i18nService);
this.folderService = new FolderService( this.folderService = new FolderService(
this.cryptoService, this.cryptoService,
this.apiService, this.apiService,
this.i18nService, this.i18nService,
this.cipherService,
this.stateService, this.stateService,
); );

Loading…
Cancel
Save