mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01: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();
							 | 
						||
| 
								 | 
							
								};
							 |