converted settings, note revisions, password change and recent changes routes

This commit is contained in:
azivner 2018-03-30 13:56:46 -04:00
parent 8550ed72f2
commit 9edee9340b
8 changed files with 61 additions and 92 deletions

View File

@ -25,7 +25,7 @@ async function showNoteRevisionsDialog(noteId, noteRevisionId) {
$list.empty(); $list.empty();
$content.empty(); $content.empty();
revisionItems = await server.get('notes-revisions/' + noteId); revisionItems = await server.get('note-revisions/' + noteId);
for (const item of revisionItems) { for (const item of revisionItems) {
const dateModified = utils.parseDate(item.dateModifiedFrom); const dateModified = utils.parseDate(item.dateModifiedFrom);

View File

@ -105,7 +105,7 @@ addTabHandler((function() {
$form.submit(() => { $form.submit(() => {
const protectedSessionTimeout = $protectedSessionTimeout.val(); const protectedSessionTimeout = $protectedSessionTimeout.val();
settings.saveSettings(settingName, protectedSessionTimeout).then(() => { saveSettings(settingName, protectedSessionTimeout).then(() => {
protectedSessionHolder.setProtectedSessionTimeout(protectedSessionTimeout); protectedSessionHolder.setProtectedSessionTimeout(protectedSessionTimeout);
}); });
@ -127,7 +127,7 @@ addTabHandler((function () {
} }
$form.submit(() => { $form.submit(() => {
settings.saveSettings(settingName, $timeInterval.val()); saveSettings(settingName, $timeInterval.val());
return false; return false;
}); });

View File

@ -1,31 +1,16 @@
"use strict"; "use strict";
const express = require('express');
const router = express.Router();
const sql = require('../../services/sql'); const sql = require('../../services/sql');
const auth = require('../../services/auth');
const protected_session = require('../../services/protected_session'); const protected_session = require('../../services/protected_session');
const sync_table = require('../../services/sync_table');
const wrap = require('express-promise-wrap').wrap;
router.get('/:noteId', auth.checkApiAuth, wrap(async (req, res, next) => { async function getNoteRevisions(req) {
const noteId = req.params.noteId; const noteId = req.params.noteId;
const revisions = await sql.getRows("SELECT * FROM note_revisions WHERE noteId = ? order by dateModifiedTo desc", [noteId]); const revisions = await sql.getRows("SELECT * FROM note_revisions WHERE noteId = ? order by dateModifiedTo desc", [noteId]);
protected_session.decryptNoteRevisions(req, revisions); protected_session.decryptNoteRevisions(req, revisions);
res.send(revisions); return revisions;
})); }
router.put('', auth.checkApiAuth, wrap(async (req, res, next) => { module.exports = {
const sourceId = req.headers.source_id; getNoteRevisions
};
await sql.doInTransaction(async () => {
await sql.replace("note_revisions", req.body);
await sync_table.addNoteRevisionSync(req.body.noteRevisionId, sourceId);
});
res.send();
}));
module.exports = router;

View File

@ -1,16 +1,11 @@
"use strict"; "use strict";
const express = require('express'); const changePasswordService = require('../../services/change_password');
const router = express.Router();
const sql = require('../../services/sql');
const changePassword = require('../../services/change_password');
const auth = require('../../services/auth');
const wrap = require('express-promise-wrap').wrap;
router.post('/change', auth.checkApiAuth, wrap(async (req, res, next) => { async function changePassword(req) {
const result = await changePassword.changePassword(req.body['current_password'], req.body['new_password'], req); return await changePasswordService.changePassword(req.body['current_password'], req.body['new_password'], req);
}
res.send(result); module.exports = {
})); changePassword
};
module.exports = router;

View File

@ -1,12 +1,8 @@
"use strict"; "use strict";
const express = require('express');
const router = express.Router();
const sql = require('../../services/sql'); const sql = require('../../services/sql');
const auth = require('../../services/auth');
const wrap = require('express-promise-wrap').wrap;
router.get('/', auth.checkApiAuth, wrap(async (req, res, next) => { async function getRecentChanges() {
const recentChanges = await sql.getRows( const recentChanges = await sql.getRows(
`SELECT `SELECT
notes.isDeleted AS current_isDeleted, notes.isDeleted AS current_isDeleted,
@ -19,7 +15,9 @@ router.get('/', auth.checkApiAuth, wrap(async (req, res, next) => {
dateModifiedTo DESC dateModifiedTo DESC
LIMIT 1000`); LIMIT 1000`);
res.send(recentChanges); return recentChanges;
})); }
module.exports = router; module.exports = {
getRecentChanges
};

View File

@ -1,44 +1,35 @@
"use strict"; "use strict";
const express = require('express');
const router = express.Router();
const sql = require('../../services/sql'); const sql = require('../../services/sql');
const options = require('../../services/options'); const options = require('../../services/options');
const auth = require('../../services/auth');
const wrap = require('express-promise-wrap').wrap;
// options allowed to be updated directly in settings dialog // options allowed to be updated directly in settings dialog
const ALLOWED_OPTIONS = ['protected_session_timeout', 'note_revision_snapshot_time_interval']; const ALLOWED_OPTIONS = ['protected_session_timeout', 'note_revision_snapshot_time_interval'];
router.get('/all', auth.checkApiAuth, wrap(async (req, res, next) => { async function getAllSettings() {
const settings = await sql.getMap("SELECT name, value FROM options"); return await sql.getMap("SELECT name, value FROM options");
}
res.send(settings); async function getAllowedSettings() {
}));
router.get('/', auth.checkApiAuth, wrap(async (req, res, next) => {
const settings = await sql.getMap("SELECT name, value FROM options WHERE name IN (" const settings = await sql.getMap("SELECT name, value FROM options WHERE name IN ("
+ ALLOWED_OPTIONS.map(x => '?').join(",") + ")", ALLOWED_OPTIONS); + ALLOWED_OPTIONS.map(x => '?').join(",") + ")", ALLOWED_OPTIONS);
res.send(settings); return settings;
})); }
router.post('/', auth.checkApiAuth, wrap(async (req, res, next) => { async function updateSetting(req) {
const body = req.body; const body = req.body;
const sourceId = req.headers.source_id; const sourceId = req.headers.source_id;
if (ALLOWED_OPTIONS.includes(body['name'])) { if (!ALLOWED_OPTIONS.includes(body['name'])) {
const optionName = await options.getOption(body['name']); return [400, "not allowed option to set"];
}
await sql.doInTransaction(async () => {
await options.setOption(body['name'], body['value'], sourceId); await options.setOption(body['name'], body['value'], sourceId);
}); }
res.send({}); module.exports = {
} getAllowedSettings,
else { getAllSettings,
res.send("not allowed option to set"); updateSetting
} };
}));
module.exports = router;

View File

@ -61,13 +61,17 @@ function apiRoute(method, path, handler) {
} }
} }
else if (result === undefined) { else if (result === undefined) {
res.status(200); res.status(200).send();
} }
else { else {
res.status(200).send(result); res.status(200).send(result);
} }
} }
catch (e) { catch (e) {
log.info(`${method} ${path} threw exception: ` + e.stack);
res.send(500);
next(e); next(e);
} }
}); });
@ -106,11 +110,16 @@ function register(app) {
apiRoute(GET, '/api/labels/names', labelsRoute.getAllLabelNames); apiRoute(GET, '/api/labels/names', labelsRoute.getAllLabelNames);
apiRoute(GET, '/api/labels/values/:labelName', labelsRoute.getValuesForLabel); apiRoute(GET, '/api/labels/values/:labelName', labelsRoute.getValuesForLabel);
app.use('/api/notes-revisions', noteRevisionsApiRoute); apiRoute(GET, '/api/note-revisions/:noteId', noteRevisionsApiRoute.getNoteRevisions);
app.use('/api/recent-changes', recentChangesApiRoute);
app.use('/api/settings', settingsApiRoute); apiRoute(GET, '/api/recent-changes', recentChangesApiRoute.getRecentChanges);
app.use('/api/password', passwordApiRoute);
app.use('/api/migration', migrationApiRoute); apiRoute(GET, '/api/settings', settingsApiRoute.getAllowedSettings);
apiRoute(GET, '/api/settings/all', settingsApiRoute.getAllSettings);
apiRoute(POST, '/api/settings', settingsApiRoute.updateSetting);
apiRoute(POST, '/api/password/change', passwordApiRoute.changePassword);
app.use('/api/sync', syncApiRoute); app.use('/api/sync', syncApiRoute);
app.use('/api/login', loginApiRoute); app.use('/api/login', loginApiRoute);
app.use('/api/event-log', eventLogRoute); app.use('/api/event-log', eventLogRoute);
@ -127,7 +136,11 @@ function register(app) {
app.use('/api/sender', senderRoute); app.use('/api/sender', senderRoute);
app.use('/api/files', filesRoute); app.use('/api/files', filesRoute);
app.use('/api/search', searchRoute); app.use('/api/search', searchRoute);
app.use('', router); app.use('', router);
app.use('/api/migration', migrationApiRoute);
} }
module.exports = { module.exports = {

View File

@ -23,14 +23,7 @@ async function getOption(name) {
} }
async function setOption(name, value, sourceId = null) { async function setOption(name, value, sourceId = null) {
let opt; const opt = await sql.getRow("SELECT * FROM options WHERE name = ?", [name]);
try {
opt = await sql.getRow("SELECT * FROM options WHERE name = ?", [name]);
}
catch (e) {
opt = await sql.getRow("SELECT * FROM options WHERE opt_name = ?", [name]);
}
if (!opt) { if (!opt) {
throw new Error(`Option ${name} doesn't exist`); throw new Error(`Option ${name} doesn't exist`);
@ -40,14 +33,8 @@ async function setOption(name, value, sourceId = null) {
await sync_table.addOptionsSync(name, sourceId); await sync_table.addOptionsSync(name, sourceId);
} }
try {
await sql.execute("UPDATE options SET value = ?, dateModified = ? WHERE name = ?", await sql.execute("UPDATE options SET value = ?, dateModified = ? WHERE name = ?",
[value, utils.nowDate(), name]); [value, utils.nowDate(), name]);
}
catch (e) {
await sql.execute("UPDATE options SET opt_value = ?, date_modified = ? WHERE opt_name = ?",
[value, utils.nowDate(), name]);
}
} }
async function createOption(name, value, isSynced, sourceId = null) { async function createOption(name, value, isSynced, sourceId = null) {