mirror of
https://github.com/MISP/misp-galaxy.git
synced 2024-12-04 20:57:18 +00:00
80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
|
from enum import Enum
|
||
|
|
||
|
|
||
|
class IndexType(Enum):
|
||
|
"""Enum of the currently supported index types."""
|
||
|
|
||
|
HASH = 1
|
||
|
JSON = 2
|
||
|
|
||
|
|
||
|
class IndexDefinition:
|
||
|
"""IndexDefinition is used to define a index definition for automatic
|
||
|
indexing on Hash or Json update."""
|
||
|
|
||
|
def __init__(
|
||
|
self,
|
||
|
prefix=[],
|
||
|
filter=None,
|
||
|
language_field=None,
|
||
|
language=None,
|
||
|
score_field=None,
|
||
|
score=1.0,
|
||
|
payload_field=None,
|
||
|
index_type=None,
|
||
|
):
|
||
|
self.args = []
|
||
|
self._append_index_type(index_type)
|
||
|
self._append_prefix(prefix)
|
||
|
self._append_filter(filter)
|
||
|
self._append_language(language_field, language)
|
||
|
self._append_score(score_field, score)
|
||
|
self._append_payload(payload_field)
|
||
|
|
||
|
def _append_index_type(self, index_type):
|
||
|
"""Append `ON HASH` or `ON JSON` according to the enum."""
|
||
|
if index_type is IndexType.HASH:
|
||
|
self.args.extend(["ON", "HASH"])
|
||
|
elif index_type is IndexType.JSON:
|
||
|
self.args.extend(["ON", "JSON"])
|
||
|
elif index_type is not None:
|
||
|
raise RuntimeError(f"index_type must be one of {list(IndexType)}")
|
||
|
|
||
|
def _append_prefix(self, prefix):
|
||
|
"""Append PREFIX."""
|
||
|
if len(prefix) > 0:
|
||
|
self.args.append("PREFIX")
|
||
|
self.args.append(len(prefix))
|
||
|
for p in prefix:
|
||
|
self.args.append(p)
|
||
|
|
||
|
def _append_filter(self, filter):
|
||
|
"""Append FILTER."""
|
||
|
if filter is not None:
|
||
|
self.args.append("FILTER")
|
||
|
self.args.append(filter)
|
||
|
|
||
|
def _append_language(self, language_field, language):
|
||
|
"""Append LANGUAGE_FIELD and LANGUAGE."""
|
||
|
if language_field is not None:
|
||
|
self.args.append("LANGUAGE_FIELD")
|
||
|
self.args.append(language_field)
|
||
|
if language is not None:
|
||
|
self.args.append("LANGUAGE")
|
||
|
self.args.append(language)
|
||
|
|
||
|
def _append_score(self, score_field, score):
|
||
|
"""Append SCORE_FIELD and SCORE."""
|
||
|
if score_field is not None:
|
||
|
self.args.append("SCORE_FIELD")
|
||
|
self.args.append(score_field)
|
||
|
if score is not None:
|
||
|
self.args.append("SCORE")
|
||
|
self.args.append(score)
|
||
|
|
||
|
def _append_payload(self, payload_field):
|
||
|
"""Append PAYLOAD_FIELD."""
|
||
|
if payload_field is not None:
|
||
|
self.args.append("PAYLOAD_FIELD")
|
||
|
self.args.append(payload_field)
|