| 1 | {% extends "base.html" %} |
| 2 | {% block heading %}Rule bundle review{% endblock %} |
| 3 | {% block content %} |
| 4 | <div class="panel"> |
| 5 | <h2>Bundle <span class="mono">{{ manifest.bundle_id }}</span> |
| 6 | <span class="badge {{ status }}">{{ status }}</span> |
| 7 | </h2> |
| 8 | <div class="muted">Generated {{ manifest.generated_at }} · {{ manifest.indicator_count }} indicators · {{ manifest.technique_count }} techniques</div> |
| 9 | |
| 10 | <div class="cards"> |
| 11 | <div class="card add"><div class="n">{{ manifest.diff.added }}</div><div class="k">new</div></div> |
| 12 | <div class="card rem"><div class="n">{{ manifest.diff.removed }}</div><div class="k">aged out</div></div> |
| 13 | <div class="card tot"><div class="n">{{ manifest.diff.total }}</div><div class="k">total</div></div> |
| 14 | </div> |
| 15 | |
| 16 | <h3>Indicators by type</h3> |
| 17 | <table> |
| 18 | <tr><th>Type</th><th>Count</th></tr> |
| 19 | {% for kind, count in manifest.counts_by_type.items() %} |
| 20 | <tr><td class="mono">{{ kind }}</td><td>{{ count }}</td></tr> |
| 21 | {% endfor %} |
| 22 | </table> |
| 23 | |
| 24 | <h3>Generated CDB lists</h3> |
| 25 | <table> |
| 26 | <tr><th>List</th><th>Entries</th></tr> |
| 27 | {% for name, size in manifest.cdb_lists.items() %} |
| 28 | <tr><td class="mono">etc/lists/{{ name }}</td><td>{{ size }}</td></tr> |
| 29 | {% endfor %} |
| 30 | </table> |
| 31 | |
| 32 | {% if status == 'pending' %} |
| 33 | <form class="actions" method="post" action="{{ url_for('approve', token=token) }}"> |
| 34 | <button class="approve" type="submit">Approve and deploy</button> |
| 35 | </form> |
| 36 | <form class="actions" method="post" action="{{ url_for('reject', token=token) }}"> |
| 37 | <input type="text" name="reason" placeholder="Reason (optional)"> |
| 38 | <button class="reject" type="submit">Reject</button> |
| 39 | </form> |
| 40 | {% else %} |
| 41 | <p class="muted" style="margin-top:18px;">This bundle has already been {{ status }}. No further action available.</p> |
| 42 | {% endif %} |
| 43 | </div> |
| 44 | |
| 45 | <div class="panel"> |
| 46 | <h2>ATT&CK coverage</h2> |
| 47 | <pre class="mono" style="white-space:pre-wrap;font-size:12px;line-height:1.5;margin:0;">{{ coverage }}</pre> |
| 48 | </div> |
| 49 | {% endblock %} |