2017-12-04 11:29:23 +08:00
|
|
|
"use strict";
|
|
|
|
|
2018-04-03 09:25:20 +08:00
|
|
|
const sqlInit = require('../../services/sql_init');
|
2018-07-23 01:56:20 +08:00
|
|
|
const sql = require('../../services/sql');
|
2018-07-24 03:15:32 +08:00
|
|
|
const rp = require('request-promise');
|
|
|
|
const Option = require('../../entities/option');
|
|
|
|
const syncService = require('../../services/sync');
|
2018-07-23 01:56:20 +08:00
|
|
|
const log = require('../../services/log');
|
2017-12-04 11:29:23 +08:00
|
|
|
|
2018-07-23 01:56:20 +08:00
|
|
|
async function setupNewDocument(req) {
|
2017-12-04 11:29:23 +08:00
|
|
|
const { username, password } = req.body;
|
|
|
|
|
2018-07-21 14:55:24 +08:00
|
|
|
await sqlInit.createInitialDatabase(username, password);
|
2018-03-31 05:07:41 +08:00
|
|
|
}
|
2017-12-04 11:29:23 +08:00
|
|
|
|
2018-07-23 01:56:20 +08:00
|
|
|
async function setupSyncFromServer(req) {
|
|
|
|
const { serverAddress, username, password } = req.body;
|
|
|
|
|
2018-07-24 03:15:32 +08:00
|
|
|
try {
|
|
|
|
log.info("Getting document options from sync server.");
|
2018-07-23 01:56:20 +08:00
|
|
|
|
2018-07-24 03:15:32 +08:00
|
|
|
// response is expected to contain documentId and documentSecret options
|
|
|
|
const options = await rp.get({
|
|
|
|
uri: serverAddress + '/api/sync/document',
|
|
|
|
auth: {
|
|
|
|
'user': username,
|
|
|
|
'pass': password
|
|
|
|
},
|
|
|
|
json: true
|
|
|
|
});
|
2018-07-23 01:56:20 +08:00
|
|
|
|
2018-07-24 03:15:32 +08:00
|
|
|
log.info("Creating database for sync");
|
2018-07-23 01:56:20 +08:00
|
|
|
|
2018-07-24 03:15:32 +08:00
|
|
|
await sql.transactional(async () => {
|
|
|
|
await sqlInit.createDatabaseForSync(serverAddress);
|
2018-07-23 01:56:20 +08:00
|
|
|
|
2018-07-24 03:15:32 +08:00
|
|
|
for (const opt of options) {
|
|
|
|
await new Option(opt).save();
|
|
|
|
}
|
|
|
|
});
|
2018-07-23 01:56:20 +08:00
|
|
|
|
2018-07-24 03:15:32 +08:00
|
|
|
log.info("Triggering sync.");
|
2018-07-23 01:56:20 +08:00
|
|
|
|
2018-07-24 03:15:32 +08:00
|
|
|
// it's ok to not wait for it here
|
|
|
|
syncService.sync();
|
2018-07-23 01:56:20 +08:00
|
|
|
|
2018-07-24 03:15:32 +08:00
|
|
|
return { result: 'success' };
|
|
|
|
}
|
|
|
|
catch (e) {
|
|
|
|
log.error("Sync failed: " + e.message);
|
2018-07-23 01:56:20 +08:00
|
|
|
|
2018-07-24 03:15:32 +08:00
|
|
|
return {
|
|
|
|
result: 'failure',
|
|
|
|
error: e.message
|
|
|
|
};
|
|
|
|
}
|
2018-07-23 01:56:20 +08:00
|
|
|
}
|
|
|
|
|
2018-03-31 05:07:41 +08:00
|
|
|
module.exports = {
|
2018-07-23 01:56:20 +08:00
|
|
|
setupNewDocument,
|
|
|
|
setupSyncFromServer
|
2018-03-31 05:07:41 +08:00
|
|
|
};
|