blob: 382e724f2554bcad6d8f9913fa1ed0d7d483c32d [file]
import json
import re
PARSER_SIGNALS_FAILURE = 418 # Universal Teapot error code
class BaseParser:
def __init__(self, parser_info):
self.mappers = parser_info['mappers']
self.used_facts = parser_info['used_facts']
self.source_facts = parser_info['source_facts']
@staticmethod
def set_value(search, match, used_facts):
"""
Determine the value of a source/target for a Relationship
:param search: a fact property to look for; either a source or target fact
:param match: a parsing match
:param used_facts: a list of facts that were used in a command
:return: either None, the value of a matched used_fact, or the parsing match
"""
if not search:
return None
for uf in used_facts:
if search == uf.trait:
return uf.value
return match
@staticmethod
def email(blob):
"""
Parse out email addresses
:param blob:
:return:
"""
return re.findall(r'[\w\.-]+@[\w\.-]+', blob)
@staticmethod
def filename(blob):
"""
Parse out filenames
:param blob:
:return:
"""
return re.findall(r'\b\w+\.\w+', blob)
@staticmethod
def line(blob):
"""
Split a blob by line
:param blob:
:return:
"""
return [x.rstrip('\r') for x in blob.split('\n') if x]
@staticmethod
def ip(blob):
return re.findall(r'\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b', blob)
@staticmethod
def broadcastip(blob):
return re.findall(r'(?<=broadcast ).*', blob)
@staticmethod
def load_json(blob):
try:
return json.loads(blob)
except Exception:
return None