changes for script execution (parameters etc.)

This commit is contained in:
azivner 2018-01-26 23:40:48 -05:00
parent 5981b9bc7b
commit 005480059a
5 changed files with 53 additions and 10 deletions

View file

@ -29,12 +29,12 @@ const server = (function() {
return await call('DELETE', url); return await call('DELETE', url);
} }
async function exec(script) { async function exec(script, params = []) {
if (typeof script === "function") { if (typeof script === "function") {
script = script.toString(); script = script.toString();
} }
return await post('script/exec', { script: script }); return await post('script/exec', { script: script, params: params });
} }
let i = 1; let i = 1;

View file

@ -4,18 +4,14 @@ const express = require('express');
const router = express.Router(); const router = express.Router();
const auth = require('../../services/auth'); const auth = require('../../services/auth');
const wrap = require('express-promise-wrap').wrap; const wrap = require('express-promise-wrap').wrap;
const log = require('../../services/log');
const sql = require('../../services/sql'); const sql = require('../../services/sql');
const notes = require('../../services/notes'); const notes = require('../../services/notes');
const protected_session = require('../../services/protected_session'); const protected_session = require('../../services/protected_session');
const attributes = require('../../services/attributes'); const attributes = require('../../services/attributes');
const script = require('../../services/script');
router.post('/exec', auth.checkApiAuth, wrap(async (req, res, next) => { router.post('/exec', auth.checkApiAuth, wrap(async (req, res, next) => {
log.info('Executing script: ' + req.body.script); const ret = await script.executeScript(req, req.body.script, req.body.params);
const ret = await eval("(" + req.body.script + ")()");
log.info('Execution result: ' + ret);
res.send(ret); res.send(ret);
})); }));

View file

@ -3,16 +3,30 @@
const sql = require('./sql'); const sql = require('./sql');
const utils = require('./utils'); const utils = require('./utils');
const sync_table = require('./sync_table'); const sync_table = require('./sync_table');
const protected_session = require('./protected_session');
async function getNoteAttributeMap(noteId) { async function getNoteAttributeMap(noteId) {
return await sql.getMap(`SELECT name, value FROM attributes WHERE note_id = ?`, [noteId]); return await sql.getMap(`SELECT name, value FROM attributes WHERE note_id = ?`, [noteId]);
} }
async function getNoteIdWithAttribute(name, value) { async function getNoteIdWithAttribute(name, value) {
return await sql.getFirstValue(`SELECT DISTINCT notes.note_id FROM notes JOIN attributes USING(note_id) return await sql.getFirstValue(`SELECT notes.note_id FROM notes JOIN attributes USING(note_id)
WHERE notes.is_deleted = 0 AND attributes.name = ? AND attributes.value = ?`, [name, value]); WHERE notes.is_deleted = 0 AND attributes.name = ? AND attributes.value = ?`, [name, value]);
} }
async function getNoteWithAttribute(dataKey, name, value) {
const note = await sql.getFirst(`SELECT notes.* FROM notes JOIN attributes USING(note_id)
WHERE notes.is_deleted = 0 AND attributes.name = ? AND attributes.value = ?`, [name, value]);
if (!note) {
return note;
}
protected_session.decryptNote(dataKey, note);
return note;
}
async function getNoteIdsWithAttribute(name) { async function getNoteIdsWithAttribute(name) {
return await sql.getFirstColumn(`SELECT DISTINCT notes.note_id FROM notes JOIN attributes USING(note_id) return await sql.getFirstColumn(`SELECT DISTINCT notes.note_id FROM notes JOIN attributes USING(note_id)
WHERE notes.is_deleted = 0 AND attributes.name = ?`, [name]); WHERE notes.is_deleted = 0 AND attributes.name = ?`, [name]);
@ -37,6 +51,7 @@ async function createAttribute(noteId, name, value = null, sourceId = null) {
module.exports = { module.exports = {
getNoteAttributeMap, getNoteAttributeMap,
getNoteIdWithAttribute, getNoteIdWithAttribute,
getNoteWithAttribute,
getNoteIdsWithAttribute, getNoteIdsWithAttribute,
createAttribute createAttribute
}; };

View file

@ -81,7 +81,11 @@ async function getMonthNoteId(dateTimeStr, rootNoteId) {
return monthNoteId; return monthNoteId;
} }
async function getDateNoteId(dateTimeStr, rootNoteId) { async function getDateNoteId(dateTimeStr, rootNoteId = null) {
if (!rootNoteId) {
rootNoteId = await getRootNoteId();
}
const dateStr = dateTimeStr.substr(0, 10); const dateStr = dateTimeStr.substr(0, 10);
const dayNumber = dateTimeStr.substr(8, 2); const dayNumber = dateTimeStr.substr(8, 2);

28
services/script.js Normal file
View file

@ -0,0 +1,28 @@
const log = require('./log');
const protected_session = require('./protected_session');
async function executeScript(dataKey, script, params) {
log.info('Executing script: ' + script);
const ctx = {
dataKey: protected_session.getDataKey(dataKey)
};
params.unshift(ctx);
const paramsStr = getParams(params);
const ret = await eval(`(${script})(${paramsStr})`);
log.info('Execution result: ' + ret);
return ret;
}
function getParams(params) {
return params.map(p => JSON.stringify(p)).join(",");
}
module.exports = {
executeScript
};