From 61afce46ed888ef4411d759f9d49315925f3ca9a Mon Sep 17 00:00:00 2001 From: Zach Rispoli Date: Thu, 1 Jun 2017 00:08:11 -0400 Subject: [PATCH] Server can serve individual assets from projects (fixes #212, fixes #219) --- server/controllers/project.controller.js | 26 ++++++++++++++++++++++++ server/routes/server.routes.js | 5 +++++ 2 files changed, 31 insertions(+) diff --git a/server/controllers/project.controller.js b/server/controllers/project.controller.js index 84b2afa1..9dae16b5 100644 --- a/server/controllers/project.controller.js +++ b/server/controllers/project.controller.js @@ -123,6 +123,32 @@ export function deleteProject(req, res) { }); } +export function getProjectAsset(req, res) { + Project.findById(req.params.project_id) + .populate('user', 'username') + .exec((err, project) => { + if (err) { + return res.status(404).send({ message: 'Project with that id does not exist' }); + } + + var assetURL = null; + var seekFilename = req.params.asset_path; + project.files.forEach((file) => { + if(file.name === seekFilename) { + assetURL = file.url; + } + }); + + if(!assetURL) { + return res.status(404).send({ message: 'Asset does not exist' }); + } else { + request({ method: 'GET', url: assetURL, encoding: null }, (err, response, body) => { + res.send(body); + }); + } + }); +} + export function getProjects(req, res) { if (req.user) { Project.find({ user: req.user._id }) // eslint-disable-line no-underscore-dangle diff --git a/server/routes/server.routes.js b/server/routes/server.routes.js index 1b69dbda..d4f9f6cb 100644 --- a/server/routes/server.routes.js +++ b/server/routes/server.routes.js @@ -2,6 +2,7 @@ import { Router } from 'express'; import { renderIndex } from '../views/index'; import { get404Sketch } from '../views/404Page'; import { userExists } from '../controllers/user.controller'; +import { getProjectAsset } from '../controllers/project.controller'; const router = new Router(); @@ -24,6 +25,10 @@ router.route('/:username/sketches/:project_id').get((req, res) => { res.send(renderIndex()); }); +router.route('/:username/sketches/:project_id/:asset_path').get((req, res) => { + getProjectAsset(req,res); +}); + // router.route('/full/:project_id').get((req, res) => { // res.send(renderIndex()); // });