added ini file, switched to Python2, implemented screenshot feature
This commit is contained in:
parent
2614ee4e4a
commit
a52a0c7dca
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
'''
|
'''
|
||||||
esm2markdown - McAfee ESM correlation rule XML export to markdown converter
|
esm2markdown - McAfee ESM correlation rule XML export to markdown converter
|
||||||
Copyright (C) 2018 Michael Clemens
|
Copyright (C) 2018 Michael Clemens
|
||||||
|
@ -19,23 +19,22 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
import os.path
|
||||||
|
from configparser import ConfigParser
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
|
|
||||||
# Configure here the style of keys and values e.g. to bold or italic.
|
|
||||||
# Default: Keys are displayed in bold, values have no specific style
|
|
||||||
key_style = "**"
|
|
||||||
value_style = ""
|
|
||||||
|
|
||||||
# Configure here how your lists will look like in Markdown
|
# Read configuration from ini file
|
||||||
level1 = "* "
|
config = ConfigParser()
|
||||||
level2 = " * "
|
config.read('esm2markdown.ini')
|
||||||
level3 = " * "
|
|
||||||
|
|
||||||
# Configure here if Rules should be alphabetically sorted or not
|
key_style = config.get('config', 'key_style')
|
||||||
sort_rules = True
|
value_style = config.get('config', 'value_style')
|
||||||
|
sort_rules = config.getboolean('config', 'sort_rules')
|
||||||
|
toc = config.getboolean('config', 'toc')
|
||||||
|
images = config.getboolean('config', 'images')
|
||||||
|
imagepath = config.get('config', 'imagepath')
|
||||||
|
|
||||||
# Configure TOC generation
|
|
||||||
toc = True
|
|
||||||
|
|
||||||
# Generates a line containing linebreaks, indented lists, styles etc.
|
# Generates a line containing linebreaks, indented lists, styles etc.
|
||||||
def line(level,key,value):
|
def line(level,key,value):
|
||||||
|
@ -44,9 +43,9 @@ def line(level,key,value):
|
||||||
output = ""
|
output = ""
|
||||||
valout = ""
|
valout = ""
|
||||||
|
|
||||||
if level == 1: lvl = level1
|
if level == 1: lvl = "* "
|
||||||
elif level == 2: lvl = level2
|
elif level == 2: lvl = " * "
|
||||||
elif level == 3: lvl = level3
|
elif level == 3: lvl = " * "
|
||||||
else: lvl = ""
|
else: lvl = ""
|
||||||
|
|
||||||
if key:
|
if key:
|
||||||
|
@ -77,6 +76,15 @@ def sortxml(xmlfile):
|
||||||
temp[:] = [item[-1] for item in data]
|
temp[:] = [item[-1] for item in data]
|
||||||
return root
|
return root
|
||||||
|
|
||||||
|
# Generate Markdown Syntax for Images
|
||||||
|
def addimage(rulename):
|
||||||
|
|
||||||
|
out = ""
|
||||||
|
imagefile = imagepath + "/" + rulename + ".png"
|
||||||
|
imagefile = imagefile.replace(" ", "_")
|
||||||
|
if (os.path.isfile(imagefile)):
|
||||||
|
out = "![](" + imagefile + ")\n\n\n"
|
||||||
|
return out
|
||||||
|
|
||||||
# Main Function
|
# Main Function
|
||||||
def main(xmlfile,outfile):
|
def main(xmlfile,outfile):
|
||||||
|
@ -98,8 +106,8 @@ def main(xmlfile,outfile):
|
||||||
text = rule.findtext('text')
|
text = rule.findtext('text')
|
||||||
cdata = etree.fromstring(text)
|
cdata = etree.fromstring(text)
|
||||||
# Print rule name as header
|
# Print rule name as header
|
||||||
message = "\n# " + rule.findtext('message')
|
rulename = rule.findtext('message')
|
||||||
file.write(message + "\n")
|
file.write("\n# " + rulename + "\n")
|
||||||
# Print rule description
|
# Print rule description
|
||||||
description = rule.findtext('description')
|
description = rule.findtext('description')
|
||||||
file.write("\n## Description\n")
|
file.write("\n## Description\n")
|
||||||
|
@ -114,6 +122,8 @@ def main(xmlfile,outfile):
|
||||||
for rs in cdata.getiterator('ruleset'):
|
for rs in cdata.getiterator('ruleset'):
|
||||||
file.write(line(1,"Group By:",rs.get('correlationField')))
|
file.write(line(1,"Group By:",rs.get('correlationField')))
|
||||||
file.write("\n## Correlation Details\n")
|
file.write("\n## Correlation Details\n")
|
||||||
|
if images:
|
||||||
|
file.write(addimage(rulename))
|
||||||
parameters = False
|
parameters = False
|
||||||
# Print rule parameters
|
# Print rule parameters
|
||||||
for param in cdata.getiterator('param'):
|
for param in cdata.getiterator('param'):
|
||||||
|
|
Loading…
Reference in New Issue