add support for all ports

This commit is contained in:
加里 2014-09-18 13:36:27 +08:00
parent e6da97a098
commit f5448677ac
7 changed files with 50 additions and 17 deletions

View File

@ -220,10 +220,13 @@ var proxy = require("anyproxy");
!proxy.isRootCAFileExists() && proxy.generateRootCA();
var options = {
type : "http",
port : "8001",
hostname : "localhost",
rule : require("path/to/my/ruleModule.js")
type : "http",
port : 8001,
hostname : "localhost",
rule : require("path/to/my/ruleModule.js"),
webPort : 8002, // port for web interface
socketPort : 8003, // internal port for web socket, replace this when it is conflict with your own service
webConfigPort : 8080 // internal port for web config(beta), replace this when it is conflict with your own service
};
new proxy.proxyServer(options);

View File

@ -41,6 +41,7 @@ module.exports = {
},
replaceServerResData: function(req,res,serverResData){
return serverResData;
},
pauseBeforeSendingResponse : function(req,res){

View File

@ -22,3 +22,10 @@ module.exports.getUserHome = function(){
return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
module.exports.simpleRender = function(str, object, regexp){
return String(str).replace(regexp || (/\{\{([^{}]+)\}\}/g), function(match, name){
if (match.charAt(0) == '\\') return match.slice(1);
return (object[name] != null) ? object[name] : '';
});
}

View File

@ -1,6 +1,6 @@
{
"name": "anyproxy",
"version": "2.4.2",
"version": "2.4.3",
"description": "A fully configurable proxy in NodeJS, which can handle HTTPS requests perfectly.",
"main": "proxy.js",
"bin": {

View File

@ -54,8 +54,11 @@ if(fs.existsSync(process.cwd() + '/rule.js')){
//option
//option.type : 'http'(default) or 'https'
//option.port : 8001(default)
//option.rule : ruleModule
//option.hostname : localhost(default)
//option.rule : ruleModule
//option.webPort : 8002(default)
//option.socketPort : 8003(default)
//option.webConfigPort : 8080(default)
function proxyServer(option){
option = option || {};
@ -63,7 +66,16 @@ function proxyServer(option){
proxyType = /https/i.test(option.type || DEFAULT_TYPE) ? T_TYPE_HTTPS : T_TYPE_HTTP ,
proxyPort = option.port || DEFAULT_PORT,
proxyHost = option.hostname || DEFAULT_HOST,
proxyRules = option.rule || default_rule;
proxyRules = option.rule || default_rule,
proxyWebPort = option.webPort || DEFAULT_WEB_PORT, //port for web interface
socketPort = option.socketPort || DEFAULT_WEBSOCKET_PORT, //port for websocket
proxyConfigPort = option.webConfigPort || DEFAULT_CONFIG_PORT; //port to ui config server
var portList = {
proxyWebPort : proxyWebPort,
socketPort : socketPort,
proxyConfigPort : proxyConfigPort
};
requestHandler.setRules(proxyRules); //TODO : optimize calling for set rule
self.httpProxyServer = null;
@ -101,14 +113,13 @@ function proxyServer(option){
//start web interface
function(callback){
var webServer = new proxyWebServer();
var webServer = new proxyWebServer(portList);
var wss = webServer.wss;
var configServer = new UIConfigServer(DEFAULT_CONFIG_PORT);
var configServer = new UIConfigServer(proxyConfigPort);
configServer.on("rule_changed",function() {
console.log(arguments);
})
// var wss = proxyWebServer();
callback(null);
}
@ -133,7 +144,7 @@ function proxyServer(option){
}
}
// doing
// BETA : UIConfigServer
function UIConfigServer(port){
var self = this;
@ -146,6 +157,7 @@ function UIConfigServer(port){
},
userKey;
port = port || DEFAULT_CONFIG_PORT;
customerRule.shouldUseLocalResponse = function(req,reqBody){
var url = req.url;
@ -213,10 +225,13 @@ function UIConfigServer(port){
inherits(UIConfigServer, events.EventEmitter);
function proxyWebServer(port){
function proxyWebServer(portList){
var self = this;
port = port || DEFAULT_WEB_PORT;
portList = portList || {};
port = portList.proxyWebPort || DEFAULT_WEB_PORT;
webSocketPort = portList.socketPort || DEFAULT_WEBSOCKET_PORT;
proxyConfigPort = portList.proxyConfigPort;
//web interface
var app = express();
@ -251,7 +266,11 @@ function proxyWebServer(port){
if(req.url == "/"){
res.setHeader("Content-Type", "text/html");
res.end(indexHTML.replace("{{rule}}",requestHandler.getRuleSummary()) );
res.end(util.simpleRender(indexHTML, {
rule : requestHandler.getRuleSummary(),
webSocketPort : webSocketPort,
proxyConfigPort : proxyConfigPort
}));
}else{
next();
}
@ -264,7 +283,7 @@ function proxyWebServer(port){
var tipText = "web interface started at port " + port;
//web socket interface
var wss = new WebSocketServer({port: DEFAULT_WEBSOCKET_PORT});
var wss = new WebSocketServer({port: webSocketPort});
wss.on("connection",function(ws){});
wss.broadcast = function(data) {
for(var i in this.clients){

View File

@ -14,7 +14,7 @@
<a href="#" class="J_clearBtn"><span class="topBtn">Clear Logs(Ctrl+X)</span></a>
<a href="#" class="J_statusBtn"><span class="topBtn">Stop</span></a>
<a href="#" class="J_statusBtn btn_disable"><span class="topBtn">Resume</span></a>
<a href="http://localhost:8080"><span class="topBtn">Config Local Response(beta)</span></a>
<a href="http://localhost:{{proxyConfigPort}}"><span class="topBtn">Config Local Response(beta)</span></a>
</div>
<div class="ruleDesc">
<h4>rule : <strong>{{rule}}</strong></h4>
@ -44,6 +44,8 @@
</div>
</div>
<input type="hidden" id="socketPort" value="{{webSocketPort}}" />
<script type="text/template" id="main_table_row">
<td class="data_id"><%= _id %></td>
<td><%= method %></td>

View File

@ -176,7 +176,8 @@ seajs.use(['$','Underscore' ,'Backbone'], function($, _, Backbone) {
alert("WebSocket is required. Please use a modern browser.");
return;
}
var dataSocket = new WebSocket("ws://127.0.0.1:8003");
var socketPort = $("#socketPort").val() || "8003",
dataSocket = new WebSocket("ws://127.0.0.1:" + socketPort);
dataSocket.onopen = function(){}
dataSocket.onmessage = function(event){