feat: implement download for public and private track data independently (public CSV is obsver1 for now)

This commit is contained in:
Paul Bienkowski 2021-01-19 13:46:28 +01:00 committed by uwewoessner
parent a4c8e7ede9
commit 4a119a0fc9

View file

@ -6,7 +6,7 @@ const Comment = mongoose.model('Comment');
const User = mongoose.model('User'); const User = mongoose.model('User');
const busboy = require('connect-busboy'); const busboy = require('connect-busboy');
const auth = require('../auth'); const auth = require('../auth');
const { normalizeUserAgent } = require('../../logic/tracks'); const { normalizeUserAgent, buildObsver1 } = require('../../logic/tracks');
const wrapRoute = require('../../_helpers/wrapRoute'); const wrapRoute = require('../../_helpers/wrapRoute');
function preloadByParam(target, getValueFromParam) { function preloadByParam(target, getValueFromParam) {
@ -364,11 +364,26 @@ router.get(
'/:track/download', '/:track/download',
auth.optional, auth.optional,
wrapRoute(async (req, res) => { wrapRoute(async (req, res) => {
if (!req.track.isVisibleTo(req.user)) { if (req.track.isVisibleToPrivate(req.user)) {
return res.download(req.track.fullOriginalFilePath)
} else if (req.track.isVisibleTo(req.user)) {
await req.track.populate('publicTrackData').execPopulate()
if (!req.track.publicTrackData) {
return res.sendStatus(403); return res.sendStatus(403);
} }
return res.download(req.track.fullOriginalFilePath) const body = buildObsver1(req.track.publicTrackData.points)
const fileName = req.track.slug + '_public.csv'
res.set({
'Content-Disposition': 'attachment; filename=' + JSON.stringify(fileName),
'Content-Type': 'text/csv',
});
return res.end(body)
} else {
return res.sendStatus(403);
}
}), }),
); );