Files
2022-03-02 22:04:14 +08:00

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);
});
};