Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions faraday_plugins/plugins/repo/burp/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import binascii
import re
import base64
import distutils.util # pylint: disable=import-error
from urllib.parse import urlsplit
import lxml.etree as ET

Expand All @@ -26,6 +25,15 @@
__status__ = "Development"


def strtobool(value):
normalized = value.lower()
if normalized in ("y", "yes", "t", "true", "on", "1"):
return 1
if normalized in ("n", "no", "f", "false", "off", "0"):
return 0
raise ValueError(f"invalid truth value {value!r}")


class BurpXmlParser:
"""
The objective of this class is to parse an xml file generated by the burp tool.
Expand Down Expand Up @@ -158,7 +166,7 @@ def decode_binary_node(self, node):
it has it.
"""
if node is not None:
encoded = distutils.util.strtobool(node.get('base64', 'false'))
encoded = strtobool(node.get('base64', 'false'))
if encoded:
text = node.text or ""
text += "=" * (-len(text) % 4)
Expand Down
26 changes: 26 additions & 0 deletions tests/test_burp.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import lxml.etree as ET

from faraday_plugins.plugins.repo.burp.plugin import Item, strtobool


def test_decode_binary_node_keeps_plain_text():
node = ET.fromstring("<request base64='false'>plain text</request>")
item = Item.__new__(Item)

assert item.decode_binary_node(node) == "plain text"


def test_decode_binary_node_decodes_base64_text():
node = ET.fromstring("<request base64='true'>cGxhaW4gdGV4dA==</request>")
item = Item.__new__(Item)

assert item.decode_binary_node(node) == "plain text"


def test_strtobool_rejects_invalid_values():
try:
strtobool("maybe")
except ValueError as exc:
assert "invalid truth value 'maybe'" == str(exc)
else:
raise AssertionError("ValueError was not raised")