From 1a06f15ee0423941e906f6fc654094b0fa9a9e3a Mon Sep 17 00:00:00 2001 From: Marcelo Glezer Date: Wed, 14 Jan 2015 12:36:19 -0300 Subject: added copy functionality to flowview too --- libmproxy/console/flowview.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'libmproxy/console/flowview.py') diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py index 9e305b8a..25b085c3 100644 --- a/libmproxy/console/flowview.py +++ b/libmproxy/console/flowview.py @@ -4,7 +4,7 @@ import urwid from . import common, grideditor, contentview from .. import utils, flow, controller from ..protocol.http import HTTPResponse, CONTENT_MISSING, decoded - +import pyperclip class SearchError(Exception): pass @@ -19,6 +19,7 @@ def _mkhelp(): ("D", "duplicate flow"), ("e", "edit request/response"), ("f", "load full body data"), + ("g", "copy response(content/headers) to clipboard"), ("m", "change body display mode for this entity"), (None, common.highlight_key("automatic", "a") + @@ -648,6 +649,18 @@ class FlowView(common.WWrap): ) self.master.refresh_flow(self.flow) + def server_copy_response(self, k): + if k == "c": + try: + pyperclip.copy(self.flow.response_content()) + except TypeError: + self.master.statusbar.message("Content is binary or can be converted to text") + elif k == "h": + try: + pyperclip.copy(self.flow.response_headers()) + except TypeError: + self.master.statusbar.message("Error converting headers to text") + def delete_body(self, t): if t == "m": val = CONTENT_MISSING @@ -751,6 +764,15 @@ class FlowView(common.WWrap): ) self.master.refresh_flow(self.flow) self.master.statusbar.message("") + elif key == "g": + self.master.prompt_onekey( + "Copy Response", + ( + ("content", "c"), + ("headers", "h"), + ), + self.server_copy_response, + ) elif key == "m": p = list(contentview.view_prompts) p.insert(0, ("Clear", "C")) -- cgit v1.2.3 From d9f562b5c0ba0b4769455c117c1321d63ff6497c Mon Sep 17 00:00:00 2001 From: Marcelo Glezer Date: Wed, 14 Jan 2015 14:45:19 -0300 Subject: used get_decoded_content and removed decode call from headers as max suggested --- libmproxy/console/flowview.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libmproxy/console/flowview.py') diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py index 25b085c3..08a0148f 100644 --- a/libmproxy/console/flowview.py +++ b/libmproxy/console/flowview.py @@ -652,12 +652,12 @@ class FlowView(common.WWrap): def server_copy_response(self, k): if k == "c": try: - pyperclip.copy(self.flow.response_content()) + pyperclip.copy(self.flow.response.get_decoded_content()) except TypeError: self.master.statusbar.message("Content is binary or can be converted to text") elif k == "h": try: - pyperclip.copy(self.flow.response_headers()) + pyperclip.copy(str(self.flow.response.headers)) except TypeError: self.master.statusbar.message("Error converting headers to text") -- cgit v1.2.3 From f21a44dd48a1ea7401378830fc38e5a864e927e5 Mon Sep 17 00:00:00 2001 From: Marcelo Glezer Date: Thu, 15 Jan 2015 08:46:10 -0300 Subject: removed pyperclip hard dependencies --- libmproxy/console/flowview.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'libmproxy/console/flowview.py') diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py index 08a0148f..667a7407 100644 --- a/libmproxy/console/flowview.py +++ b/libmproxy/console/flowview.py @@ -4,7 +4,10 @@ import urwid from . import common, grideditor, contentview from .. import utils, flow, controller from ..protocol.http import HTTPResponse, CONTENT_MISSING, decoded -import pyperclip +try: + import pyperclip +except: + pyperclip = False class SearchError(Exception): pass @@ -650,16 +653,19 @@ class FlowView(common.WWrap): self.master.refresh_flow(self.flow) def server_copy_response(self, k): - if k == "c": - try: - pyperclip.copy(self.flow.response.get_decoded_content()) - except TypeError: - self.master.statusbar.message("Content is binary or can be converted to text") - elif k == "h": - try: - pyperclip.copy(str(self.flow.response.headers)) - except TypeError: - self.master.statusbar.message("Error converting headers to text") + if pyperclip: + if k == "c": + try: + pyperclip.copy(self.flow.response.get_decoded_content()) + except TypeError: + self.master.statusbar.message("Content is binary or can be converted to text") + elif k == "h": + try: + pyperclip.copy(str(self.flow.response.headers)) + except TypeError: + self.master.statusbar.message("Error converting headers to text") + else: + self.master.statusbar.message("No clipboard support on your system, sorry.") def delete_body(self, t): if t == "m": -- cgit v1.2.3 From c57efffe01bdc29e08b5eaa1a9b7071336bd4bb1 Mon Sep 17 00:00:00 2001 From: Marcelo Glezer Date: Thu, 15 Jan 2015 09:36:59 -0300 Subject: extracted server_copy_response to common --- libmproxy/console/flowview.py | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) (limited to 'libmproxy/console/flowview.py') diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py index 667a7407..abca2ed6 100644 --- a/libmproxy/console/flowview.py +++ b/libmproxy/console/flowview.py @@ -4,10 +4,7 @@ import urwid from . import common, grideditor, contentview from .. import utils, flow, controller from ..protocol.http import HTTPResponse, CONTENT_MISSING, decoded -try: - import pyperclip -except: - pyperclip = False + class SearchError(Exception): pass @@ -652,21 +649,6 @@ class FlowView(common.WWrap): ) self.master.refresh_flow(self.flow) - def server_copy_response(self, k): - if pyperclip: - if k == "c": - try: - pyperclip.copy(self.flow.response.get_decoded_content()) - except TypeError: - self.master.statusbar.message("Content is binary or can be converted to text") - elif k == "h": - try: - pyperclip.copy(str(self.flow.response.headers)) - except TypeError: - self.master.statusbar.message("Error converting headers to text") - else: - self.master.statusbar.message("No clipboard support on your system, sorry.") - def delete_body(self, t): if t == "m": val = CONTENT_MISSING @@ -777,7 +759,9 @@ class FlowView(common.WWrap): ("content", "c"), ("headers", "h"), ), - self.server_copy_response, + common.server_copy_response, + self.flow.response, + self.master.statusbar ) elif key == "m": p = list(contentview.view_prompts) -- cgit v1.2.3 From 8f66fe1bfc16d0bb63acc267632471640939371e Mon Sep 17 00:00:00 2001 From: Marcelo Glezer Date: Thu, 15 Jan 2015 12:37:26 -0300 Subject: added support for saving file if content is binary. still wip --- libmproxy/console/flowview.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'libmproxy/console/flowview.py') diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py index abca2ed6..bc0b5f83 100644 --- a/libmproxy/console/flowview.py +++ b/libmproxy/console/flowview.py @@ -760,8 +760,9 @@ class FlowView(common.WWrap): ("headers", "h"), ), common.server_copy_response, + self.master, + self.state, self.flow.response, - self.master.statusbar ) elif key == "m": p = list(contentview.view_prompts) -- cgit v1.2.3 From 3bcf0cbba894ad12d4cfc438d26cdf22d640416c Mon Sep 17 00:00:00 2001 From: Marcelo Glezer Date: Thu, 15 Jan 2015 12:57:00 -0300 Subject: used save_body from common when b key is pressed --- libmproxy/console/flowview.py | 41 ++++++++++++++--------------------------- 1 file changed, 14 insertions(+), 27 deletions(-) (limited to 'libmproxy/console/flowview.py') diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py index bc0b5f83..b964b92a 100644 --- a/libmproxy/console/flowview.py +++ b/libmproxy/console/flowview.py @@ -508,22 +508,6 @@ class FlowView(common.WWrap): self.flow.request.method = i[0].upper() self.master.refresh_flow(self.flow) - def save_body(self, path): - if not path: - return - self.state.last_saveload = path - if self.state.view_flow_mode == common.VIEW_FLOW_REQUEST: - c = self.flow.request - else: - c = self.flow.response - path = os.path.expanduser(path) - try: - f = file(path, "wb") - f.write(str(c.content)) - f.close() - except IOError, v: - self.master.statusbar.message(v.strerror) - def set_url(self, url): request = self.flow.request try: @@ -691,17 +675,20 @@ class FlowView(common.WWrap): elif key == "b": if conn: if self.state.view_flow_mode == common.VIEW_FLOW_REQUEST: - self.master.path_prompt( - "Save request body: ", - self.state.last_saveload, - self.save_body - ) - else: - self.master.path_prompt( - "Save response body: ", - self.state.last_saveload, - self.save_body - ) + msg = "Save request body: " + content = self.flow.request.content + else: + msg = "Save response body: " + content = self.flow.response.content + + self.master.path_prompt( + msg, + self.state.last_saveload, + common.save_body, + self.master, + self.state, + content, + ) elif key == "d": if self.state.flow_count() == 1: self.master.view_flowlist() -- cgit v1.2.3 From 9fc68d320c80ad07398a234630f6b59546a444e0 Mon Sep 17 00:00:00 2001 From: Marcelo Glezer Date: Fri, 16 Jan 2015 12:13:55 -0300 Subject: added support for copying request (content|header) to clipboard --- libmproxy/console/flowview.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'libmproxy/console/flowview.py') diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py index b964b92a..a759f109 100644 --- a/libmproxy/console/flowview.py +++ b/libmproxy/console/flowview.py @@ -20,6 +20,7 @@ def _mkhelp(): ("e", "edit request/response"), ("f", "load full body data"), ("g", "copy response(content/headers) to clipboard"), + ("G", "copy request(content/headers) to clipboard"), ("m", "change body display mode for this entity"), (None, common.highlight_key("automatic", "a") + @@ -746,11 +747,23 @@ class FlowView(common.WWrap): ("content", "c"), ("headers", "h"), ), - common.server_copy_response, + common.copy_message, self.master, self.state, self.flow.response, ) + elif key == "G": + self.master.prompt_onekey( + "Copy Request", + ( + ("content", "c"), + ("headers", "h"), + ), + common.copy_message, + self.master, + self.state, + self.flow.request, + ) elif key == "m": p = list(contentview.view_prompts) p.insert(0, ("Clear", "C")) -- cgit v1.2.3 From 75cca63b2687db5da0793c2e6d60d38531f18b59 Mon Sep 17 00:00:00 2001 From: Marcelo Glezer Date: Tue, 3 Feb 2015 15:41:09 -0300 Subject: added copy to clipboard support for url --- libmproxy/console/flowview.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'libmproxy/console/flowview.py') diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py index a759f109..c01bb08f 100644 --- a/libmproxy/console/flowview.py +++ b/libmproxy/console/flowview.py @@ -20,7 +20,7 @@ def _mkhelp(): ("e", "edit request/response"), ("f", "load full body data"), ("g", "copy response(content/headers) to clipboard"), - ("G", "copy request(content/headers) to clipboard"), + ("G", "copy request(content/headers/url) to clipboard"), ("m", "change body display mode for this entity"), (None, common.highlight_key("automatic", "a") + @@ -758,6 +758,7 @@ class FlowView(common.WWrap): ( ("content", "c"), ("headers", "h"), + ("url", "u"), ), common.copy_message, self.master, -- cgit v1.2.3