aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/web/__init__.py8
-rw-r--r--mitmproxy/web/static/app.js116
-rw-r--r--web/src/js/connection.js5
-rw-r--r--web/src/js/ducks/eventLog.js6
-rw-r--r--web/src/js/ducks/flows.js29
-rw-r--r--web/src/js/ducks/index.js6
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