mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-26 17:41:34 +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(); | ||
|  | }; |