mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	
		
			
	
	
		
			82 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			82 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(404, "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 | ||
|  | }; |