diff --git a/lib/rule_default.js b/lib/rule_default.js index 75e63e4..9f2294c 100644 --- a/lib/rule_default.js +++ b/lib/rule_default.js @@ -1,8 +1,17 @@ module.exports = { shouldUseLocalResponse : function(req,reqBody){ + //intercept all options request + if(req.method == "OPTIONS"){ + return true; + }else{ + return false; + } }, dealLocalResponse : function(req,reqBody,callback){ + if(req.method == "OPTIONS"){ + callback(200,mergeCORSHeader(req.headers),""); + } }, replaceRequestProtocol:function(req,protocol){ @@ -18,6 +27,7 @@ module.exports = { }, replaceResponseHeader: function(req,res,header){ + return mergeCORSHeader(req.headers, header); }, replaceServerResData: function(req,res,serverResData){ @@ -28,4 +38,20 @@ module.exports = { shouldInterceptHttpsReq :function(req){ } -}; \ No newline at end of file +}; + +function mergeCORSHeader(reqHeader,originHeader){ + var targetObj = originHeader || {}; + + delete targetObj["Access-Control-Allow-Credentials"]; + delete targetObj["Access-Control-Allow-Origin"]; + delete targetObj["Access-Control-Allow-Methods"]; + delete targetObj["Access-Control-Allow-Headers"]; + + targetObj["access-control-allow-credentials"] = "true"; + targetObj["access-control-allow-origin"] = reqHeader['origin'] || "-___-||"; + targetObj["access-control-allow-methods"] = "GET, POST, PUT"; + targetObj["access-control-allow-headers"] = reqHeader['access-control-request-headers'] || "-___-||"; + + return targetObj; +} \ No newline at end of file diff --git a/package.json b/package.json index c9c82e3..89e5ead 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "anyproxy", - "version": "2.1.0", + "version": "2.1.1", "description": "a charles/fiddler like proxy written in NodeJs, which can handle HTTPS requests and CROS perfectly.", "main": "proxy.js", "bin": { diff --git a/proxy.js b/proxy.js index 9072cf1..2f6664c 100644 --- a/proxy.js +++ b/proxy.js @@ -144,9 +144,7 @@ function startWebServer(port){ //web socket interface var wss = new WebSocketServer({port: DEFAULT_WEBSOCKET_PORT}); - wss.on("connection",function(ws){ - console.log("wss connection"); - }); + wss.on("connection",function(ws){}); wss.broadcast = function(data) { for(var i in this.clients){ this.clients[i].send(data); diff --git a/web/css/page.css b/web/css/page.css index 0db77b4..6da9ed6 100644 --- a/web/css/page.css +++ b/web/css/page.css @@ -13,6 +13,10 @@ margin: 0 5px; } +.topHead .btn_disable{ + color: #777; +} + .mainTableWrapper{ margin-top: 0; } diff --git a/web/index.html b/web/index.html index 5a3c8ce..1e433e9 100644 --- a/web/index.html +++ b/web/index.html @@ -9,6 +9,8 @@

Anyproxy

Clear Logs(Ctrl+X) + Stop + Resume
diff --git a/web/page.js b/web/page.js index 366fe9c..f1a44cc 100644 --- a/web/page.js +++ b/web/page.js @@ -13,7 +13,6 @@ seajs.use(['$','Underscore' ,'Backbone'], function($, _, Backbone) { $(function(){ //record detail - //backbone太麻烦了,这里手写拉倒.. var DetailView = function(){ var self = this, $detailEl = $(".J_recordDetailOverlay"), @@ -153,6 +152,25 @@ seajs.use(['$','Underscore' ,'Backbone'], function($, _, Backbone) { recList.reset(); } + //pause btn + var ifPause = false; + (function(){ + var statusBtn = $(".J_statusBtn"); + statusBtn.on("click",function(e){ + e.stopPropagation(); + e.preventDefault(); + + $(".J_statusBtn").removeClass("btn_disable"); + $(this).addClass("btn_disable"); + + if(/stop/i.test($(this).html()) ){ + ifPause = true; + }else{ + ifPause = false; + } + }); + })(); + //data via web socket if(!WebSocket){ alert("WebSocket is required. Please use a modern browser."); @@ -162,6 +180,7 @@ seajs.use(['$','Underscore' ,'Backbone'], function($, _, Backbone) { dataSocket.onopen = function(){} dataSocket.onmessage = function(event){ + if(ifPause) return; var data = JSON.parse(event.data); var reqDate = new Date(data.startTime);