| 
									
										
										
										
											2018-02-14 23:31:20 -05:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const express = require('express'); | 
					
						
							|  |  |  | const router = express.Router(); | 
					
						
							|  |  |  | const sql = require('../../services/sql'); | 
					
						
							|  |  |  | const auth = require('../../services/auth'); | 
					
						
							|  |  |  | const notes = require('../../services/notes'); | 
					
						
							| 
									
										
										
										
											2018-03-24 22:02:26 -04:00
										 |  |  | const labels = require('../../services/labels'); | 
					
						
							| 
									
										
										
										
											2018-02-23 22:58:24 -05:00
										 |  |  | const protected_session = require('../../services/protected_session'); | 
					
						
							| 
									
										
										
										
											2018-02-14 23:31:20 -05:00
										 |  |  | const multer = require('multer')(); | 
					
						
							|  |  |  | const wrap = require('express-promise-wrap').wrap; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | router.post('/upload/:parentNoteId', auth.checkApiAuthOrElectron, multer.single('upload'), wrap(async (req, res, next) => { | 
					
						
							|  |  |  |     const sourceId = req.headers.source_id; | 
					
						
							|  |  |  |     const parentNoteId = req.params.parentNoteId; | 
					
						
							|  |  |  |     const file = req.file; | 
					
						
							| 
									
										
										
										
											2018-02-18 21:28:24 -05:00
										 |  |  |     const originalName = file.originalname; | 
					
						
							|  |  |  |     const size = file.size; | 
					
						
							| 
									
										
										
										
											2018-02-14 23:31:20 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     const note = await sql.getRow("SELECT * FROM notes WHERE noteId = ?", [parentNoteId]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!note) { | 
					
						
							|  |  |  |         return res.status(404).send(`Note ${parentNoteId} doesn't exist.`); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-18 21:28:24 -05:00
										 |  |  |     await sql.doInTransaction(async () => { | 
					
						
							|  |  |  |         const noteId = (await notes.createNewNote(parentNoteId, { | 
					
						
							|  |  |  |             title: originalName, | 
					
						
							|  |  |  |             content: file.buffer, | 
					
						
							|  |  |  |             target: 'into', | 
					
						
							|  |  |  |             isProtected: false, | 
					
						
							|  |  |  |             type: 'file', | 
					
						
							|  |  |  |             mime: file.mimetype | 
					
						
							|  |  |  |         }, req, sourceId)).noteId; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-24 22:02:26 -04:00
										 |  |  |         await labels.createLabel(noteId, "original_file_name", originalName, sourceId); | 
					
						
							|  |  |  |         await labels.createLabel(noteId, "file_size", size, sourceId); | 
					
						
							| 
									
										
										
										
											2018-02-18 21:28:24 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         res.send({ | 
					
						
							|  |  |  |             noteId: noteId | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2018-02-14 23:31:20 -05:00
										 |  |  |     }); | 
					
						
							|  |  |  | })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-18 21:28:24 -05:00
										 |  |  | router.get('/download/:noteId', auth.checkApiAuthOrElectron, wrap(async (req, res, next) => { | 
					
						
							|  |  |  |     const noteId = req.params.noteId; | 
					
						
							|  |  |  |     const note = await sql.getRow("SELECT * FROM notes WHERE noteId = ?", [noteId]); | 
					
						
							| 
									
										
										
										
											2018-02-23 22:58:24 -05:00
										 |  |  |     const protectedSessionId = req.query.protectedSessionId; | 
					
						
							| 
									
										
										
										
											2018-02-18 21:28:24 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (!note) { | 
					
						
							| 
									
										
										
										
											2018-02-23 22:58:24 -05:00
										 |  |  |         return res.status(404).send(`Note ${noteId} doesn't exist.`); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (note.isProtected) { | 
					
						
							|  |  |  |         const dataKey = protected_session.getDataKeyForProtectedSessionId(protectedSessionId); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!dataKey) { | 
					
						
							|  |  |  |             res.status(401).send("Protected session not available"); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         protected_session.decryptNote(dataKey, note); | 
					
						
							| 
									
										
										
										
											2018-02-18 21:28:24 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-24 22:02:26 -04:00
										 |  |  |     const labelMap = await labels.getNoteLabelMap(noteId); | 
					
						
							|  |  |  |     const fileName = labelMap.original_file_name ? labelMap.original_file_name : note.title; | 
					
						
							| 
									
										
										
										
											2018-02-18 21:28:24 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-27 22:11:06 -04:00
										 |  |  |     res.setHeader('Content-Disposition', 'file; filename=' + fileName); | 
					
						
							| 
									
										
										
										
											2018-02-18 21:28:24 -05:00
										 |  |  |     res.setHeader('Content-Type', note.mime); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     res.send(note.content); | 
					
						
							|  |  |  | })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-14 23:31:20 -05:00
										 |  |  | module.exports = router; |