diff options
author | Maximilian Hils <git@maximilianhils.com> | 2014-12-25 16:10:47 +0100 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2014-12-25 16:10:47 +0100 |
commit | 1f454b577f7db434d79388eb101006b065f62a2b (patch) | |
tree | 4f8126bc7b5824ff8f805e61475171ad0ffddabd /libmproxy/web/static/js/app.js | |
parent | 7d793ae16245cfd902a9ca9d3add38b09a4db368 (diff) | |
download | mitmproxy-1f454b577f7db434d79388eb101006b065f62a2b.tar.gz mitmproxy-1f454b577f7db434d79388eb101006b065f62a2b.tar.bz2 mitmproxy-1f454b577f7db434d79388eb101006b065f62a2b.zip |
web: CSP, revert functionality, serve content
Diffstat (limited to 'libmproxy/web/static/js/app.js')
-rw-r--r-- | libmproxy/web/static/js/app.js | 87 |
1 files changed, 29 insertions, 58 deletions
diff --git a/libmproxy/web/static/js/app.js b/libmproxy/web/static/js/app.js index 92f48d14..984db943 100644 --- a/libmproxy/web/static/js/app.js +++ b/libmproxy/web/static/js/app.js @@ -231,6 +231,9 @@ var FlowActions = { replay: function(flow){ jQuery.post("/flows/" + flow.id + "/replay"); }, + revert: function(flow){ + jQuery.post("/flows/" + flow.id + "/revert"); + }, update: function (flow) { AppDispatcher.dispatchViewAction({ type: ActionTypes.FLOW_STORE, @@ -2891,7 +2894,7 @@ var FileMenu = React.createClass({displayName: 'FileMenu', React.createElement("li", {role: "presentation", className: "divider"}), React.createElement("li", null, React.createElement("a", {href: "http://mitm.it/", target: "_blank"}, - React.createElement("i", {className: "fa fa-fw fa-lock"}), + React.createElement("i", {className: "fa fa-fw fa-external-link"}), "Install Certificates..." ) ) @@ -3258,70 +3261,23 @@ var FlowTable = React.createClass({displayName: 'FlowTable', } }); -var DeleteButton = React.createClass({displayName: 'DeleteButton', - onClick: function (e) { - e.preventDefault(); - FlowActions.delete(this.props.flow); - }, - render: function () { - return ( - React.createElement("a", {title: "[d]elete Flow", - href: "#", - className: "nav-action", - onClick: this.onClick}, - React.createElement("i", {className: "fa fa-fw fa-trash"}) - ) - ); - } -}); -var DuplicateButton = React.createClass({displayName: 'DuplicateButton', +var NavAction = React.createClass({displayName: 'NavAction', onClick: function (e) { e.preventDefault(); - FlowActions.duplicate(this.props.flow); + this.props.onClick(); }, render: function () { return ( - React.createElement("a", {title: "[D]uplicate Flow", + React.createElement("a", {title: this.props.title, href: "#", className: "nav-action", onClick: this.onClick}, - React.createElement("i", {className: "fa fa-fw fa-edit"}) - ) - ); - } -}); -var ReplayButton = React.createClass({displayName: 'ReplayButton', - onClick: function (e) { - e.preventDefault(); - FlowActions.replay(this.props.flow); - }, - render: function () { - return ( - React.createElement("a", {title: "[r]eplay Flow", - href: "#", - className: "nav-action", - onClick: this.onClick}, - React.createElement("i", {className: "fa fa-fw fa-close"}) - ) - ); - } -}); -var AcceptButton = React.createClass({displayName: 'AcceptButton', - onClick: function (e) { - e.preventDefault(); - FlowActions.accept(this.props.flow); - }, - render: function () { - return ( - React.createElement("a", {title: "[a]ccept (resume) Flow", - href: "#", - className: "nav-action", - onClick: this.onClick}, - React.createElement("i", {className: "fa fa-fw fa-play"}) + React.createElement("i", {className: "fa fa-fw " + this.props.icon}) ) ); } }); + var FlowDetailNav = React.createClass({displayName: 'FlowDetailNav', render: function () { var flow = this.props.flow; @@ -3339,13 +3295,23 @@ var FlowDetailNav = React.createClass({displayName: 'FlowDetailNav', onClick: onClick}, str); }.bind(this)); + var acceptButton = null; + if(flow.intercepted){ + acceptButton = React.createElement(NavAction, {title: "[a]ccept intercepted flow", icon: "fa-play", onClick: FlowActions.accept.bind(null, flow)}) + } + var revertButton = null; + if(flow.modified){ + revertButton = React.createElement(NavAction, {title: "revert changes to flow [V]", icon: "fa-history", onClick: FlowActions.revert.bind(null, flow)}) + } + return ( React.createElement("nav", {ref: "head", className: "nav-tabs nav-tabs-sm"}, tabs, - React.createElement(DeleteButton, {flow: flow}), - React.createElement(DuplicateButton, {flow: flow}), - React.createElement(ReplayButton, {flow: flow}), - flow.intercepted ? React.createElement(AcceptButton, {flow: this.props.flow}) : null + React.createElement(NavAction, {title: "[d]elete flow", icon: "fa-trash", onClick: FlowActions.delete.bind(null, flow)}), + React.createElement(NavAction, {title: "[D]uplicate flow", icon: "fa-copy", onClick: FlowActions.duplicate.bind(null, flow)}), + React.createElement(NavAction, {disabled: true, title: "[r]eplay flow", icon: "fa-repeat", onClick: FlowActions.replay.bind(null, flow)}), + acceptButton, + revertButton ) ); } @@ -3855,7 +3821,7 @@ var MainView = React.createClass({displayName: 'MainView', case Key.A: if (e.shiftKey) { FlowActions.accept_all(); - } else if (flow) { + } else if (flow && flow.intercepted) { FlowActions.accept(flow); } break; @@ -3864,6 +3830,11 @@ var MainView = React.createClass({displayName: 'MainView', FlowActions.replay(flow); } break; + case Key.V: + if(e.shiftKey && flow && flow.modified) { + FlowActions.revert(flow); + } + break; default: console.debug("keydown", e.keyCode); return; |