mirror of https://github.com/MISP/misp-modules
70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
#!/usr/bin/env python
|
|
|
|
from jinja2.sandbox import SandboxedEnvironment
|
|
|
|
default_template = """
|
|
# Tutorial: How to use jinja2 templating
|
|
|
|
:warning: For these examples, we consider the module received data under the MISP core format
|
|
|
|
1. You can use the dot `.` notation or the subscript syntax `[]` to access attributes of a variable
|
|
- `{% raw %}{{ Event.info }}{% endraw %}` -> {{ Event.info }}
|
|
- `{% raw %}{{ Event['info'] }}{% endraw %}` -> {{ Event['info'] }}
|
|
|
|
2. Jinja2 allows you to easily create list:
|
|
```{% raw %}
|
|
{% for attribute in Event.Attribute %}
|
|
- {{ attribute.value }}
|
|
{% endfor %}
|
|
{% endraw %}```
|
|
|
|
Gives:
|
|
{% for attribute in Event.Attribute %}
|
|
- {{ attribute.value }}
|
|
{% endfor %}
|
|
|
|
3. Jinja2 allows you to add logic
|
|
```{% raw %}
|
|
{% if "tlp:white" in Event.Tag %}
|
|
- This Event has the TLP:WHITE tag
|
|
{% else %}
|
|
- This Event doesn't have the TLP:WHITE tag
|
|
{% endif %}
|
|
{% endraw %}```
|
|
|
|
Gives:
|
|
{% if "tlp:white" in Event.Tag %}
|
|
- This Event has the TLP:WHITE tag
|
|
{% else %}
|
|
- This Event doesn't have the TLP:WHITE tag
|
|
{% endif %}
|
|
|
|
## Jinja2 allows you to modify variables by using filters
|
|
|
|
3. The `reverse` filter
|
|
- `{% raw %}{{ Event.info | reverse }}{% endraw %}` -> {{ Event.info | reverse }}
|
|
|
|
4. The `format` filter
|
|
- `{% raw %}{{ "%s :: %s" | format(Event.Attribute[0].type, Event.Attribute[0].value) }}{% endraw %}` -> {{ "%s :: %s" | format(Event.Attribute[0].type, Event.Attribute[0].value) }}
|
|
|
|
5.The `groupby` filter
|
|
```{% raw %}
|
|
{% for type, attributes in Event.Attribute|groupby("type") %}
|
|
- {{ type }}{% for attribute in attributes %}
|
|
- {{ attribute.value }}
|
|
{% endfor %}
|
|
{% endfor %}
|
|
{% endraw %}```
|
|
|
|
Gives:
|
|
{% for type, attributes in Event.Attribute|groupby("type") %}
|
|
- {{ type }}{% for attribute in attributes %}
|
|
- {{ attribute.value }}
|
|
{% endfor %}
|
|
{% endfor %}
|
|
"""
|
|
|
|
|
|
def renderTemplate(data, template=default_template):
|
|
env = SandboxedEnvironment()
|
|
return env.from_string(template).render(data) |