mirror of
https://github.com/zadam/trilium.git
synced 2024-11-12 02:37:39 +08:00
62 lines
2.3 KiB
JavaScript
62 lines
2.3 KiB
JavaScript
|
const sql = require('../../src/services/sql');
|
||
|
|
||
|
function prependIv(cipherText, ivText) {
|
||
|
const arr = ivText.split("").map(c => parseInt(c) || 0);
|
||
|
const iv = Buffer.from(arr);
|
||
|
const payload = Buffer.from(cipherText, 'base64');
|
||
|
const complete = Buffer.concat([iv, payload]);
|
||
|
|
||
|
return complete.toString('base64');
|
||
|
}
|
||
|
|
||
|
async function updateEncryptedDataKey() {
|
||
|
const encryptedDataKey = await sql.getValue("SELECT value FROM options WHERE name = 'encryptedDataKey'");
|
||
|
const encryptedDataKeyIv = await sql.getValue("SELECT value FROM options WHERE name = 'encryptedDataKeyIv'");
|
||
|
|
||
|
const newEncryptedDataKey = prependIv(encryptedDataKey, encryptedDataKeyIv);
|
||
|
|
||
|
await sql.execute("UPDATE options SET value = ? WHERE name = 'encryptedDataKey'", [newEncryptedDataKey]);
|
||
|
|
||
|
await sql.execute("DELETE FROM options WHERE name = 'encryptedDataKeyIv'");
|
||
|
await sql.execute("DELETE FROM sync WHERE entityName = 'options' AND entityId = 'encryptedDataKeyIv'");
|
||
|
}
|
||
|
|
||
|
async function updateNotes() {
|
||
|
const protectedNotes = await sql.getRows("SELECT noteId, title, content FROM notes WHERE isProtected = 1");
|
||
|
|
||
|
for (const note of protectedNotes) {
|
||
|
if (note.title !== null) {
|
||
|
note.title = prependIv(note.title, "0" + note.noteId);
|
||
|
}
|
||
|
|
||
|
if (note.content !== null) {
|
||
|
note.content = prependIv(note.content, "1" + note.noteId);
|
||
|
}
|
||
|
|
||
|
await sql.execute("UPDATE notes SET title = ?, content = ? WHERE noteId = ?", [note.title, note.content, note.noteId]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async function updateNoteRevisions() {
|
||
|
const protectedNoteRevisions = await sql.getRows("SELECT noteRevisionId, title, content FROM note_revisions WHERE isProtected = 1");
|
||
|
|
||
|
for (const noteRevision of protectedNoteRevisions) {
|
||
|
if (noteRevision.title !== null) {
|
||
|
noteRevision.title = prependIv(noteRevision.title, "0" + noteRevision.noteRevisionId);
|
||
|
}
|
||
|
|
||
|
if (noteRevision.content !== null) {
|
||
|
noteRevision.content = prependIv(noteRevision.content, "1" + noteRevision.noteRevisionId);
|
||
|
}
|
||
|
|
||
|
await sql.execute("UPDATE note_revisions SET title = ?, content = ? WHERE noteRevisionId = ?", [noteRevision.title, noteRevision.content, noteRevision.noteRevisionId]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = async () => {
|
||
|
await updateEncryptedDataKey();
|
||
|
|
||
|
await updateNotes();
|
||
|
|
||
|
await updateNoteRevisions();
|
||
|
};
|