const uuidV4 = require('uuid/v4'); const jwt = require('jsonwebtoken'); // Loki DB // TODO: Make this persistant. Right now the DB is lost every time the server reboots const loki = require('lokijs'); const sharedb = new loki('share.db').addCollection('playlists'); exports.setupBeforeSecurity = function(mstream, program){ // Get files mstream.post('/shared/get-token-and-playlist', function(req, res){ if(!req.body.tokenid){ res.status(500).json({'Error':'Please Supply Token'}); return; } // Get uuid const tokenID = req.body.tokenid; // TODO: Handle document not found // TODO: Handle past experation date var playlistItem = sharedb.findOne({'playlist_id': tokenID}); // verifies secret and checks exp jwt.verify(playlistItem.token, program.secret, function(err, decoded) { if (err) { return res.redirect('/access-denied'); } // return res.json({ token: playlistItem.token, playlist: decoded.allowedFiles }); }); }); } exports.setupAfterSecurity = function(mstream, program){ // Setup shared mstream.post('/shared/make-shared', function(req, res){ // get files from POST request var shareTimeInDays = req.body.time; var playlist = req.body.playlist; // TODO: Verify Share Time if(!shareTimeInDays){ shareTimeInDays = 14; } // Setup Token Data var tokenData = { allowedFiles: playlist, shareToken: true, username: req.user.username } // var sharedItem = { "playlist_id": uuidV4(), "token": jwt.sign( tokenData , program.secret, { expiresIn: shareTimeInDays +'d' } ), "experiationdate":"TODO:" }; // Save to DB sharedb.insert(sharedItem); // Retun Token and ID res.json(sharedItem); }); }