mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
83 lines
2.5 KiB
JavaScript
83 lines
2.5 KiB
JavaScript
const becca = require("../becca/becca");
|
|
const utils = require("../services/utils");
|
|
const ru = require("./route_utils");
|
|
const mappers = require("./mappers");
|
|
const noteService = require("../services/notes");
|
|
const TaskContext = require("../services/task_context");
|
|
const validators = require("./validators");
|
|
|
|
function register(router) {
|
|
ru.route(router, 'get', '/etapi/notes/:noteId', (req, res, next) => {
|
|
const note = ru.getAndCheckNote(req.params.noteId);
|
|
|
|
res.json(mappers.mapNoteToPojo(note));
|
|
});
|
|
|
|
ru.route(router, 'get', '/etapi/notes/:noteId/content', (req, res, next) => {
|
|
const note = ru.getAndCheckNote(req.params.noteId);
|
|
|
|
const filename = utils.formatDownloadTitle(note.title, note.type, note.mime);
|
|
|
|
res.setHeader('Content-Disposition', utils.getContentDisposition(filename));
|
|
|
|
res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
|
res.setHeader('Content-Type', note.mime);
|
|
|
|
res.send(note.getContent());
|
|
});
|
|
|
|
ru.route(router, 'post' ,'/etapi/create-note', (req, res, next) => {
|
|
const params = req.body;
|
|
|
|
ru.getAndCheckNote(params.parentNoteId);
|
|
|
|
try {
|
|
const resp = noteService.createNewNote(params);
|
|
|
|
res.json({
|
|
note: mappers.mapNoteToPojo(resp.note),
|
|
branch: mappers.mapBranchToPojo(resp.branch)
|
|
});
|
|
}
|
|
catch (e) {
|
|
return ru.sendError(res, 400, ru.GENERIC_CODE, e.message);
|
|
}
|
|
});
|
|
|
|
const ALLOWED_PROPERTIES_FOR_PATCH = {
|
|
'title': validators.isString,
|
|
'type': validators.isString,
|
|
'mime': validators.isString
|
|
};
|
|
|
|
ru.route(router, 'patch' ,'/etapi/notes/:noteId', (req, res, next) => {
|
|
const note = ru.getAndCheckNote(req.params.noteId)
|
|
|
|
if (note.isProtected) {
|
|
throw new ru.EtapiError(400, "NOTE_IS_PROTECTED", `Note '${req.params.noteId}' is protected and cannot be modified through ETAPI`);
|
|
}
|
|
|
|
ru.validateAndPatch(note, req.body, ALLOWED_PROPERTIES_FOR_PATCH);
|
|
|
|
res.json(mappers.mapNoteToPojo(note));
|
|
});
|
|
|
|
ru.route(router, 'delete' ,'/etapi/notes/:noteId', (req, res, next) => {
|
|
const {noteId} = req.params;
|
|
|
|
const note = becca.getNote(noteId);
|
|
|
|
if (!note) {
|
|
return res.sendStatus(204);
|
|
}
|
|
|
|
noteService.deleteNote(note, null, new TaskContext('no-progress-reporting'));
|
|
|
|
res.sendStatus(204);
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
register
|
|
};
|