aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/console
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/console')
-rw-r--r--libmproxy/console/__init__.py42
-rw-r--r--libmproxy/console/contentview.py39
-rw-r--r--libmproxy/console/grideditor.py9
-rw-r--r--libmproxy/console/help.py4
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")]
),