From e4381d10e84562045c06d171f38d40db19a5a25f Mon Sep 17 00:00:00 2001 From: azivner Date: Mon, 10 Sep 2018 20:05:10 +0200 Subject: [PATCH] merged "Sync local document" into "Test sync" --- src/public/javascripts/dialogs/options.js | 16 +------- src/routes/api/login.js | 2 +- src/routes/api/setup.js | 47 ++++------------------ src/routes/api/sync.js | 14 +++++-- src/routes/routes.js | 2 +- src/services/setup.js | 49 ++++++++++++++++++++++- src/views/index.ejs | 8 +--- 7 files changed, 70 insertions(+), 68 deletions(-) diff --git a/src/public/javascripts/dialogs/options.js b/src/public/javascripts/dialogs/options.js index caa89c03b..c7e0d3297 100644 --- a/src/public/javascripts/dialogs/options.js +++ b/src/public/javascripts/dialogs/options.js @@ -223,7 +223,6 @@ addTabHandler((function() { const $syncServerTimeout = $("#sync-server-timeout"); const $syncProxy = $("#sync-proxy"); const $testSyncButton = $("#test-sync-button"); - const $syncToServerButton = $("#sync-to-server-button"); function optionsLoaded(options) { $syncServerHost.val(options['syncServerHost']); @@ -244,25 +243,14 @@ addTabHandler((function() { $testSyncButton.click(async () => { const result = await server.post('sync/test'); - if (result.connection === "Success") { - infoService.showMessage("Sync server handshake has been successful"); + if (result.success) { + infoService.showMessage(result.message); } else { infoService.showError("Sync server handshake failed, error: " + result.error); } }); - $syncToServerButton.click(async () => { - const resp = await server.post("setup/sync-to-server"); - - if (resp.success) { - infoService.showMessage("Sync has been established to the server instance. It will take some time to finish."); - } - else { - infoService.showError('Sync setup failed: ' + resp.error); - } - }); - return { optionsLoaded }; diff --git a/src/routes/api/login.js b/src/routes/api/login.js index 7101f6c9b..cbd30f3b4 100644 --- a/src/routes/api/login.js +++ b/src/routes/api/login.js @@ -38,7 +38,7 @@ async function loginSync(req) { const givenHash = req.body.hash; if (expectedHash !== givenHash) { - return [400, { message: "Sync login hash doesn't match" }]; + return [400, { message: "Sync login credentials are incorrect." }]; } req.session.loggedIn = true; diff --git a/src/routes/api/setup.js b/src/routes/api/setup.js index 9fc0b277d..472b4dc82 100644 --- a/src/routes/api/setup.js +++ b/src/routes/api/setup.js @@ -2,10 +2,13 @@ const sqlInit = require('../../services/sql_init'); const setupService = require('../../services/setup'); -const optionService = require('../../services/options'); -const syncService = require('../../services/sync'); const log = require('../../services/log'); -const rp = require('request-promise'); + +async function getStatus() { + return { + isInitialized: await sqlInit.isDbInitialized() + }; +} async function setupNewDocument(req) { const { username, password } = req.body; @@ -19,42 +22,6 @@ async function setupSyncFromServer(req) { return await setupService.setupSyncFromSyncServer(syncServerHost, syncProxy, username, password); } -async function setupSyncToSyncServer() { - log.info("Initiating sync to server"); - - const syncServerHost = await optionService.getOption('syncServerHost'); - const syncProxy = await optionService.getOption('syncProxy'); - - const rpOpts = { - uri: syncServerHost + '/api/setup/sync-seed', - method: 'POST', - json: true, - body: { - options: await setupService.getSyncSeedOptions() - } - }; - - if (syncProxy) { - rpOpts.proxy = syncProxy; - } - - try { - await rp(rpOpts); - } - catch (e) { - return { success: false, error: e.message }; - } - - // this is completely new sync, need to reset counters. If this would not be new sync, - // the previous request would have failed. - await optionService.setOption('lastSyncedPush', 0); - await optionService.setOption('lastSyncedPull', 0); - - syncService.sync(); - - return { success: true }; -} - async function saveSyncSeed(req) { const options = req.body.options; @@ -68,9 +35,9 @@ async function getSyncSeed() { } module.exports = { + getStatus, setupNewDocument, setupSyncFromServer, - setupSyncToSyncServer, getSyncSeed, saveSyncSeed }; \ No newline at end of file diff --git a/src/routes/api/sync.js b/src/routes/api/sync.js index 610884543..5a23a25b6 100644 --- a/src/routes/api/sync.js +++ b/src/routes/api/sync.js @@ -1,6 +1,7 @@ "use strict"; const syncService = require('../../services/sync'); +const setupService = require('../../services/setup'); const syncUpdateService = require('../../services/sync_update'); const syncTableService = require('../../services/sync_table'); const sql = require('../../services/sql'); @@ -11,13 +12,20 @@ const log = require('../../services/log'); async function testSync() { try { - await syncService.login(); + if (await setupService.isSyncServerInitialized()) { + await syncService.login(); - return { connection: "Success" }; + return { success: true, message: "Sync server handshake has been successful" }; + } + else { + await setupService.setupSyncToSyncServer(); + + return { success: true, message: "Sync has been established to the server instance. It will take some time to finish." }; + } } catch (e) { return { - connection: "Failure", + success: false, error: e.message }; } diff --git a/src/routes/routes.js b/src/routes/routes.js index e7eac308f..65448d869 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -166,9 +166,9 @@ function register(app) { apiRoute(PUT, '/api/recent-notes/:branchId/:notePath', recentNotesRoute.addRecentNote); apiRoute(GET, '/api/app-info', appInfoRoute.getAppInfo); + route(GET, '/api/setup/status', [], setupApiRoute.getStatus, apiResultHandler); route(POST, '/api/setup/new-document', [auth.checkAppNotInitialized], setupApiRoute.setupNewDocument, apiResultHandler); route(POST, '/api/setup/sync-from-server', [auth.checkAppNotInitialized], setupApiRoute.setupSyncFromServer, apiResultHandler, false); - apiRoute(POST, '/api/setup/sync-to-server', setupApiRoute.setupSyncToSyncServer); route(GET, '/api/setup/sync-seed', [auth.checkBasicAuth], setupApiRoute.getSyncSeed, apiResultHandler); route(POST, '/api/setup/sync-seed', [auth.checkAppNotInitialized], setupApiRoute.saveSyncSeed, apiResultHandler, false); diff --git a/src/services/setup.js b/src/services/setup.js index aa8226d15..b3f240627 100644 --- a/src/services/setup.js +++ b/src/services/setup.js @@ -3,6 +3,13 @@ const syncService = require('./sync'); const log = require('./log'); const sqlInit = require('./sql_init'); const repository = require('./repository'); +const optionService = require('./options'); + +async function isSyncServerInitialized() { + const response = await requestToSyncServer('GET', '/api/setup/status'); + + return response.isInitialized; +} function triggerSync() { log.info("Triggering sync."); @@ -15,6 +22,42 @@ function triggerSync() { }); } +async function setupSyncToSyncServer() { + log.info("Initiating sync to server"); + + await requestToSyncServer('POST', '/api/setup/sync-seed', { + options: await getSyncSeedOptions() + }); + + // this is completely new sync, need to reset counters. If this would not be new sync, + // the previous request would have failed. + await optionService.setOption('lastSyncedPush', 0); + await optionService.setOption('lastSyncedPull', 0); + + syncService.sync(); +} + +async function requestToSyncServer(method, path, body = null) { + const syncServerHost = await optionService.getOption('syncServerHost'); + const syncProxy = await optionService.getOption('syncProxy'); + + const rpOpts = { + uri: syncServerHost + path, + method: method, + json: true + }; + + if (body) { + rpOpts.body = body; + } + + if (syncProxy) { + rpOpts.proxy = syncProxy; + } + + return await rp(rpOpts); +} + async function setupSyncFromSyncServer(syncServerHost, syncProxy, username, password) { if (await sqlInit.isDbInitialized()) { return { @@ -64,7 +107,9 @@ async function getSyncSeedOptions() { } module.exports = { + isSyncServerInitialized, + triggerSync, + setupSyncToSyncServer, setupSyncFromSyncServer, - getSyncSeedOptions, - triggerSync + getSyncSeedOptions }; \ No newline at end of file diff --git a/src/views/index.ejs b/src/views/index.ejs index 95ed55a77..57b6b0d55 100644 --- a/src/views/index.ejs +++ b/src/views/index.ejs @@ -483,15 +483,9 @@

Sync test

-

This will test connection and handshake to the sync server.

+

This will test connection and handshake to the sync server. If sync server isn't initialized, this will set it up to sync with local document.

- -

Sync document to the server instance

- -

This is used when you want to sync your local document to the server instance configured above. This is a one time action after which the documents are synced automatically and transparently.

- -

Sync