whistle
Version:
HTTP, HTTPS, Websocket debugging proxy
58 lines (54 loc) • 1.75 kB
JavaScript
var express = require('express');
var bodyParser = require('body-parser');
var multer = require('multer');
var util = require('./util');
var extractSaz = require('./extract-saz');
var generateSaz = require('./generate-saz');
var getServer = require('../util/get-server');
var LIMIT_SIZE = 1024 * 1024 * 66;
var storage = multer.memoryStorage();
var upload = multer({
storage: storage,
fieldSize: LIMIT_SIZE
});
function sessionsHandler() {
var app = express();
app.use(function(req, res, next) {
req.on('error', abort);
res.on('error', abort);
function abort() {
res.destroy();
}
next();
});
app.use('/cgi-bin/sessions/import', upload.single('importSessions'), function(req, res) {
var file = req.file;
if (!file || !/\.(txt|saz)$/i.test(file.originalname) || !Buffer.isBuffer(file.buffer)) {
return res.json([]);
}
if (/\.txt$/i.test(file.originalname)) {
var sessions = util.parseJSON(file.buffer + '');
return res.json(Array.isArray(sessions) ? sessions : []);
}
try {
extractSaz(file.buffer, res.json.bind(res));
} catch(e) {
res.status(500).send(e.stack);
}
});
app.use(bodyParser.urlencoded({ extended: true, limit: LIMIT_SIZE}));
app.use(bodyParser.json());
app.use('/cgi-bin/sessions/export', function(req, res) {
var body = req.body;
var type = body.exportFileType;
var sessions = type === 'Fiddler' ? generateSaz(body) : body.sessions;
res.attachment(util.getFilename(type)).send(sessions);
});
return app;
}
module.exports = function(options, callback) {
getServer(function(server, port) {
server.on('request', sessionsHandler());
callback(null, { port: port });
}, options.servicePort);
};