/* global Cookies */ WebApp.connectHandlers.use('/snippet/download', function(req, res) { let rawCookies; let token; let uid; const cookie = new Cookies(); if (req.headers && req.headers.cookie !== null) { rawCookies = req.headers.cookie; } if (rawCookies !== null) { uid = cookie.get('rc_uid', rawCookies); } if (rawCookies !== null) { token = cookie.get('rc_token', rawCookies); } if (uid === null) { uid = req.query.rc_uid; token = req.query.rc_token; } const user = RocketChat.models.Users.findOneByIdAndLoginToken(uid, token); if (!(uid && token && user)) { res.writeHead(403); res.end(); return false; } const match = /^\/([^\/]+)\/(.*)/.exec(req.url); if (match[1]) { const snippet = RocketChat.models.Messages.findOne( { '_id': match[1], 'snippeted': true } ); const room = RocketChat.models.Rooms.findOne({ '_id': snippet.rid, 'usernames': { '$in': [user.username] }}); if (room === undefined) { res.writeHead(403); res.end(); return false; } res.setHeader('Content-Disposition', `attachment; filename*=UTF-8''${ encodeURIComponent(snippet.snippetName) }`); res.setHeader('Content-Type', 'application/octet-stream'); // Removing the ``` contained in the msg. const snippetContent = snippet.msg.substr(3, snippet.msg.length - 6); res.setHeader('Content-Length', snippetContent.length); res.write(snippetContent); res.end(); return; } res.writeHead(404); res.end(); return; });