mirror of
https://github.com/zadam/trilium.git
synced 2024-11-12 10:44:42 +08:00
113 lines
No EOL
2.8 KiB
JavaScript
113 lines
No EOL
2.8 KiB
JavaScript
const rp = require('request-promise');
|
|
const syncService = require('./sync');
|
|
const log = require('./log');
|
|
const sqlInit = require('./sql_init');
|
|
const repository = require('./repository');
|
|
const optionService = require('./options');
|
|
const syncOptions = require('./sync_options');
|
|
|
|
async function hasSyncServerSchemaAndSeed() {
|
|
const response = await requestToSyncServer('GET', '/api/setup/status');
|
|
|
|
return response.schemaExists;
|
|
}
|
|
|
|
function triggerSync() {
|
|
log.info("Triggering sync.");
|
|
|
|
// it's ok to not wait for it here
|
|
syncService.sync().then(async res => {
|
|
if (res.success) {
|
|
await sqlInit.dbInitialized();
|
|
}
|
|
});
|
|
}
|
|
|
|
async function sendSeedToSyncServer() {
|
|
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);
|
|
}
|
|
|
|
async function requestToSyncServer(method, path, body = null) {
|
|
const rpOpts = {
|
|
uri: await syncOptions.getSyncServerHost() + path,
|
|
method: method,
|
|
json: true
|
|
};
|
|
|
|
if (body) {
|
|
rpOpts.body = body;
|
|
}
|
|
|
|
const syncProxy = await syncOptions.getSyncProxy();
|
|
|
|
if (syncProxy) {
|
|
rpOpts.proxy = syncProxy;
|
|
}
|
|
|
|
return await rp(rpOpts);
|
|
}
|
|
|
|
async function setupSyncFromSyncServer(syncServerHost, syncProxy, username, password) {
|
|
if (await sqlInit.isDbInitialized()) {
|
|
return {
|
|
result: 'failure',
|
|
error: 'DB is already initialized.'
|
|
};
|
|
}
|
|
|
|
try {
|
|
log.info("Getting document options from sync server.");
|
|
|
|
// response is expected to contain documentId and documentSecret options
|
|
const options = await rp.get({
|
|
uri: syncServerHost + '/api/setup/sync-seed',
|
|
auth: {
|
|
'user': username,
|
|
'pass': password
|
|
},
|
|
json: true
|
|
});
|
|
|
|
if (syncProxy) {
|
|
options.proxy = syncProxy;
|
|
}
|
|
|
|
await sqlInit.createDatabaseForSync(options, syncServerHost, syncProxy);
|
|
|
|
triggerSync();
|
|
|
|
return { result: 'success' };
|
|
}
|
|
catch (e) {
|
|
log.error("Sync failed: " + e.message);
|
|
|
|
return {
|
|
result: 'failure',
|
|
error: e.message
|
|
};
|
|
}
|
|
}
|
|
|
|
async function getSyncSeedOptions() {
|
|
return [
|
|
await repository.getOption('documentId'),
|
|
await repository.getOption('documentSecret')
|
|
];
|
|
}
|
|
|
|
module.exports = {
|
|
hasSyncServerSchemaAndSeed,
|
|
triggerSync,
|
|
sendSeedToSyncServer,
|
|
setupSyncFromSyncServer,
|
|
getSyncSeedOptions
|
|
}; |