mirror of
https://github.com/avwo/whistle.git
synced 2026-10-18 22:51:32 +08:00
170 lines
4.4 KiB
JavaScript
170 lines
4.4 KiB
JavaScript
var express = require('express');
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var app = express();
|
|
var util = require('./util');
|
|
var ssi1 = fs.readFileSync(path.join(__dirname, '../assets/files/ssi1.html'), {encoding: 'utf8'});
|
|
var ssi2 = fs.readFileSync(path.join(__dirname, '../assets/files/ssi2.html'), {encoding: 'utf8'});
|
|
var ssi3 = fs.readFileSync(path.join(__dirname, '../assets/files/ssi3.html'), {encoding: 'utf8'});
|
|
|
|
module.exports = function(server, options) {
|
|
util.init(options);
|
|
server.on('request', app);
|
|
app.use(function(req, res, next) {
|
|
req.on('error', next);
|
|
res.on('error', next);
|
|
var fullUrl = util.getFullUrl(req);
|
|
var rules = [];
|
|
|
|
if (/host/.test(fullUrl)) {
|
|
rules.push(req.hostname + ' filter://rule');
|
|
}
|
|
|
|
if (/reqspeed/.test(fullUrl)) {
|
|
rules.push(req.hostname + ' reqSpeed://1');
|
|
}
|
|
|
|
if (/resspeed/.test(fullUrl)) {
|
|
res.end(req.hostname + ' resSpeed://1');
|
|
}
|
|
|
|
if (/xfile/.test(fullUrl)) {
|
|
rules.push(req.hostname + ' xfile://assets/files');
|
|
}
|
|
|
|
if (/file/.test(fullUrl)) {
|
|
rules.push(req.hostname + ' file://assets/files');
|
|
}
|
|
|
|
if (/xtpl/.test(fullUrl)) {
|
|
rules.push(req.hostname + ' xtpl://assets/files');
|
|
}
|
|
|
|
if (/xraw/.test(fullUrl)) {
|
|
rules.push(req.hostname + ' xrawfile://assets/files');
|
|
}
|
|
|
|
if (/referer/.test(fullUrl)) {
|
|
rules.push('/referer/ referer://xxx');
|
|
}
|
|
|
|
if (/reqtype/.test(fullUrl)) {
|
|
rules.push('/reqtype/ reqType://text');
|
|
}
|
|
|
|
if (/restype/.test(fullUrl)) {
|
|
rules.push('/restype/ resType://html');
|
|
}
|
|
|
|
if (/reqcookies/.test(fullUrl)) {
|
|
rules.push('/reqcookies/ reqCookies://assets/values/reqCookies.json');
|
|
}
|
|
|
|
if (/rescookies/.test(fullUrl)) {
|
|
rules.push('/rescookies/ resCookies://assets/values/resCookies.json');
|
|
}
|
|
|
|
if (/reqprepend/.test(fullUrl)) {
|
|
rules.push('/reqprepend/ reqPrepend://assets/files/prepend.txt');
|
|
}
|
|
|
|
if (/resprepend/.test(fullUrl)) {
|
|
rules.push('/resprepend/ resPrepend://assets/files/prepend.txt');
|
|
}
|
|
|
|
if (/urlparams/.test(fullUrl)) {
|
|
rules.push('/urlparams/ urlParams://assets/values/urlParams.json');
|
|
}
|
|
|
|
if (/params/.test(fullUrl)) {
|
|
rules.push('/params/ params://assets/values/urlParams.json');
|
|
}
|
|
|
|
if (/reqwriteraw/.test(fullUrl)) {
|
|
rules.push(req.hostname + ' reqWriteRaw://assets/write/req/raw');
|
|
}
|
|
|
|
if (/reqwrite/.test(fullUrl)) {
|
|
rules.push(req.hostname + ' reqWrite://assets/write/req/body');
|
|
}
|
|
|
|
if (/exportsurl/.test(fullUrl)) {
|
|
rules.push(req.hostname + ' exportsUrl://assets/write/exportsUrl.txt');
|
|
}
|
|
|
|
if (/exports/.test(fullUrl)) {
|
|
rules.push(req.hostname + ' exports://assets/write/exports.txt');
|
|
}
|
|
|
|
if (/ws1/.test(fullUrl)) {
|
|
rules.push('/ws1/ host://127.0.0.1:9999');
|
|
}
|
|
|
|
if (/mp1.w2.org/.test(fullUrl)) {
|
|
rules.push('/./ host://127.0.0.1:8080');
|
|
}
|
|
|
|
if (/values1.avenwu.com/.test(fullUrl)) {
|
|
return res.end(JSON.stringify({
|
|
rules: '/./ file://{test} reqHeaders://{reqHeaders} resHeaders://{resHeaders}',
|
|
values: {
|
|
test: {
|
|
abc: 123
|
|
},
|
|
reqHeaders: {
|
|
'x-req-test': 'req'
|
|
},
|
|
resHeaders: {
|
|
'x-res-test': 'res'
|
|
}
|
|
}
|
|
}));
|
|
}
|
|
|
|
if (/values2.test.com/.test(fullUrl)) {
|
|
return res.end(JSON.stringify({
|
|
rules: '/./ reqHeaders://{reqHeaders} resHeaders://{resHeaders} reqReplace://{reqReplace}',
|
|
values: {
|
|
test: {
|
|
abc: 123
|
|
},
|
|
reqHeaders: {
|
|
'x-req-test': 'req'
|
|
},
|
|
resHeaders: {
|
|
'x-res-test': 'res'
|
|
},
|
|
reqReplace: {
|
|
ssi1: ssi1,
|
|
ssi2: ssi2,
|
|
'/ssi3/': ssi3
|
|
}
|
|
}
|
|
}));
|
|
}
|
|
|
|
if (/ssi-include.whistlejs.com/.test(fullUrl)) {
|
|
return res.end(JSON.stringify({
|
|
rules: '/./ resReplace://{resReplace}',
|
|
values: {
|
|
resReplace: {
|
|
'#include(\'assets/files/ssi2.html\')': ssi2,
|
|
'#include(\'assets/files/ssi3.html\')': ssi3,
|
|
'/#include\\((([\'\"])?([^\\s]+)\\2)\\)/': ssi1
|
|
}
|
|
}
|
|
}));
|
|
}
|
|
|
|
var nextRule = util.getNextRule(req);
|
|
if (nextRule) {
|
|
rules.push(nextRule);
|
|
}
|
|
|
|
res.end(rules.join('\n'));
|
|
});
|
|
|
|
app.use(function(err, req, res, next) {
|
|
res.sendStatus(500);
|
|
});
|
|
}; |