-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathJSBeautifier.py
73 lines (56 loc) · 2.38 KB
/
JSBeautifier.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# JSON/Javascript Beautifier
# Author: Manjesh S (@Manjesh24)
from burp import IBurpExtender
from burp import IMessageEditorTab
from burp import IMessageEditorTabFactory
import jsbeautifier
ContentTypes = [
"application/json",
"text/json",
"text/x-json",
"application/javascript",
"text/javascript",
]
class BurpExtender(IBurpExtender, IMessageEditorTabFactory):
def registerExtenderCallbacks(self, callbacks):
self._callbacks = callbacks
self._helpers = callbacks.getHelpers()
callbacks.setExtensionName("JSON/JS Beautifier")
callbacks.registerMessageEditorTabFactory(self)
print("---Beautifier Installed---")
return
def createNewInstance(self, controller, editable):
return DisplayValues(self, controller, editable)
class DisplayValues(IMessageEditorTab):
def __init__(self, extender, controller, editable):
self._txtInput = extender._callbacks.createTextEditor()
self._extender = extender
def getUiComponent(self):
return self._txtInput.getComponent()
def getTabCaption(self):
return "JSON/JS Beautifier"
def isEnabled(self, content, isRequest):
if isRequest == True:
re = self._extender._helpers.analyzeRequest(content)
else:
re = self._extender._helpers.analyzeResponse(content)
for header in re.getHeaders():
if header.lower().startswith("content-type:"):
content_type = header.split(":")[1].lower()
for allowedType in ContentTypes:
if content_type.find(allowedType) > 0:
extdata = content[re.getBodyOffset():].tostring()
try:
self._decodedAuthorizationHeader = jsbeautifier.beautify(extdata)
except Exception as e:
print(e)
self._decodedAuthorizationHeader = "Unable to beatify. Please check extender logs."
return True
return False
def setMessage(self, content, isRequest):
if (content is None):
self._txtInput.setText(None)
self._txtInput.setEditable(False)
else:
self._txtInput.setText(self._decodedAuthorizationHeader)
return