allow original cipher to be passed during encrypt

This commit is contained in:
Kyle Spearrin 2018-08-15 11:43:52 -04:00
parent d56c5ff4f1
commit f16fc58d70
2 changed files with 7 additions and 4 deletions

View File

@ -14,7 +14,7 @@ export abstract class CipherService {
decryptedCipherCache: CipherView[]; decryptedCipherCache: CipherView[];
clearCache: () => void; clearCache: () => void;
encrypt: (model: CipherView, key?: SymmetricCryptoKey) => Promise<Cipher>; encrypt: (model: CipherView, key?: SymmetricCryptoKey, originalCipher?: Cipher) => Promise<Cipher>;
encryptFields: (fieldsModel: FieldView[], key: SymmetricCryptoKey) => Promise<Field[]>; encryptFields: (fieldsModel: FieldView[], key: SymmetricCryptoKey) => Promise<Field[]>;
encryptField: (fieldModel: FieldView, key: SymmetricCryptoKey) => Promise<Field>; encryptField: (fieldModel: FieldView, key: SymmetricCryptoKey) => Promise<Field>;
get: (id: string) => Promise<Cipher>; get: (id: string) => Promise<Cipher>;

View File

@ -80,11 +80,14 @@ export class CipherService implements CipherServiceAbstraction {
this.decryptedCipherCache = null; this.decryptedCipherCache = null;
} }
async encrypt(model: CipherView, key?: SymmetricCryptoKey): Promise<Cipher> { async encrypt(model: CipherView, key?: SymmetricCryptoKey, originalCipher: Cipher = null): Promise<Cipher> {
// Adjust password history // Adjust password history
if (model.id != null) { if (model.id != null) {
const existingCipher = await (await this.get(model.id)).decrypt(); if (originalCipher == null) {
if (existingCipher != null) { originalCipher = await this.get(model.id);
}
if (originalCipher != null) {
const existingCipher = await originalCipher.decrypt();
model.passwordHistory = existingCipher.passwordHistory || []; model.passwordHistory = existingCipher.passwordHistory || [];
if (model.type === CipherType.Login && existingCipher.type === CipherType.Login) { if (model.type === CipherType.Login && existingCipher.type === CipherType.Login) {
if (existingCipher.login.password != null && existingCipher.login.password !== '' && if (existingCipher.login.password != null && existingCipher.login.password !== '' &&