From 7f9a8a55cad4c0800d4be02ccd58f16f04989b96 Mon Sep 17 00:00:00 2001 From: azivner Date: Fri, 17 Aug 2018 18:11:03 +0200 Subject: [PATCH] fix init of synced options in new database --- src/routes/api/tree.js | 2 +- src/services/consistency_checks.js | 12 +++++++++++- src/services/options_init.js | 20 ++++++++++---------- src/services/sql_init.js | 2 +- src/views/setup.ejs | 2 +- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/routes/api/tree.js b/src/routes/api/tree.js index 13f2766ca..058e7c293 100644 --- a/src/routes/api/tree.js +++ b/src/routes/api/tree.js @@ -64,7 +64,7 @@ async function getTree() { const relations = await getRelations(noteIds); return { - startNotePath: await optionService.getOption('startNotePath'), + startNotePath: (await optionService.getOption('startNotePath')) || 'root', branches, notes, relations diff --git a/src/services/consistency_checks.js b/src/services/consistency_checks.js index e36e6be66..1fa0efd36 100644 --- a/src/services/consistency_checks.js +++ b/src/services/consistency_checks.js @@ -68,9 +68,18 @@ async function runSyncRowChecks(table, key, errorList) { ${table} LEFT JOIN sync ON sync.entityName = '${table}' AND entityId = ${key} WHERE - sync.id IS NULL`, + sync.id IS NULL AND ` + (table === 'options' ? 'isSynced = 1' : '1'), `Missing sync records for ${key} in table ${table}`, errorList); + console.log(` + SELECT + ${key} + FROM + ${table} + LEFT JOIN sync ON sync.entityName = '${table}' AND entityId = ${key} + WHERE + sync.id IS NULL AND ` + (table === 'options' ? 'isSynced = 1' : '1')); + await runCheck(` SELECT entityId @@ -224,6 +233,7 @@ async function runAllChecks() { await runSyncRowChecks("note_images", "noteImageId", errorList); await runSyncRowChecks("attributes", "attributeId", errorList); await runSyncRowChecks("api_tokens", "apiTokenId", errorList); + await runSyncRowChecks("options", "name", errorList); if (errorList.length === 0) { // we run this only if basic checks passed since this assumes basic data consistency diff --git a/src/services/options_init.js b/src/services/options_init.js index 9c3fa41bc..a9274c7d3 100644 --- a/src/services/options_init.js +++ b/src/services/options_init.js @@ -11,22 +11,22 @@ async function initDocumentOptions() { } async function initSyncedOptions(username, password) { - await optionService.createOption('protectedSessionTimeout', 600); - await optionService.createOption('noteRevisionSnapshotTimeInterval', 600); + await optionService.createOption('protectedSessionTimeout', 600, true); + await optionService.createOption('noteRevisionSnapshotTimeInterval', 600, true); - await optionService.createOption('username', username); + await optionService.createOption('username', username, true); - await optionService.createOption('passwordVerificationSalt', utils.randomSecureToken(32)); - await optionService.createOption('passwordDerivedKeySalt', utils.randomSecureToken(32)); + await optionService.createOption('passwordVerificationSalt', utils.randomSecureToken(32), true); + await optionService.createOption('passwordDerivedKeySalt', utils.randomSecureToken(32), true); - const passwordVerificationKey = utils.toBase64(await myScryptService.getVerificationHash(password)); - await optionService.createOption('passwordVerificationHash', passwordVerificationKey); + const passwordVerificationKey = utils.toBase64(await myScryptService.getVerificationHash(password), true); + await optionService.createOption('passwordVerificationHash', passwordVerificationKey, true); // passwordEncryptionService expects these options to already exist - await optionService.createOption('encryptedDataKey', ''); - await optionService.createOption('encryptedDataKeyIv', ''); + await optionService.createOption('encryptedDataKey', '', true); + await optionService.createOption('encryptedDataKeyIv', '', true); - await passwordEncryptionService.setDataKey(password, utils.randomSecureToken(16)); + await passwordEncryptionService.setDataKey(password, utils.randomSecureToken(16), true); } async function initNotSyncedOptions(initialized, startNotePath = 'root', syncServerHost = '', syncProxy = '') { diff --git a/src/services/sql_init.js b/src/services/sql_init.js index 39e0a5a55..b9d05c2d6 100644 --- a/src/services/sql_init.js +++ b/src/services/sql_init.js @@ -111,7 +111,7 @@ async function createDatabaseForSync(options, syncServerHost = '', syncProxy = ' await sql.transactional(async () => { await sql.executeScript(schema); - await require('./options_init').initNotSyncedOptions(false, '', syncServerHost, syncProxy); + await require('./options_init').initNotSyncedOptions(false, 'root', syncServerHost, syncProxy); // document options required for sync to kick off for (const opt of options) { diff --git a/src/views/setup.ejs b/src/views/setup.ejs index 83dd3933c..807b326bd 100644 --- a/src/views/setup.ejs +++ b/src/views/setup.ejs @@ -36,7 +36,7 @@
- +