aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/web/static/js/app.js
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2014-12-25 16:10:47 +0100
committerMaximilian Hils <git@maximilianhils.com>2014-12-25 16:10:47 +0100
commit1f454b577f7db434d79388eb101006b065f62a2b (patch)
tree4f8126bc7b5824ff8f805e61475171ad0ffddabd /libmproxy/web/static/js/app.js
parent7d793ae16245cfd902a9ca9d3add38b09a4db368 (diff)
downloadmitmproxy-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.js87
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;