added "update pojo" stage in entity saving to avoid encrypting data on protected note directly on the entity

This commit is contained in:
azivner 2018-11-30 10:20:03 +01:00
parent e37dd69827
commit ee1e4fc710
4 changed files with 27 additions and 10 deletions

View File

@ -105,6 +105,11 @@ class Attribute extends Entity {
this.dateModified = dateUtils.nowDate();
}
}
// cannot be static!
updatePojo(pojo) {
delete pojo.isOwned;
}
}
module.exports = Attribute;

View File

@ -59,6 +59,11 @@ class Branch extends Entity {
this.dateModified = dateUtils.nowDate();
}
}
// cannot be static!
updatePojo(pojo) {
delete pojo.origParentNoteId;
}
}
module.exports = Branch;

View File

@ -606,10 +606,6 @@ class Note extends Entity {
// we do this here because encryption needs the note ID for the IV
this.generateIdIfNecessary();
if (this.isProtected) {
protectedSessionService.encryptNote(this);
}
if (!this.isDeleted) {
this.isDeleted = false;
}
@ -624,6 +620,17 @@ class Note extends Entity {
this.dateModified = dateUtils.nowDate();
}
}
// cannot be static!
updatePojo(pojo) {
if (pojo.isProtected) {
protectedSessionService.encryptNote(pojo);
}
delete pojo.jsonContent;
delete pojo.isContentAvailable;
delete pojo.__attributeCache;
}
}
module.exports = Note;

View File

@ -74,13 +74,13 @@ async function updateEntity(entity) {
const clone = Object.assign({}, entity);
// transient properties not supposed to be persisted
delete clone.jsonContent;
delete clone.isOwned;
// this check requires that updatePojo is not static
if (entity.updatePojo) {
await entity.updatePojo(clone);
}
// indicates whether entity actually changed
delete clone.isChanged;
delete clone.origParentNoteId;
delete clone.isContentAvailable;
delete clone.__attributeCache;
for (const key in clone) {
// !isBuffer is for images and attachments