const config = require('../../config'); const express = require('express'); const jwt = require('jsonwebtoken'); function checkAuthorization(req, res, onVerified) { if (!req.headers.authorization || req.headers.authorization.split(' ')[0] !== 'Bearer') { res.sendStatus(400); return; } var token = req.headers.authorization.split(' ')[1]; jwt.verify(token, config.jwtSecret, (err, decoded) => { if (err) { res.sendStatus(403); return; } onVerified(decoded); }); } module.exports = (app, repository) => { // Upload API app.post('/complete', (req, res) => { if (!req.body.files) { res.sendStatus(400); return; } checkAuthorization(req, res, async (decoded) => { var expiration = null; // TODO set expiration properties var uploadId = await repository.uploads.addUpload(decoded.userId, req.body.files, expiration); res.send({ id: uploadId }); }); }); // Tus upload const uploadApp = express(); uploadApp.all('*', (req, res) => { checkAuthorization(req, res, (decoded) => { tusServer.handle(req, res); }); }); app.use('/upload', uploadApp); }