diff --git a/libs/common/src/vault/abstractions/cipher.service.ts b/libs/common/src/vault/abstractions/cipher.service.ts index 1b2e7b7110b..ac7f7f23ed6 100644 --- a/libs/common/src/vault/abstractions/cipher.service.ts +++ b/libs/common/src/vault/abstractions/cipher.service.ts @@ -126,6 +126,7 @@ export abstract class CipherService implements UserKeyRotationDataProvider; diff --git a/libs/common/src/vault/models/view/cipher.view.ts b/libs/common/src/vault/models/view/cipher.view.ts index 9e0f8a5c4fa..c44a4021a43 100644 --- a/libs/common/src/vault/models/view/cipher.view.ts +++ b/libs/common/src/vault/models/view/cipher.view.ts @@ -334,13 +334,14 @@ export class CipherView implements View, InitializerMetadata { } /** - * Maps CipherView to SdkCipherView + * Maps CipherView to an SDK CipherCreateRequest * - * @returns {SdkCipherView} The SDK cipher view object + * @returns {CipherCreateRequest} The SDK cipher create request object */ toSdkCreateCipherRequest(): CipherCreateRequest { const sdkCipherCreateRequest: CipherCreateRequest = { organizationId: this.organizationId ? asUuid(this.organizationId) : undefined, + collectionIds: this.collectionIds ? this.collectionIds.map((i) => asUuid(i)) : [], folderId: this.folderId ? asUuid(this.folderId) : undefined, name: this.name ?? "", notes: this.notes, @@ -354,9 +355,9 @@ export class CipherView implements View, InitializerMetadata { } /** - * Maps CipherView to SdkCipherView + * Maps CipherView to an SDK CipherEditRequest * - * @returns {SdkCipherView} The SDK cipher view object + * @returns {CipherEditRequest} The SDK cipher edit request object */ toSdkUpdateCipherRequest(): CipherEditRequest { const sdkCipherEditRequest: CipherEditRequest = { @@ -378,6 +379,11 @@ export class CipherView implements View, InitializerMetadata { return sdkCipherEditRequest; } + /** + * Returns the SDK CipherViewType object for the cipher. + * + * @returns {CipherViewType} The SDK CipherViewType for the cipher. + */ getSdkCipherViewType(): CipherViewType { let viewType: CipherViewType; switch (this.type) { diff --git a/libs/common/src/vault/services/cipher.service.ts b/libs/common/src/vault/services/cipher.service.ts index 5ffb3f26e42..83899fcc421 100644 --- a/libs/common/src/vault/services/cipher.service.ts +++ b/libs/common/src/vault/services/cipher.service.ts @@ -960,6 +960,7 @@ export class CipherService implements CipherServiceAbstraction { async updateWithServer( cipherView: CipherView, userId: UserId, + originalCipherView?: CipherView, orgAdmin?: boolean, ): Promise { // const sdkCipherEncryptionEnabled = false; @@ -968,7 +969,7 @@ export class CipherService implements CipherServiceAbstraction { ); if (sdkCipherEncryptionEnabled) { - return await this.updateWithServer_sdk(cipherView, userId, orgAdmin); + return await this.updateWithServer_sdk(cipherView, userId, originalCipherView, orgAdmin); } else { const encrypted = await this.encrypt(cipherView, userId); const updatedCipher = await this.updateWithServer_legacy(encrypted, orgAdmin); @@ -980,6 +981,7 @@ export class CipherService implements CipherServiceAbstraction { async updateWithServer_sdk( cipher: CipherView, userId: UserId, + originalCipherView?: CipherView, orgAdmin?: boolean, ): Promise { return firstValueFrom( @@ -996,8 +998,7 @@ export class CipherService implements CipherServiceAbstraction { .vault() .ciphers() .admin() - // TODO: Need to take actual "origCipher" instead of passing the literal same object. - .edit(sdkUpdateRequest, cipher.toSdkCipherView()); + .edit(sdkUpdateRequest, originalCipherView?.toSdkCipherView()); } else { result = await ref.value.vault().ciphers().edit(sdkUpdateRequest); } diff --git a/libs/vault/src/cipher-form/services/default-cipher-form.service.ts b/libs/vault/src/cipher-form/services/default-cipher-form.service.ts index 7ca71b6000d..e5b8234a0fb 100644 --- a/libs/vault/src/cipher-form/services/default-cipher-form.service.ts +++ b/libs/vault/src/cipher-form/services/default-cipher-form.service.ts @@ -43,6 +43,7 @@ export class DefaultCipherFormService implements CipherFormService { if (config.originalCipher == null) { throw new Error("Original cipher is required for updating an existing cipher"); } + const originalCipherView = await this.decryptCipher(config.originalCipher); // Updating an existing cipher @@ -67,6 +68,7 @@ export class DefaultCipherFormService implements CipherFormService { const savedCipherView = await this.cipherService.updateWithServer( cipher, activeUserId, + originalCipherView, config.admin, ); // Temporary @@ -80,6 +82,7 @@ export class DefaultCipherFormService implements CipherFormService { const newCipher = await this.cipherService.updateWithServer( cipher, activeUserId, + originalCipherView, config.admin || originalCollectionIds.size === 0, );