aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/console/flowlist.py
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/console/flowlist.py')
-rw-r--r--libmproxy/console/flowlist.py150
1 files changed, 89 insertions, 61 deletions
diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py
index 9e7c6d69..946bd97b 100644
--- a/libmproxy/console/flowlist.py
+++ b/libmproxy/console/flowlist.py
@@ -1,7 +1,8 @@
from __future__ import absolute_import
import urwid
from netlib import http
-from . import common
+from . import common, signals
+
def _mkhelp():
text = []
@@ -35,6 +36,7 @@ footer = [
('heading_key', "?"), ":help ",
]
+
class EventListBox(urwid.ListBox):
def __init__(self, master):
self.master = master
@@ -60,7 +62,10 @@ class BodyPile(urwid.Pile):
self,
[
FlowListBox(master),
- urwid.Frame(EventListBox(master), header = self.inactive_header)
+ urwid.Frame(
+ EventListBox(master),
+ header = self.inactive_header
+ )
]
)
self.master = master
@@ -80,39 +85,41 @@ class BodyPile(urwid.Pile):
# This is essentially a copypasta from urwid.Pile's keypress handler.
# So much for "closed for modification, but open for extension".
item_rows = None
- if len(size)==2:
- item_rows = self.get_item_rows( size, focus=True )
+ if len(size) == 2:
+ item_rows = self.get_item_rows(size, focus = True)
i = self.widget_list.index(self.focus_item)
- tsize = self.get_item_size(size,i,True,item_rows)
- return self.focus_item.keypress( tsize, key )
+ tsize = self.get_item_size(size, i, True, item_rows)
+ return self.focus_item.keypress(tsize, key)
-class ConnectionItem(common.WWrap):
+class ConnectionItem(urwid.WidgetWrap):
def __init__(self, master, state, flow, focus):
self.master, self.state, self.flow = master, state, flow
self.f = focus
w = self.get_text()
- common.WWrap.__init__(self, w)
+ urwid.WidgetWrap.__init__(self, w)
def get_text(self):
- return common.format_flow(self.flow, self.f, hostheader=self.master.showhost)
+ return common.format_flow(
+ self.flow,
+ self.f,
+ hostheader = self.master.showhost
+ )
def selectable(self):
return True
def save_flows_prompt(self, k):
if k == "a":
- self.master.path_prompt(
- "Save all flows to: ",
- self.state.last_saveload,
- self.master.save_flows
+ signals.status_prompt_path.send(
+ prompt = "Save all flows to",
+ callback = self.master.save_flows
)
else:
- self.master.path_prompt(
- "Save this flow to: ",
- self.state.last_saveload,
- self.master.save_one_flow,
- self.flow
+ signals.status_prompt_path.send(
+ prompt = "Save this flow to",
+ callback = self.master.save_one_flow,
+ args = (self.flow,)
)
def stop_server_playback_prompt(self, a):
@@ -125,22 +132,25 @@ class ConnectionItem(common.WWrap):
[i.copy() for i in self.master.state.view],
self.master.killextra, self.master.rheaders,
False, self.master.nopop,
- self.master.options.replay_ignore_params, self.master.options.replay_ignore_content,
- self.master.options.replay_ignore_payload_params
+ self.master.options.replay_ignore_params,
+ self.master.options.replay_ignore_content,
+ self.master.options.replay_ignore_payload_params,
+ self.master.options.replay_ignore_host
)
elif k == "t":
self.master.start_server_playback(
[self.flow.copy()],
self.master.killextra, self.master.rheaders,
False, self.master.nopop,
- self.master.options.replay_ignore_params, self.master.options.replay_ignore_content,
- self.master.options.replay_ignore_payload_params
+ self.master.options.replay_ignore_params,
+ self.master.options.replay_ignore_content,
+ self.master.options.replay_ignore_payload_params,
+ self.master.options.replay_ignore_host
)
else:
- self.master.path_prompt(
- "Server replay path: ",
- self.state.last_saveload,
- self.master.server_playback_path
+ signals.status_prompt_path.send(
+ prompt = "Server replay path",
+ callback = self.master.server_playback_path
)
def keypress(self, (maxcol,), key):
@@ -158,43 +168,44 @@ class ConnectionItem(common.WWrap):
elif key == "r":
r = self.master.replay_request(self.flow)
if r:
- self.master.statusbar.message(r)
+ signals.status_message.send(message=r)
self.master.sync_list_view()
elif key == "S":
if not self.master.server_playback:
- self.master.prompt_onekey(
- "Server Replay",
- (
+ signals.status_prompt_onekey.send(
+ prompt = "Server Replay",
+ keys = (
("all flows", "a"),
("this flow", "t"),
("file", "f"),
),
- self.server_replay_prompt,
+ callback = self.server_replay_prompt,
)
else:
- self.master.prompt_onekey(
- "Stop current server replay?",
- (
+ signals.status_prompt_onekey.send(
+ prompt = "Stop current server replay?",
+ keys = (
("yes", "y"),
("no", "n"),
),
- self.stop_server_playback_prompt,
+ callback = self.stop_server_playback_prompt,
)
elif key == "V":
if not self.flow.modified():
- self.master.statusbar.message("Flow not modified.")
+ signals.status_message.send(message="Flow not modified.")
return
self.state.revert(self.flow)
self.master.sync_list_view()
- self.master.statusbar.message("Reverted.")
+ signals.status_message.send(message="Reverted.")
elif key == "w":
- self.master.prompt_onekey(
- "Save",
- (
+ signals.status_prompt_onekey.send(
+ self,
+ prompt = "Save",
+ keys = (
("all flows", "a"),
("this flow", "t"),
),
- self.save_flows_prompt,
+ callback = self.save_flows_prompt,
)
elif key == "X":
self.flow.kill(self.master)
@@ -202,11 +213,10 @@ class ConnectionItem(common.WWrap):
if self.flow.request:
self.master.view_flow(self.flow)
elif key == "|":
- self.master.path_prompt(
- "Send flow to script: ",
- self.state.last_script,
- self.master.run_script_once,
- self.flow
+ signals.status_prompt_path.send(
+ prompt = "Send flow to script",
+ callback = self.master.run_script_once,
+ args = (self.flow,)
)
elif key == "g":
common.ask_copy_part("a", self.flow, self.master, self.state)
@@ -249,11 +259,16 @@ class FlowListBox(urwid.ListBox):
def get_method_raw(self, k):
if k:
- self.get_url(k)
+ self.get_url(k)
def get_method(self, k):
if k == "e":
- self.master.prompt("Method:", "", self.get_method_raw)
+ signals.status_prompt.send(
+ self,
+ prompt = "Method",
+ text = "",
+ callback = self.get_method_raw
+ )
else:
method = ""
for i in common.METHOD_OPTIONS:
@@ -261,13 +276,18 @@ class FlowListBox(urwid.ListBox):
method = i[0].upper()
self.get_url(method)
- def get_url(self,method):
- self.master.prompt("URL:", "http://www.example.com/", self.new_request, method)
+ def get_url(self, method):
+ signals.status_prompt.send(
+ prompt = "URL",
+ text = "http://www.example.com/",
+ callback = self.new_request,
+ args = (method,)
+ )
def new_request(self, url, method):
parts = http.parse_url(str(url))
if not parts:
- self.master.statusbar.message("Invalid Url")
+ signals.status_message.send(message="Invalid Url")
return
scheme, host, port, path = parts
f = self.master.create_request(method, scheme, host, port, path)
@@ -283,25 +303,33 @@ class FlowListBox(urwid.ListBox):
elif key == "e":
self.master.toggle_eventlog()
elif key == "l":
- self.master.prompt("Limit: ", self.master.state.limit_txt, self.master.set_limit)
+ signals.status_prompt.send(
+ prompt = "Limit",
+ text = self.master.state.limit_txt,
+ callback = self.master.set_limit
+ )
elif key == "L":
- self.master.path_prompt(
- "Load flows: ",
- self.master.state.last_saveload,
- self.master.load_flows_callback
+ signals.status_prompt_path.send(
+ self,
+ prompt = "Load flows",
+ callback = self.master.load_flows_callback
)
elif key == "n":
- self.master.prompt_onekey("Method", common.METHOD_OPTIONS, self.get_method)
+ signals.status_prompt_onekey.send(
+ prompt = "Method",
+ keys = common.METHOD_OPTIONS,
+ callback = self.get_method
+ )
elif key == "F":
self.master.toggle_follow_flows()
elif key == "W":
if self.master.stream:
self.master.stop_stream()
else:
- self.master.path_prompt(
- "Stream flows to: ",
- self.master.state.last_saveload,
- self.master.start_stream_to_path
+ signals.status_prompt_path.send(
+ self,
+ prompt = "Stream flows to",
+ callback = self.master.start_stream_to_path
)
else:
return urwid.ListBox.keypress(self, size, key)