diff options
Diffstat (limited to 'web/src')
| -rw-r--r-- | web/src/css/flowdetail.less | 3 | ||||
| -rw-r--r-- | web/src/css/header.less | 7 | ||||
| -rw-r--r-- | web/src/js/components/Header/FilterDocs.jsx | 2 | ||||
| -rw-r--r-- | web/src/js/components/Header/FilterInput.jsx | 8 | ||||
| -rw-r--r-- | web/src/js/filt/filt.js | 190 | ||||
| -rw-r--r-- | web/src/js/filt/filt.peg | 5 | ||||
| -rw-r--r-- | web/src/js/flow/utils.js | 6 | 
7 files changed, 128 insertions, 93 deletions
diff --git a/web/src/css/flowdetail.less b/web/src/css/flowdetail.less index b6a7102b..200ec46d 100644 --- a/web/src/css/flowdetail.less +++ b/web/src/css/flowdetail.less @@ -14,8 +14,7 @@      }      section { -        display: flex; -        flex-direction: column; +        overflow-y: scroll;          >article{              overflow: auto;              padding: 5px 12px 0; diff --git a/web/src/css/header.less b/web/src/css/header.less index 042d6811..97c69930 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 49fb5fbc..b471840b 100644 --- a/web/src/js/components/Header/FilterDocs.jsx +++ b/web/src/js/components/Header/FilterDocs.jsx @@ -37,7 +37,7 @@ export default class FilterDocs extends Component {              <table className="table table-condensed">                  <tbody>                      {doc.commands.map(cmd => ( -                        <tr key={cmd[1]}> +                        <tr key={cmd[1]} onClick={e => this.props.selectHandler(cmd[0].split(" ")[0] + " ")}>                              <td>{cmd[0].replace(' ', '\u00a0')}</td>                              <td>{cmd[1]}</td>                          </tr> diff --git a/web/src/js/components/Header/FilterInput.jsx b/web/src/js/components/Header/FilterInput.jsx index e421f1a4..12479c10 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 <FilterDocs/> +            return <FilterDocs selectHandler={this.selectFilter}/>          }          try {              return Filt.parse(this.state.value).desc @@ -85,6 +86,11 @@ export default class FilterInput extends Component {          e.stopPropagation()      } +    selectFilter(cmd) { +        this.setState({value: cmd}) +        ReactDOM.findDOMNode(this.refs.input).focus() +    } +      blur() {          ReactDOM.findDOMNode(this.refs.input).blur()      } diff --git a/web/src/js/filt/filt.js b/web/src/js/filt/filt.js index a1380e2b..2252f957 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 7122a1a5..b2576661 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" diff --git a/web/src/js/flow/utils.js b/web/src/js/flow/utils.js index cd174069..3c38058e 100644 --- a/web/src/js/flow/utils.js +++ b/web/src/js/flow/utils.js @@ -54,16 +54,12 @@ export var MessageUtils = {  };  export var RequestUtils = _.extend(MessageUtils, { -    pretty_host: function (request) { -        //FIXME: Add hostheader -        return request.host; -    },      pretty_url: function (request) {          var port = "";          if (defaultPorts[request.scheme] !== request.port) {              port = ":" + request.port;          } -        return request.scheme + "://" + this.pretty_host(request) + port + request.path; +        return request.scheme + "://" + request.pretty_host + port + request.path;      }  });  | 
