diff options
Diffstat (limited to 'libmproxy/console')
-rw-r--r-- | libmproxy/console/__init__.py | 42 | ||||
-rw-r--r-- | libmproxy/console/contentview.py | 39 | ||||
-rw-r--r-- | libmproxy/console/grideditor.py | 9 | ||||
-rw-r--r-- | libmproxy/console/help.py | 4 |
4 files changed, 70 insertions, 24 deletions
diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py index e5a0283c..210e2b95 100644 --- a/libmproxy/console/__init__.py +++ b/libmproxy/console/__init__.py @@ -174,8 +174,7 @@ class StatusBar(common.WWrap): r.append("[%s]"%(":".join(opts))) if self.master.scripts: - r.append("[script:%s]"%self.master.script.path) - + r.append("[scripts:%s]"%len(self.master.scripts)) if self.master.debug: r.append("[lt:%0.3f]"%self.master.looptime) @@ -335,7 +334,7 @@ class Options(object): "no_server", "refresh_server_playback", "rfile", - "script", + "scripts", "showhost", "replacements", "rheaders", @@ -410,11 +409,12 @@ class ConsoleMaster(flow.FlowMaster): self.debug = options.debug - if options.script: - err = self.load_script(options.script) - if err: - print >> sys.stderr, "Script load error:", err - sys.exit(1) + if options.scripts: + for i in options.scripts: + err = self.load_script(i) + if err: + print >> sys.stderr, "Script load error:", err + sys.exit(1) if options.wfile: err = self.start_stream(options.wfile) @@ -423,7 +423,7 @@ class ConsoleMaster(flow.FlowMaster): sys.exit(1) if options.app: - self.start_app(self.o.app_host, self.o.app_port, self.o.app_external) + self.start_app(self.options.app_host, self.options.app_port, self.options.app_external) def start_stream(self, path): path = os.path.expanduser(path) @@ -434,7 +434,6 @@ class ConsoleMaster(flow.FlowMaster): return str(v) self.stream_path = path - def _run_script_method(self, method, s, f): status, val = s.run(method, f) if val: @@ -447,7 +446,7 @@ class ConsoleMaster(flow.FlowMaster): if not path: return self.add_event("Running script on flow: %s"%path) - ret = self.get_script(path) + ret = self.get_script(shlex.split(path, posix=(os.name != "nt"))) if ret[0]: self.statusbar.message("Error loading script.") self.add_event("Error loading script:\n%s"%ret[0]) @@ -880,14 +879,21 @@ class ConsoleMaster(flow.FlowMaster): ) ) elif k == "s": - if self.scripts: - self.load_script(None) - else: - self.path_prompt( - "Set script: ", - self.state.last_script, - self.set_script + self.view_grideditor( + grideditor.ScriptEditor( + self, + [[i.argv[0]] for i in self.scripts], + None ) + ) + #if self.scripts: + # self.load_script(None) + #else: + # self.path_prompt( + # "Set script: ", + # self.state.last_script, + # self.set_script + # ) elif k == "S": if not self.server_playback: self.path_prompt( diff --git a/libmproxy/console/contentview.py b/libmproxy/console/contentview.py index 8dd8ad1d..70f39d83 100644 --- a/libmproxy/console/contentview.py +++ b/libmproxy/console/contentview.py @@ -1,11 +1,9 @@ +import logging import re, cStringIO, traceback, json import urwid -try: from PIL import Image -except ImportError: import Image - -try: from PIL.ExifTags import TAGS -except ImportError: from ExifTags import TAGS +from PIL import Image +from PIL.ExifTags import TAGS import lxml.html, lxml.etree import netlib.utils @@ -19,6 +17,18 @@ try: except ImportError: # pragma nocover pyamf = None +try: + import cssutils +except ImportError: # pragma nocover + cssutils = None +else: + cssutils.log.setLevel(logging.CRITICAL) + + cssutils.ser.prefs.keepComments = True + cssutils.ser.prefs.omitLastSemicolon = False + cssutils.ser.prefs.indentClosingBrace = False + cssutils.ser.prefs.validOnly = False + VIEW_CUTOFF = 1024*50 @@ -318,7 +328,23 @@ class ViewJavaScript: opts = jsbeautifier.default_options() opts.indent_size = 2 res = jsbeautifier.beautify(content[:limit], opts) - return "JavaScript", _view_text(res, len(content), limit) + return "JavaScript", _view_text(res, len(res), limit) + +class ViewCSS: + name = "CSS" + prompt = ("css", "c") + content_types = [ + "text/css" + ] + + def __call__(self, hdrs, content, limit): + if cssutils: + sheet = cssutils.parseString(content) + beautified = sheet.cssText + else: + beautified = content + + return "CSS", _view_text(beautified, len(beautified), limit) class ViewImage: @@ -409,6 +435,7 @@ views = [ ViewHTML(), ViewHTMLOutline(), ViewJavaScript(), + ViewCSS(), ViewURLEncoded(), ViewMultipart(), ViewImage(), diff --git a/libmproxy/console/grideditor.py b/libmproxy/console/grideditor.py index 4986840d..fa5142f3 100644 --- a/libmproxy/console/grideditor.py +++ b/libmproxy/console/grideditor.py @@ -482,3 +482,12 @@ class PathEditor(GridEditor): columns = 1 headings = ("Component",) + +class ScriptEditor(GridEditor): + title = "Editing scripts" + columns = 1 + headings = ("Path",) + def is_error(self, col, val): + return False + + diff --git a/libmproxy/console/help.py b/libmproxy/console/help.py index f8be6605..0d01ac6f 100644 --- a/libmproxy/console/help.py +++ b/libmproxy/console/help.py @@ -62,6 +62,10 @@ class HelpView(urwid.ListBox): [("text", ": JSON")] ), (None, + common.highlight_key("css", "c") + + [("text", ": CSS")] + ), + (None, common.highlight_key("urlencoded", "u") + [("text", ": URL-encoded data")] ), |