60 lines
1.2 KiB
JavaScript
60 lines
1.2 KiB
JavaScript
|
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);
|
||
|
}
|