Compare commits

...

3 Commits

1 changed files with 32 additions and 22 deletions

54
unsanitize-safelinks Executable file → Normal file
View File

@ -38,15 +38,22 @@ import cchardet as chardet
def sanitize_safelink(url):
if "safelinks.protection.outlook.com" in url:
target = urlparse(parse_qs(urlparse(url).query)['url'][0])
return target.geturl()
try:
target = urlparse(parse_qs(urlparse(url).query)['url'][0])
return target.geturl()
except:
return " Warning: Removed corrupted safelink. "
else:
return url
def unsanitize_txt(content):
return re.sub(
url_re = re.compile(
r'(http[s]?://(?:[a-zA-Z]|[0-9]|[$-\'\/\+-;=\?-@.&+_]|[!*,]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)',
lambda x: (sanitize_safelink(x.group(1))), content).rstrip()
re.MULTILINE)
return re.sub(url_re, lambda x: (sanitize_safelink(x.group(1))),
content).rstrip()
def unsanitize_html(content):
soup = BeautifulSoup(content, "html.parser")
@ -57,42 +64,44 @@ def unsanitize_html(content):
del a['originalsrc']
return str(soup)
def main():
"""Main function of the safelink tool."""
parser = argparse.ArgumentParser()
parser.add_argument(
"--html",
help="HTML",
action="store_true",
default=False)
parser.add_argument(
"-i",
"--in-situ",
help="modify file",
action="store_true",
default=False)
parser.add_argument(
"-v", "--verbose", help="increase verbosity", action="store_true")
parser.add_argument("--html",
help="HTML",
action="store_true",
default=False)
parser.add_argument("-i",
"--in-situ",
help="modify file",
action="store_true",
default=False)
parser.add_argument("-v",
"--verbose",
help="increase verbosity",
action="store_true")
parser.add_argument('file', nargs='?', default=None)
args = parser.parse_args()
# parse command line
# parse command line
if args.file:
fhandle = open(args.file, mode="rb")
else:
fhandle = sys.stdin.buffer
data = fhandle.read()
if fhandle is not sys.stdin.buffer:
fhandle.close()
content = data.decode(encoding=chardet.detect(data)['encoding'], errors="replace")
content = data.decode(encoding=chardet.detect(data)['encoding'],
errors="replace")
if args.html:
content=unsanitize_html(content)
content = unsanitize_html(content)
else:
content=unsanitize_txt(content)
content = unsanitize_txt(content)
if args.file and args.in_situ:
st = os.stat(args.file)
@ -104,5 +113,6 @@ def main():
else:
print(content)
if __name__ == "__main__":
main()