diff options
| -rw-r--r-- | mitmproxy/web/__init__.py | 8 | ||||
| -rw-r--r-- | mitmproxy/web/static/app.js | 116 | ||||
| -rw-r--r-- | web/src/js/connection.js | 5 | ||||
| -rw-r--r-- | web/src/js/ducks/eventLog.js | 6 | ||||
| -rw-r--r-- | web/src/js/ducks/flows.js | 29 | ||||
| -rw-r--r-- | web/src/js/ducks/index.js | 6 | 
6 files changed, 132 insertions, 38 deletions
| diff --git a/mitmproxy/web/__init__.py b/mitmproxy/web/__init__.py index 5449c1bc..0dbde204 100644 --- a/mitmproxy/web/__init__.py +++ b/mitmproxy/web/__init__.py @@ -25,7 +25,7 @@ class WebFlowView(flow.FlowView):      def _add(self, f):          super(WebFlowView, self)._add(f)          app.ClientConnection.broadcast( -            type="flows", +            type="UPDATE_FLOWS",              cmd="add",              data=app._strip_content(f.get_state())          ) @@ -33,7 +33,7 @@ class WebFlowView(flow.FlowView):      def _update(self, f):          super(WebFlowView, self)._update(f)          app.ClientConnection.broadcast( -            type="flows", +            type="UPDATE_FLOWS",              cmd="update",              data=app._strip_content(f.get_state())          ) @@ -41,7 +41,7 @@ class WebFlowView(flow.FlowView):      def _remove(self, f):          super(WebFlowView, self)._remove(f)          app.ClientConnection.broadcast( -            type="flows", +            type="UPDATE_FLOWS",              cmd="remove",              data=f.id          ) @@ -49,7 +49,7 @@ class WebFlowView(flow.FlowView):      def _recalculate(self, flows):          super(WebFlowView, self)._recalculate(flows)          app.ClientConnection.broadcast( -            type="flows", +            type="UPDATE_FLOWS",              cmd="reset"          ) diff --git a/mitmproxy/web/static/app.js b/mitmproxy/web/static/app.js index a485bfca..522f670f 100644 --- a/mitmproxy/web/static/app.js +++ b/mitmproxy/web/static/app.js @@ -437,7 +437,7 @@ var Query = exports.Query = {      SHOW_EVENTLOG: "e"  }; -},{"./dispatcher.js":22,"./utils.js":32,"jquery":"jquery"}],3:[function(require,module,exports){ +},{"./dispatcher.js":22,"./utils.js":33,"jquery":"jquery"}],3:[function(require,module,exports){  'use strict';  var _react = require('react'); @@ -490,7 +490,7 @@ document.addEventListener('DOMContentLoaded', function () {      ), document.getElementById("mitmproxy"));  }); -},{"./components/proxyapp.js":20,"./connection":21,"./ducks/eventLog":23,"./ducks/index":24,"react":"react","react-dom":"react-dom","react-redux":"react-redux","redux":"redux","redux-logger":"redux-logger","redux-thunk":"redux-thunk"}],4:[function(require,module,exports){ +},{"./components/proxyapp.js":20,"./connection":21,"./ducks/eventLog":23,"./ducks/index":25,"react":"react","react-dom":"react-dom","react-redux":"react-redux","redux":"redux","redux-logger":"redux-logger","redux-thunk":"redux-thunk"}],4:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -709,7 +709,7 @@ ToggleInputButton.propTypes = {      onToggleChanged: _react2.default.PropTypes.func.isRequired  }; -},{"../utils.js":32,"lodash":"lodash","react":"react","react-dom":"react-dom"}],5:[function(require,module,exports){ +},{"../utils.js":33,"lodash":"lodash","react":"react","react-dom":"react-dom"}],5:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -967,7 +967,7 @@ var ValueEditor = exports.ValueEditor = _react2.default.createClass({      }  }); -},{"../utils.js":32,"react":"react","react-dom":"react-dom"}],6:[function(require,module,exports){ +},{"../utils.js":33,"react":"react","react-dom":"react-dom"}],6:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -1462,7 +1462,7 @@ var all_columns = [TLSColumn, IconColumn, PathColumn, MethodColumn, StatusColumn  exports.default = all_columns; -},{"../flow/utils.js":29,"../utils.js":32,"react":"react"}],8:[function(require,module,exports){ +},{"../flow/utils.js":30,"../utils.js":33,"react":"react"}],8:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -1754,7 +1754,7 @@ FlowTable.defaultProps = {  };  exports.default = (0, _AutoScroll2.default)(FlowTable); -},{"../utils.js":32,"./flowtable-columns.js":7,"./helpers/AutoScroll":16,"./helpers/VirtualScroll":17,"classnames":"classnames","lodash":"lodash","react":"react","react-dom":"react-dom","shallowequal":"shallowequal"}],9:[function(require,module,exports){ +},{"../utils.js":33,"./flowtable-columns.js":7,"./helpers/AutoScroll":16,"./helpers/VirtualScroll":17,"classnames":"classnames","lodash":"lodash","react":"react","react-dom":"react-dom","shallowequal":"shallowequal"}],9:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -2108,7 +2108,7 @@ var ContentView = _react2.default.createClass({  exports.default = ContentView; -},{"../../flow/utils.js":29,"../../utils.js":32,"lodash":"lodash","react":"react"}],10:[function(require,module,exports){ +},{"../../flow/utils.js":30,"../../utils.js":33,"lodash":"lodash","react":"react"}],10:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -2376,7 +2376,7 @@ var Details = _react2.default.createClass({  exports.default = Details; -},{"../../utils.js":32,"lodash":"lodash","react":"react"}],11:[function(require,module,exports){ +},{"../../utils.js":33,"lodash":"lodash","react":"react"}],11:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -2870,7 +2870,7 @@ var Error = exports.Error = _react2.default.createClass({      }  }); -},{"../../actions.js":2,"../../flow/utils.js":29,"../../utils.js":32,"../editor.js":5,"./contentview.js":9,"lodash":"lodash","react":"react","react-dom":"react-dom"}],13:[function(require,module,exports){ +},{"../../actions.js":2,"../../flow/utils.js":30,"../../utils.js":33,"../editor.js":5,"./contentview.js":9,"lodash":"lodash","react":"react","react-dom":"react-dom"}],13:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -3053,7 +3053,7 @@ function Footer(_ref) {      );  } -},{"../utils.js":32,"./common.js":4,"react":"react"}],15:[function(require,module,exports){ +},{"../utils.js":33,"./common.js":4,"react":"react"}],15:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -3628,7 +3628,7 @@ var Header = exports.Header = _react2.default.createClass({      }  }); -},{"../actions.js":2,"../filt/filt.js":28,"../utils.js":32,"./common.js":4,"./eventlog":6,"jquery":"jquery","react":"react","react-dom":"react-dom","react-redux":"react-redux"}],16:[function(require,module,exports){ +},{"../actions.js":2,"../filt/filt.js":29,"../utils.js":33,"./common.js":4,"./eventlog":6,"jquery":"jquery","react":"react","react-dom":"react-dom","react-redux":"react-redux"}],16:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -4044,7 +4044,7 @@ var MainView = _react2.default.createClass({  exports.default = MainView; -},{"../actions.js":2,"../filt/filt.js":28,"../store/view.js":31,"../utils.js":32,"./common.js":4,"./flowtable.js":8,"./flowview/index.js":11,"react":"react"}],19:[function(require,module,exports){ +},{"../actions.js":2,"../filt/filt.js":29,"../store/view.js":32,"../utils.js":33,"./common.js":4,"./flowtable.js":8,"./flowview/index.js":11,"react":"react"}],19:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -4180,7 +4180,7 @@ var Prompt = _react2.default.createClass({  exports.default = Prompt; -},{"../utils.js":32,"lodash":"lodash","react":"react","react-dom":"react-dom"}],20:[function(require,module,exports){ +},{"../utils.js":33,"lodash":"lodash","react":"react","react-dom":"react-dom"}],20:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -4372,7 +4372,7 @@ var App = exports.App = _react2.default.createElement(      )  ); -},{"../store/store.js":30,"../utils.js":32,"./common.js":4,"./eventlog.js":6,"./footer.js":14,"./header.js":15,"./mainview.js":18,"lodash":"lodash","react":"react","react-dom":"react-dom","react-redux":"react-redux","react-router":"react-router"}],21:[function(require,module,exports){ +},{"../store/store.js":31,"../utils.js":33,"./common.js":4,"./eventlog.js":6,"./footer.js":14,"./header.js":15,"./mainview.js":18,"lodash":"lodash","react":"react","react-dom":"react-dom","react-redux":"react-redux","react-router":"react-router"}],21:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -4392,6 +4392,10 @@ var _eventLog = require("./ducks/eventLog");  var eventLogActions = _interopRequireWildcard(_eventLog); +var _flows = require("./ducks/flows"); + +var flowActions = _interopRequireWildcard(_flows); +  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }  function Connection(url, dispatch) { @@ -4402,9 +4406,9 @@ function Connection(url, dispatch) {      var ws = new WebSocket(url);      ws.onopen = function () {          dispatch(webSocketActions.connected()); +        dispatch(flowActions.fetchFlows());          dispatch(eventLogActions.fetchLogEntries());          _actions.ConnectionActions.open(); -        //TODO: fetch stuff!      };      ws.onmessage = function (m) {          var message = JSON.parse(m.data); @@ -4412,6 +4416,8 @@ function Connection(url, dispatch) {          switch (message.type) {              case eventLogActions.UPDATE_LOG:                  return dispatch(eventLogActions.updateLogEntries(message)); +            case flowActions.UPDATE_FLOWS: +                return dispatch(flowActions.updateFlows(message));              default:                  console.warn("unknown message", message);          } @@ -4428,7 +4434,7 @@ function Connection(url, dispatch) {      return ws;  } -},{"./actions.js":2,"./dispatcher.js":22,"./ducks/eventLog":23,"./ducks/websocket":27}],22:[function(require,module,exports){ +},{"./actions.js":2,"./dispatcher.js":22,"./ducks/eventLog":23,"./ducks/flows":24,"./ducks/websocket":28}],22:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -4554,7 +4560,56 @@ function addLogEntry(message) {  exports.updateLogEntries = updateList;  exports.fetchLogEntries = fetchList; -},{"./utils/list":25,"./utils/view":26}],24:[function(require,module,exports){ +},{"./utils/list":26,"./utils/view":27}],24:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { +    value: true +}); +exports.fetchFlows = exports.updateFlows = exports.UPDATE_FLOWS = undefined; + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +exports.default = reducer; + +var _list = require("./utils/list"); + +var _list2 = _interopRequireDefault(_list); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var UPDATE_FLOWS = exports.UPDATE_FLOWS = "UPDATE_FLOWS"; + +var _makeList = (0, _list2.default)(UPDATE_FLOWS, "/flows"); + +var reduceList = _makeList.reduceList; +var updateList = _makeList.updateList; +var fetchList = _makeList.fetchList; + + +var defaultState = { +    all: reduceList() +}; + +function reducer() { +    var state = arguments.length <= 0 || arguments[0] === undefined ? defaultState : arguments[0]; +    var action = arguments[1]; + +    switch (action.type) { +        case UPDATE_FLOWS: +            var all = reduceList(state.all, action); +            return _extends({}, state, { +                all: all +            }); +        default: +            return state; +    } +} + +exports.updateFlows = updateList; +exports.fetchFlows = fetchList; + +},{"./utils/list":26}],25:[function(require,module,exports){  'use strict';  Object.defineProperty(exports, "__esModule", { @@ -4563,24 +4618,29 @@ Object.defineProperty(exports, "__esModule", {  var _redux = require('redux'); -var _eventLog = require('./eventLog.js'); +var _eventLog = require('./eventLog');  var _eventLog2 = _interopRequireDefault(_eventLog); -var _websocket = require('./websocket.js'); +var _websocket = require('./websocket');  var _websocket2 = _interopRequireDefault(_websocket); +var _flows = require('./flows'); + +var _flows2 = _interopRequireDefault(_flows); +  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }  var rootReducer = (0, _redux.combineReducers)({      eventLog: _eventLog2.default, -    websocket: _websocket2.default +    websocket: _websocket2.default, +    flows: _flows2.default  });  exports.default = rootReducer; -},{"./eventLog.js":23,"./websocket.js":27,"redux":"redux"}],25:[function(require,module,exports){ +},{"./eventLog":23,"./flows":24,"./websocket":28,"redux":"redux"}],26:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -4738,7 +4798,7 @@ function makeList(actionType, fetchURL) {      return { reduceList: reduceList, addToList: addToList, updateList: updateList, fetchList: fetchList };  } -},{"../../utils":32}],26:[function(require,module,exports){ +},{"../../utils":33}],27:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -4815,7 +4875,7 @@ function updateViewFilter(list) {      return filtered;  } -},{"./list":25}],27:[function(require,module,exports){ +},{"./list":26}],28:[function(require,module,exports){  'use strict';  Object.defineProperty(exports, "__esModule", { @@ -4856,7 +4916,7 @@ function disconnected() {      return { type: DISCONNECTED };  } -},{}],28:[function(require,module,exports){ +},{}],29:[function(require,module,exports){  "use strict";  module.exports = function () { @@ -6760,7 +6820,7 @@ module.exports = function () {    };  }(); -},{"../flow/utils.js":29}],29:[function(require,module,exports){ +},{"../flow/utils.js":30}],30:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -6894,7 +6954,7 @@ var parseHttpVersion = exports.parseHttpVersion = function parseHttpVersion(http      });  }; -},{"jquery":"jquery","lodash":"lodash"}],30:[function(require,module,exports){ +},{"jquery":"jquery","lodash":"lodash"}],31:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -7063,7 +7123,7 @@ function SettingsStore() {      return new LiveDictStore(_actions.ActionTypes.SETTINGS_STORE);  } -},{"../actions.js":2,"../dispatcher.js":22,"events":1,"jquery":"jquery","lodash":"lodash"}],31:[function(require,module,exports){ +},{"../actions.js":2,"../dispatcher.js":22,"events":1,"jquery":"jquery","lodash":"lodash"}],32:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { @@ -7193,7 +7253,7 @@ _lodash2.default.extend(StoreView.prototype, _events.EventEmitter.prototype, {      }  }); -},{"../utils.js":32,"events":1,"lodash":"lodash"}],32:[function(require,module,exports){ +},{"../utils.js":33,"events":1,"lodash":"lodash"}],33:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { diff --git a/web/src/js/connection.js b/web/src/js/connection.js index bf9b16d3..ac39a018 100644 --- a/web/src/js/connection.js +++ b/web/src/js/connection.js @@ -2,6 +2,7 @@ import {ConnectionActions} from "./actions.js";  import {AppDispatcher} from "./dispatcher.js";  import * as webSocketActions from "./ducks/websocket"  import * as eventLogActions from "./ducks/eventLog" +import * as flowActions from "./ducks/flows"  export default function Connection(url, dispatch) {      if (url[0] === "/") { @@ -11,9 +12,9 @@ export default function Connection(url, dispatch) {      var ws = new WebSocket(url);      ws.onopen = function () {          dispatch(webSocketActions.connected()) +        dispatch(flowActions.fetchFlows())          dispatch(eventLogActions.fetchLogEntries())          ConnectionActions.open() -        //TODO: fetch stuff!      };      ws.onmessage = function (m) {          var message = JSON.parse(m.data); @@ -21,6 +22,8 @@ export default function Connection(url, dispatch) {          switch (message.type) {              case eventLogActions.UPDATE_LOG:                  return dispatch(eventLogActions.updateLogEntries(message)) +            case flowActions.UPDATE_FLOWS: +                return dispatch(flowActions.updateFlows(message))              default:                  console.warn("unknown message", message)          } diff --git a/web/src/js/ducks/eventLog.js b/web/src/js/ducks/eventLog.js index 883f537c..00b25bcf 100644 --- a/web/src/js/ducks/eventLog.js +++ b/web/src/js/ducks/eventLog.js @@ -1,4 +1,4 @@ -import makeList, {ADD} from "./utils/list" +import makeList from "./utils/list"  import {updateViewFilter, updateViewList} from "./utils/view"  const TOGGLE_FILTER = 'TOGGLE_EVENTLOG_FILTER' @@ -10,7 +10,7 @@ const {      addToList,      updateList,      fetchList, -} = makeList(UPDATE_LOG, "/events"); +} = makeList(UPDATE_LOG, "/events")  const defaultState = { @@ -67,7 +67,7 @@ export function toggleEventLogFilter(filter) {  export function toggleEventLogVisibility() {      return {type: TOGGLE_VISIBILITY}  } -let id = 0; +let id = 0  export function addLogEntry(message, level = "web") {      return addToList({          message, diff --git a/web/src/js/ducks/flows.js b/web/src/js/ducks/flows.js new file mode 100644 index 00000000..fb934489 --- /dev/null +++ b/web/src/js/ducks/flows.js @@ -0,0 +1,29 @@ +import makeList from "./utils/list" + +export const UPDATE_FLOWS = "UPDATE_FLOWS" + +const { +    reduceList, +    updateList, +    fetchList, +} = makeList(UPDATE_FLOWS, "/flows") + + +const defaultState = { +    all: reduceList(), +} + +export default function reducer(state = defaultState, action) { +    switch (action.type) { +        case UPDATE_FLOWS: +            let all = reduceList(state.all, action) +            return { +                ...state, +                all, +            } +        default: +            return state +    } +} + +export {updateList as updateFlows, fetchList as fetchFlows}
\ No newline at end of file diff --git a/web/src/js/ducks/index.js b/web/src/js/ducks/index.js index 3043344c..6c521a70 100644 --- a/web/src/js/ducks/index.js +++ b/web/src/js/ducks/index.js @@ -1,10 +1,12 @@  import {combineReducers} from 'redux' -import eventLog from './eventLog.js' -import websocket from './websocket.js' +import eventLog from './eventLog' +import websocket from './websocket' +import flows from './flows'  const rootReducer = combineReducers({      eventLog,      websocket, +    flows,  })  export default rootReducer
\ No newline at end of file | 
