From c397a21980db5619863871bc214552563ae1583d Mon Sep 17 00:00:00 2001 From: Matthew Shao Date: Thu, 2 Mar 2017 11:09:13 +0800 Subject: [PATCH 01/10] [web] Add mouse support for FilterInput popover. --- web/src/css/header.less | 7 +++++++ web/src/js/components/Header/FilterDocs.jsx | 8 ++++++-- web/src/js/components/Header/FilterInput.jsx | 7 ++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/web/src/css/header.less b/web/src/css/header.less index 042d6811e..97c699304 100644 --- a/web/src/css/header.less +++ b/web/src/css/header.less @@ -113,5 +113,12 @@ header { .popover-content { max-height: 500px; overflow-y: auto; + + tr { + cursor: pointer; + &:hover { + background-color: hsla(209, 52%, 84%, 0.5) !important; + } + } } } diff --git a/web/src/js/components/Header/FilterDocs.jsx b/web/src/js/components/Header/FilterDocs.jsx index 49fb5fbc6..f07b8e246 100644 --- a/web/src/js/components/Header/FilterDocs.jsx +++ b/web/src/js/components/Header/FilterDocs.jsx @@ -11,7 +11,7 @@ export default class FilterDocs extends Component { constructor(props, context) { super(props, context) - this.state = { doc: FilterDocs.doc } + this.state = { doc: FilterDocs.doc, selectHandler: props.selectHandler} } componentWillMount() { @@ -29,6 +29,10 @@ export default class FilterDocs extends Component { } } + handleClick(e, value){ + this.state.selectHandler(value.split(" ")[0] + " ") + } + render() { const { doc } = this.state return !doc ? ( @@ -37,7 +41,7 @@ export default class FilterDocs extends Component { {doc.commands.map(cmd => ( - + this.handleClick(e, cmd[0])}> diff --git a/web/src/js/components/Header/FilterInput.jsx b/web/src/js/components/Header/FilterInput.jsx index e421f1a49..da2ba7e26 100644 --- a/web/src/js/components/Header/FilterInput.jsx +++ b/web/src/js/components/Header/FilterInput.jsx @@ -21,6 +21,7 @@ export default class FilterInput extends Component { this.onKeyDown = this.onKeyDown.bind(this) this.onMouseEnter = this.onMouseEnter.bind(this) this.onMouseLeave = this.onMouseLeave.bind(this) + this.selectFilter = this.selectFilter.bind(this) } componentWillReceiveProps(nextProps) { @@ -41,7 +42,7 @@ export default class FilterInput extends Component { getDesc() { if (!this.state.value) { - return + return } try { return Filt.parse(this.state.value).desc @@ -85,6 +86,10 @@ export default class FilterInput extends Component { e.stopPropagation() } + selectFilter(cmd) { + this.setState({value: cmd}) + } + blur() { ReactDOM.findDOMNode(this.refs.input).blur() } From 6479bd4e76ec46a14a6f0cb7c3c5c7e56f402b50 Mon Sep 17 00:00:00 2001 From: Matthew Shao Date: Fri, 3 Mar 2017 09:14:46 +0800 Subject: [PATCH 02/10] [web] Simplify the code. (#2085) --- web/src/js/components/Header/FilterDocs.jsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/web/src/js/components/Header/FilterDocs.jsx b/web/src/js/components/Header/FilterDocs.jsx index f07b8e246..b471840be 100644 --- a/web/src/js/components/Header/FilterDocs.jsx +++ b/web/src/js/components/Header/FilterDocs.jsx @@ -11,7 +11,7 @@ export default class FilterDocs extends Component { constructor(props, context) { super(props, context) - this.state = { doc: FilterDocs.doc, selectHandler: props.selectHandler} + this.state = { doc: FilterDocs.doc } } componentWillMount() { @@ -29,10 +29,6 @@ export default class FilterDocs extends Component { } } - handleClick(e, value){ - this.state.selectHandler(value.split(" ")[0] + " ") - } - render() { const { doc } = this.state return !doc ? ( @@ -41,7 +37,7 @@ export default class FilterDocs extends Component {
{cmd[0].replace(' ', '\u00a0')} {cmd[1]}
{doc.commands.map(cmd => ( - this.handleClick(e, cmd[0])}> + this.props.selectHandler(cmd[0].split(" ")[0] + " ")}> From 6a3497f09c260de63c85ec26d5a366a6c55e3e88 Mon Sep 17 00:00:00 2001 From: Matthew Shao Date: Sat, 4 Mar 2017 22:44:13 +0800 Subject: [PATCH 03/10] [web] Retain focus on input field after selecting. (#2085) --- web/src/js/components/Header/FilterInput.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/web/src/js/components/Header/FilterInput.jsx b/web/src/js/components/Header/FilterInput.jsx index da2ba7e26..12479c105 100644 --- a/web/src/js/components/Header/FilterInput.jsx +++ b/web/src/js/components/Header/FilterInput.jsx @@ -88,6 +88,7 @@ export default class FilterInput extends Component { selectFilter(cmd) { this.setState({value: cmd}) + ReactDOM.findDOMNode(this.refs.input).focus() } blur() { From fa96a1d1ef096749107158db518ba30e4fe7bf0f Mon Sep 17 00:00:00 2001 From: Sachin Kelkar Date: Mon, 6 Mar 2017 10:20:11 +0530 Subject: [PATCH 04/10] web: Add websocket filter --- web/src/js/filt/filt.js | 190 ++++++++++++++++++++++----------------- web/src/js/filt/filt.peg | 5 ++ 2 files changed, 111 insertions(+), 84 deletions(-) diff --git a/web/src/js/filt/filt.js b/web/src/js/filt/filt.js index a1380e2b0..2252f9572 100644 --- a/web/src/js/filt/filt.js +++ b/web/src/js/filt/filt.js @@ -131,37 +131,40 @@ module.exports = (function() { peg$c92 = "~u", peg$c93 = { type: "literal", value: "~u", description: "\"~u\"" }, peg$c94 = function(s) { return url(s); }, - peg$c95 = { type: "other", description: "integer" }, - peg$c96 = /^['"]/, - peg$c97 = { type: "class", value: "['\"]", description: "['\"]" }, - peg$c98 = /^[0-9]/, - peg$c99 = { type: "class", value: "[0-9]", description: "[0-9]" }, - peg$c100 = function(digits) { return parseInt(digits.join(""), 10); }, - peg$c101 = { type: "other", description: "string" }, - peg$c102 = "\"", - peg$c103 = { type: "literal", value: "\"", description: "\"\\\"\"" }, - peg$c104 = function(chars) { return chars.join(""); }, - peg$c105 = "'", - peg$c106 = { type: "literal", value: "'", description: "\"'\"" }, - peg$c107 = /^["\\]/, - peg$c108 = { type: "class", value: "[\"\\\\]", description: "[\"\\\\]" }, - peg$c109 = { type: "any", description: "any character" }, - peg$c110 = function(char) { return char; }, - peg$c111 = "\\", - peg$c112 = { type: "literal", value: "\\", description: "\"\\\\\"" }, - peg$c113 = /^['\\]/, - peg$c114 = { type: "class", value: "['\\\\]", description: "['\\\\]" }, - peg$c115 = /^['"\\]/, - peg$c116 = { type: "class", value: "['\"\\\\]", description: "['\"\\\\]" }, - peg$c117 = "n", - peg$c118 = { type: "literal", value: "n", description: "\"n\"" }, - peg$c119 = function() { return "\n"; }, - peg$c120 = "r", - peg$c121 = { type: "literal", value: "r", description: "\"r\"" }, - peg$c122 = function() { return "\r"; }, - peg$c123 = "t", - peg$c124 = { type: "literal", value: "t", description: "\"t\"" }, - peg$c125 = function() { return "\t"; }, + peg$c95 = "~websocket", + peg$c96 = { type: "literal", value: "~websocket", description: "\"~websocket\"" }, + peg$c97 = function() { return websocketFilter; }, + peg$c98 = { type: "other", description: "integer" }, + peg$c99 = /^['"]/, + peg$c100 = { type: "class", value: "['\"]", description: "['\"]" }, + peg$c101 = /^[0-9]/, + peg$c102 = { type: "class", value: "[0-9]", description: "[0-9]" }, + peg$c103 = function(digits) { return parseInt(digits.join(""), 10); }, + peg$c104 = { type: "other", description: "string" }, + peg$c105 = "\"", + peg$c106 = { type: "literal", value: "\"", description: "\"\\\"\"" }, + peg$c107 = function(chars) { return chars.join(""); }, + peg$c108 = "'", + peg$c109 = { type: "literal", value: "'", description: "\"'\"" }, + peg$c110 = /^["\\]/, + peg$c111 = { type: "class", value: "[\"\\\\]", description: "[\"\\\\]" }, + peg$c112 = { type: "any", description: "any character" }, + peg$c113 = function(char) { return char; }, + peg$c114 = "\\", + peg$c115 = { type: "literal", value: "\\", description: "\"\\\\\"" }, + peg$c116 = /^['\\]/, + peg$c117 = { type: "class", value: "['\\\\]", description: "['\\\\]" }, + peg$c118 = /^['"\\]/, + peg$c119 = { type: "class", value: "['\"\\\\]", description: "['\"\\\\]" }, + peg$c120 = "n", + peg$c121 = { type: "literal", value: "n", description: "\"n\"" }, + peg$c122 = function() { return "\n"; }, + peg$c123 = "r", + peg$c124 = { type: "literal", value: "r", description: "\"r\"" }, + peg$c125 = function() { return "\r"; }, + peg$c126 = "t", + peg$c127 = { type: "literal", value: "t", description: "\"t\"" }, + peg$c128 = function() { return "\t"; }, peg$currPos = 0, peg$savedPos = 0, @@ -1369,12 +1372,27 @@ module.exports = (function() { } if (s0 === peg$FAILED) { s0 = peg$currPos; - s1 = peg$parseStringLiteral(); + if (input.substr(peg$currPos, 10) === peg$c95) { + s1 = peg$c95; + peg$currPos += 10; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c96); } + } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c94(s1); + s1 = peg$c97(); } s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseStringLiteral(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c94(s1); + } + s0 = s1; + } } } } @@ -1408,53 +1426,53 @@ module.exports = (function() { peg$silentFails++; s0 = peg$currPos; - if (peg$c96.test(input.charAt(peg$currPos))) { + if (peg$c99.test(input.charAt(peg$currPos))) { s1 = input.charAt(peg$currPos); peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c97); } + if (peg$silentFails === 0) { peg$fail(peg$c100); } } if (s1 === peg$FAILED) { s1 = null; } if (s1 !== peg$FAILED) { s2 = []; - if (peg$c98.test(input.charAt(peg$currPos))) { + if (peg$c101.test(input.charAt(peg$currPos))) { s3 = input.charAt(peg$currPos); peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c99); } + if (peg$silentFails === 0) { peg$fail(peg$c102); } } if (s3 !== peg$FAILED) { while (s3 !== peg$FAILED) { s2.push(s3); - if (peg$c98.test(input.charAt(peg$currPos))) { + if (peg$c101.test(input.charAt(peg$currPos))) { s3 = input.charAt(peg$currPos); peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c99); } + if (peg$silentFails === 0) { peg$fail(peg$c102); } } } } else { s2 = peg$FAILED; } if (s2 !== peg$FAILED) { - if (peg$c96.test(input.charAt(peg$currPos))) { + if (peg$c99.test(input.charAt(peg$currPos))) { s3 = input.charAt(peg$currPos); peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c97); } + if (peg$silentFails === 0) { peg$fail(peg$c100); } } if (s3 === peg$FAILED) { s3 = null; } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c100(s2); + s1 = peg$c103(s2); s0 = s1; } else { peg$currPos = s0; @@ -1471,7 +1489,7 @@ module.exports = (function() { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c95); } + if (peg$silentFails === 0) { peg$fail(peg$c98); } } return s0; @@ -1483,11 +1501,11 @@ module.exports = (function() { peg$silentFails++; s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 34) { - s1 = peg$c102; + s1 = peg$c105; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c103); } + if (peg$silentFails === 0) { peg$fail(peg$c106); } } if (s1 !== peg$FAILED) { s2 = []; @@ -1498,15 +1516,15 @@ module.exports = (function() { } if (s2 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s3 = peg$c102; + s3 = peg$c105; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c103); } + if (peg$silentFails === 0) { peg$fail(peg$c106); } } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c104(s2); + s1 = peg$c107(s2); s0 = s1; } else { peg$currPos = s0; @@ -1523,11 +1541,11 @@ module.exports = (function() { if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 39) { - s1 = peg$c105; + s1 = peg$c108; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c106); } + if (peg$silentFails === 0) { peg$fail(peg$c109); } } if (s1 !== peg$FAILED) { s2 = []; @@ -1538,15 +1556,15 @@ module.exports = (function() { } if (s2 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 39) { - s3 = peg$c105; + s3 = peg$c108; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c106); } + if (peg$silentFails === 0) { peg$fail(peg$c109); } } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c104(s2); + s1 = peg$c107(s2); s0 = s1; } else { peg$currPos = s0; @@ -1585,7 +1603,7 @@ module.exports = (function() { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c104(s2); + s1 = peg$c107(s2); s0 = s1; } else { peg$currPos = s0; @@ -1600,7 +1618,7 @@ module.exports = (function() { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c101); } + if (peg$silentFails === 0) { peg$fail(peg$c104); } } return s0; @@ -1612,12 +1630,12 @@ module.exports = (function() { s0 = peg$currPos; s1 = peg$currPos; peg$silentFails++; - if (peg$c107.test(input.charAt(peg$currPos))) { + if (peg$c110.test(input.charAt(peg$currPos))) { s2 = input.charAt(peg$currPos); peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c108); } + if (peg$silentFails === 0) { peg$fail(peg$c111); } } peg$silentFails--; if (s2 === peg$FAILED) { @@ -1632,11 +1650,11 @@ module.exports = (function() { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c109); } + if (peg$silentFails === 0) { peg$fail(peg$c112); } } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c110(s2); + s1 = peg$c113(s2); s0 = s1; } else { peg$currPos = s0; @@ -1649,17 +1667,17 @@ module.exports = (function() { if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c111; + s1 = peg$c114; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c112); } + if (peg$silentFails === 0) { peg$fail(peg$c115); } } if (s1 !== peg$FAILED) { s2 = peg$parseEscapeSequence(); if (s2 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c110(s2); + s1 = peg$c113(s2); s0 = s1; } else { peg$currPos = s0; @@ -1680,12 +1698,12 @@ module.exports = (function() { s0 = peg$currPos; s1 = peg$currPos; peg$silentFails++; - if (peg$c113.test(input.charAt(peg$currPos))) { + if (peg$c116.test(input.charAt(peg$currPos))) { s2 = input.charAt(peg$currPos); peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c114); } + if (peg$silentFails === 0) { peg$fail(peg$c117); } } peg$silentFails--; if (s2 === peg$FAILED) { @@ -1700,11 +1718,11 @@ module.exports = (function() { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c109); } + if (peg$silentFails === 0) { peg$fail(peg$c112); } } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c110(s2); + s1 = peg$c113(s2); s0 = s1; } else { peg$currPos = s0; @@ -1717,17 +1735,17 @@ module.exports = (function() { if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c111; + s1 = peg$c114; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c112); } + if (peg$silentFails === 0) { peg$fail(peg$c115); } } if (s1 !== peg$FAILED) { s2 = peg$parseEscapeSequence(); if (s2 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c110(s2); + s1 = peg$c113(s2); s0 = s1; } else { peg$currPos = s0; @@ -1762,11 +1780,11 @@ module.exports = (function() { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c109); } + if (peg$silentFails === 0) { peg$fail(peg$c112); } } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c110(s2); + s1 = peg$c113(s2); s0 = s1; } else { peg$currPos = s0; @@ -1783,53 +1801,53 @@ module.exports = (function() { function peg$parseEscapeSequence() { var s0, s1; - if (peg$c115.test(input.charAt(peg$currPos))) { + if (peg$c118.test(input.charAt(peg$currPos))) { s0 = input.charAt(peg$currPos); peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c116); } + if (peg$silentFails === 0) { peg$fail(peg$c119); } } if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 110) { - s1 = peg$c117; + s1 = peg$c120; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c118); } + if (peg$silentFails === 0) { peg$fail(peg$c121); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c119(); + s1 = peg$c122(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 114) { - s1 = peg$c120; + s1 = peg$c123; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c121); } + if (peg$silentFails === 0) { peg$fail(peg$c124); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c122(); + s1 = peg$c125(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 116) { - s1 = peg$c123; + s1 = peg$c126; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c124); } + if (peg$silentFails === 0) { peg$fail(peg$c127); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$c125(); + s1 = peg$c128(); } s0 = s1; } @@ -1945,7 +1963,7 @@ module.exports = (function() { function destinationFilter(flow){ return (!!flow.server_conn.address) && - regex.test(flow.server_conn.address.address[0] + ":" + flow.server_conn.address.address[1]); + regex.test(flow.server_conn.address[0] + ":" + flow.server_conn.address[1]); } destinationFilter.desc = "destination address matches " + regex; return destinationFilter; @@ -2011,7 +2029,7 @@ module.exports = (function() { function sourceFilter(flow){ return (!!flow.client_conn.address) && - regex.test(flow.client_conn.address.address[0] + ":" + flow.client_conn.address.address[1]); + regex.test(flow.client_conn.address[0] + ":" + flow.client_conn.address[1]); } sourceFilter.desc = "source address matches " + regex; return sourceFilter; @@ -2056,6 +2074,10 @@ module.exports = (function() { urlFilter.desc = "url matches " + regex; return urlFilter; } + function websocketFilter(flow){ + return flow.type === "websocket"; + } + websocketFilter.desc = "is a Websocket Flow"; peg$result = peg$startRuleFunction(); diff --git a/web/src/js/filt/filt.peg b/web/src/js/filt/filt.peg index 7122a1a55..b2576661d 100644 --- a/web/src/js/filt/filt.peg +++ b/web/src/js/filt/filt.peg @@ -217,6 +217,10 @@ function url(regex){ urlFilter.desc = "url matches " + regex; return urlFilter; } +function websocketFilter(flow){ + return flow.type === "websocket"; +} +websocketFilter.desc = "is a Websocket Flow"; } start "filter expression" @@ -278,6 +282,7 @@ Expr / "~tq" ws+ s:StringLiteral { return requestContentType(s); } / "~ts" ws+ s:StringLiteral { return responseContentType(s); } / "~u" ws+ s:StringLiteral { return url(s); } + / "~websocket" { return websocketFilter; } / s:StringLiteral { return url(s); } IntegerLiteral "integer" From fd5079b8a6da1a162f6209d27f1f075f91858108 Mon Sep 17 00:00:00 2001 From: lymanZerga11 Date: Mon, 6 Mar 2017 23:19:39 +0800 Subject: [PATCH 05/10] Update flowlist.py --- mitmproxy/tools/console/flowlist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitmproxy/tools/console/flowlist.py b/mitmproxy/tools/console/flowlist.py index 83ad63f3d..d2e28d358 100644 --- a/mitmproxy/tools/console/flowlist.py +++ b/mitmproxy/tools/console/flowlist.py @@ -68,7 +68,7 @@ class LogBufferBox(urwid.ListBox): self.set_focus(0) elif key == "F": o = self.master.options - o.focus_follow = not o.focus_follow + o.console_focus_follow = not o.console_focus_follow return urwid.ListBox.keypress(self, size, key) From 3b4d8d6ecae3ee1f57dd71af990bb480e6c82d6c Mon Sep 17 00:00:00 2001 From: Thomas Kriechbaumer Date: Mon, 6 Mar 2017 18:40:43 +0100 Subject: [PATCH 06/10] clearly indentify git-checkout as dev version --- mitmproxy/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitmproxy/version.py b/mitmproxy/version.py index d23b2d19b..d9b88e7b7 100644 --- a/mitmproxy/version.py +++ b/mitmproxy/version.py @@ -1,4 +1,4 @@ -IVERSION = (3, 0, 0) +IVERSION = (3, 0, 0, 'dev') VERSION = ".".join(str(i) for i in IVERSION) PATHOD = "pathod " + VERSION MITMPROXY = "mitmproxy " + VERSION From 5d820682185aa8b0d82d5bec49b7c7e6a9818d23 Mon Sep 17 00:00:00 2001 From: David Shaw Date: Mon, 6 Mar 2017 17:30:40 -0500 Subject: [PATCH 07/10] Updated for python 3 --- mitmproxy/contrib/wbxml/ASCommandResponse.py | 2 +- mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py | 2 +- mitmproxy/contrib/wbxml/ASWBXMLCodePage.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mitmproxy/contrib/wbxml/ASCommandResponse.py b/mitmproxy/contrib/wbxml/ASCommandResponse.py index f5f62e856..4eea05a3c 100644 --- a/mitmproxy/contrib/wbxml/ASCommandResponse.py +++ b/mitmproxy/contrib/wbxml/ASCommandResponse.py @@ -41,7 +41,7 @@ class ASCommandResponse: raise ValueError("Empty WBXML body passed") except Exception as e: self.xmlString = None - raise ValueError("Error: {0}".format(e.message)) + raise ValueError("Error: {0}".format(e)) def getWBXMLBytes(self): return self.wbxmlBytes diff --git a/mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py b/mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py index b616028c4..0174eb4f0 100644 --- a/mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py +++ b/mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py @@ -40,7 +40,7 @@ class ASWBXMLByteQueue(Queue): Queue.__init__(self) for byte in wbxmlBytes: - self.put(ord(byte)) + self.put(byte) self.bytesEnqueued += 1 diff --git a/mitmproxy/contrib/wbxml/ASWBXMLCodePage.py b/mitmproxy/contrib/wbxml/ASWBXMLCodePage.py index 1d00afd42..da84a85ef 100644 --- a/mitmproxy/contrib/wbxml/ASWBXMLCodePage.py +++ b/mitmproxy/contrib/wbxml/ASWBXMLCodePage.py @@ -39,12 +39,12 @@ class ASWBXMLCodePage: self.tagLookup[tag] = token def getToken(self, tag): - if self.tagLookup.has_key(tag): + if tag in self.tagLookup: return self.tagLookup[tag] return 0xFF def getTag(self, token): - if self.tokenLookup.has_key(token): + if token in self.tokenLookup: return self.tokenLookup[token] return None From 7ca2913c1af4b92894435fc8c268d9c1ba795b59 Mon Sep 17 00:00:00 2001 From: Yamamori Akihiro Date: Tue, 7 Mar 2017 14:15:29 +0900 Subject: [PATCH 08/10] Update tcpproxy.rst Correction in key short cut for TCP Proxy --- docs/features/tcpproxy.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/tcpproxy.rst b/docs/features/tcpproxy.rst index 77c62bbf7..0825c0249 100644 --- a/docs/features/tcpproxy.rst +++ b/docs/features/tcpproxy.rst @@ -19,7 +19,7 @@ How it works ================== ====================== command-line ``--tcp HOST`` -mitmproxy shortcut :kbd:`o` then :kbd:`T` +mitmproxy shortcut :kbd:`O` then :kbd:`T` ================== ====================== For a detailed description how the hostname pattern works, please look at the :ref:`passthrough` From bda39335b0e8e5ed27be788c6d7ec4206ec62c55 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 7 Mar 2017 12:16:23 +0100 Subject: [PATCH 09/10] fix other occurences of options shortcut --- docs/features/anticache.rst | 2 +- docs/features/passthrough.rst | 2 +- docs/features/replacements.rst | 4 ++-- docs/features/serverreplay.rst | 2 +- docs/features/setheaders.rst | 2 +- docs/features/sticky.rst | 4 ++-- docs/features/upstreamcerts.rst | 2 +- docs/mitmproxy.rst | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/features/anticache.rst b/docs/features/anticache.rst index 411b284b4..a0c3187a3 100644 --- a/docs/features/anticache.rst +++ b/docs/features/anticache.rst @@ -11,5 +11,5 @@ sure you capture an HTTP exchange in its totality. It's also often used during ================== ====================== command-line ``--anticache`` -mitmproxy shortcut :kbd:`o` then :kbd:`a` +mitmproxy shortcut :kbd:`O` then :kbd:`a` ================== ====================== diff --git a/docs/features/passthrough.rst b/docs/features/passthrough.rst index 10df49ad9..d68a49a99 100644 --- a/docs/features/passthrough.rst +++ b/docs/features/passthrough.rst @@ -23,7 +23,7 @@ How it works ================== ====================== command-line ``--ignore regex`` -mitmproxy shortcut :kbd:`o` then :kbd:`I` +mitmproxy shortcut :kbd:`O` then :kbd:`I` ================== ====================== diff --git a/docs/features/replacements.rst b/docs/features/replacements.rst index b4643dd26..215f0ddb3 100644 --- a/docs/features/replacements.rst +++ b/docs/features/replacements.rst @@ -61,12 +61,12 @@ times. Interactively ------------- -The :kbd:`R` shortcut key in the mitmproxy options menu (:kbd:`o`) lets you add and edit +The :kbd:`R` shortcut key in the mitmproxy options menu (:kbd:`O`) lets you add and edit replacement hooks using a built-in editor. The context-sensitive help (:kbd:`?`) has complete usage information. ================== ======================= command-line ``--replace``, ``--replace-from-file`` -mitmproxy shortcut :kbd:`o` then :kbd:`R` +mitmproxy shortcut :kbd:`O` then :kbd:`R` ================== ======================= diff --git a/docs/features/serverreplay.rst b/docs/features/serverreplay.rst index a1e1cbd14..aef0296e4 100644 --- a/docs/features/serverreplay.rst +++ b/docs/features/serverreplay.rst @@ -31,7 +31,7 @@ in the past at the time of replay, and vice versa. Cookie expiry times are updated in a similar way. You can turn off response refreshing using the ``--norefresh`` argument, or using -the :kbd:`o` options shortcut within :program:`mitmproxy`. +the :kbd:`O` options shortcut within :program:`mitmproxy`. Replaying a session recorded in Reverse-proxy Mode diff --git a/docs/features/setheaders.rst b/docs/features/setheaders.rst index aa991bf47..486f8c763 100644 --- a/docs/features/setheaders.rst +++ b/docs/features/setheaders.rst @@ -15,5 +15,5 @@ Example: Set the **Host** header to "example.com" for all requests. ================== ======================= command-line ``--setheader PATTERN`` -mitmproxy shortcut :kbd:`o` then :kbd:`H` +mitmproxy shortcut :kbd:`O` then :kbd:`H` ================== ======================= diff --git a/docs/features/sticky.rst b/docs/features/sticky.rst index 7be5f842a..5cf32299b 100644 --- a/docs/features/sticky.rst +++ b/docs/features/sticky.rst @@ -22,7 +22,7 @@ to interact with the secured resources. ================== ====================== command-line ``-t FILTER`` -mitmproxy shortcut :kbd:`o` then :kbd:`t` +mitmproxy shortcut :kbd:`O` then :kbd:`t` ================== ====================== @@ -37,5 +37,5 @@ replay of HTTP Digest authentication. ================== ====================== command-line ``-u FILTER`` -mitmproxy shortcut :kbd:`o` then :kbd:`A` +mitmproxy shortcut :kbd:`O` then :kbd:`A` ================== ====================== diff --git a/docs/features/upstreamcerts.rst b/docs/features/upstreamcerts.rst index d2a82ca29..4ef79e1be 100644 --- a/docs/features/upstreamcerts.rst +++ b/docs/features/upstreamcerts.rst @@ -19,5 +19,5 @@ Upstream cert sniffing is on by default, and can optionally be turned off. ================== ====================== command-line ``--no-upstream-cert`` -mitmproxy shortcut :kbd:`o` then :kbd:`U` +mitmproxy shortcut :kbd:`O` then :kbd:`U` ================== ====================== diff --git a/docs/mitmproxy.rst b/docs/mitmproxy.rst index 922a65404..ff6a8857b 100644 --- a/docs/mitmproxy.rst +++ b/docs/mitmproxy.rst @@ -66,7 +66,7 @@ At the moment, the Grid Editor is used in four parts of mitmproxy: - Editing request or response headers (:kbd:`e` for edit, then :kbd:`h` for headers in flow view) - Editing a query string (:kbd:`e` for edit, then :kbd:`q` for query in flow view) - Editing a URL-encoded form (:kbd:`e` for edit, then :kbd:`f` for form in flow view) - - Editing replacement patterns (:kbd:`o` for options, then :kbd:`R` for Replacement Patterns) + - Editing replacement patterns (:kbd:`O` for options, then :kbd:`R` for Replacement Patterns) If there is is no data, an empty editor will be started to let you add some. Here is the editor showing the headers from a request: From 88d48e38aff2a28e1c656e11eb4d5deb7a3723b6 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 7 Mar 2017 14:48:59 +0100 Subject: [PATCH 10/10] Revert "clearly indentify git-checkout as dev version" This temporarily reverts commit 3b4d8d6ecae3ee1f57dd71af990bb480e6c82d6c, which broke the snapshot builds. --- mitmproxy/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitmproxy/version.py b/mitmproxy/version.py index d9b88e7b7..d23b2d19b 100644 --- a/mitmproxy/version.py +++ b/mitmproxy/version.py @@ -1,4 +1,4 @@ -IVERSION = (3, 0, 0, 'dev') +IVERSION = (3, 0, 0) VERSION = ".".join(str(i) for i in IVERSION) PATHOD = "pathod " + VERSION MITMPROXY = "mitmproxy " + VERSION
{cmd[0].replace(' ', '\u00a0')} {cmd[1]}