2022-10-25 16:25:19 +02:00
|
|
|
<link href="{{ url_for('static', filename='css/tags.css') }}" rel="stylesheet" type="text/css" />
|
|
|
|
<script src="{{ url_for('static', filename='js/tags.js') }}"></script>
|
|
|
|
|
2023-04-06 16:18:06 +02:00
|
|
|
{% with modal_add_tags=dict_object['metadata_card']['add_tags_modal']%}
|
|
|
|
{% include 'modals/add_tags.html' %}
|
|
|
|
{% endwith %}
|
2022-10-25 16:25:19 +02:00
|
|
|
|
|
|
|
{% include 'modals/edit_tag.html' %}
|
|
|
|
|
|
|
|
<div class="card my-3">
|
|
|
|
<div class="card-header" style="background-color:#d9edf7;font-size: 15px">
|
|
|
|
<h4 class="text-secondary">{{ dict_object["correlation_id"] }} :</h4>
|
|
|
|
<ul class="list-group mb-2">
|
|
|
|
<li class="list-group-item py-0">
|
|
|
|
<div class="row">
|
|
|
|
<div class="col-md-10">
|
|
|
|
<table class="table">
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th>Object type</th>
|
|
|
|
<th>First seen</th>
|
|
|
|
<th>Last seen</th>
|
|
|
|
<th>Nb seen</th>
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
|
|
|
<td>{{ dict_object["object_type"] }}</td>
|
|
|
|
<td>
|
|
|
|
<svg height="26" width="26">
|
|
|
|
<g class="nodes">
|
|
|
|
<circle cx="13" cy="13" r="13" fill="orange"></circle>
|
2022-11-22 10:47:15 +01:00
|
|
|
<text x="13" y="13" text-anchor="middle" dominant-baseline="central" class="graph_node_icon {{ dict_object["metadata_card"]["icon"]["style"] }}" font-size="16px">{{ dict_object["metadata_card"]["icon"]["icon"] }}</text>
|
2022-10-25 16:25:19 +02:00
|
|
|
</g>
|
|
|
|
</svg>
|
|
|
|
</td>
|
|
|
|
<td>{{ dict_object["metadata"]['first_seen'] }}</td>
|
|
|
|
<td>{{ dict_object["metadata"]['last_seen'] }}</td>
|
|
|
|
<td>{{ dict_object["metadata"]['nb_seen'] }}</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
<div class="col-md-1">
|
|
|
|
<div id="sparkline"></div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</li>
|
2022-12-21 16:48:08 +01:00
|
|
|
{% if dict_object["metadata_card"]["cve_search"] %}
|
2023-05-12 09:59:18 +02:00
|
|
|
{% if 'error' in dict_object["metadata_card"]["cve_search"] %}
|
|
|
|
<b class="text-danger my-2"><i class="fas fa-exclamation-triangle"></i> CVE Search Error: {{ dict_object["metadata_card"]["cve_search"]["error"] }}</b>
|
|
|
|
{% else %}
|
|
|
|
<li class="list-group-item py-0">
|
|
|
|
<table class="table table-sm table-hover">
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
|
|
|
<td><b>Summary</b></td>
|
|
|
|
<td>{{ dict_object["metadata_card"]["cve_search"].get("summary") }}</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td><b>Published</b></td>
|
|
|
|
<td>{{ dict_object["metadata_card"]["cve_search"].get("Published") }}</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td><b>Modified</b></td>
|
|
|
|
<td>{{ dict_object["metadata_card"]["cve_search"].get("Modified") }}</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td><b>last-modified</b></td>
|
|
|
|
<td>{{ dict_object["metadata_card"]["cve_search"].get("last-modified") }}</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</li>
|
2022-12-21 16:48:08 +01:00
|
|
|
|
2023-05-12 09:59:18 +02:00
|
|
|
{% if dict_object["metadata_card"]["cve_search"].get("references") %}
|
|
|
|
<div id="accordion" class="mb-2">
|
|
|
|
<div class="card">
|
|
|
|
<div class="card-header bg-dark" id="headingRefs">
|
|
|
|
<h5 class="mb-0">
|
|
|
|
<button class="btn btn-link collapsed w-100" data-toggle="collapse" data-target="#collapseRefs" aria-expanded="false" aria-controls="collapseRefs">
|
|
|
|
<span class="row">
|
|
|
|
<div class="col-10 text-left">
|
|
|
|
References <span class="badge badge-primary badge-pill">{{ dict_object["metadata_card"]["cve_search"]["references"] | length }}</span>
|
|
|
|
</div>
|
|
|
|
<div class="col-2 text-right"><i class="fas fa-chevron-circle-down"></i></div>
|
|
|
|
</span>
|
|
|
|
</button>
|
|
|
|
</h5>
|
|
|
|
</div>
|
|
|
|
<div id="collapseRefs" class="collapse" aria-labelledby="headingRefs" data-parent="#accordion">
|
|
|
|
<div class="card-body">
|
|
|
|
<ul>
|
|
|
|
{% for ref in dict_object["metadata_card"]["cve_search"].get("references") %}
|
|
|
|
<li>{{ ref }}</li>
|
|
|
|
{% endfor %}
|
|
|
|
</ul>
|
|
|
|
</div>
|
2022-12-21 16:48:08 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2023-05-12 09:59:18 +02:00
|
|
|
{% endif %}
|
2022-12-21 16:48:08 +01:00
|
|
|
{% endif %}
|
|
|
|
{% endif %}
|
2023-04-06 16:18:06 +02:00
|
|
|
<li class="list-group-item py-0">
|
|
|
|
<br>
|
|
|
|
<div class="mb-3">
|
|
|
|
Tags:
|
|
|
|
{% for tag in dict_object["metadata"]['tags'] %}
|
|
|
|
<button class="btn btn-{{ bootstrap_label[loop.index0 % 5] }}" data-toggle="modal" data-target="#edit_tags_modal"
|
2023-05-25 14:33:12 +02:00
|
|
|
data-tagid="{{ tag }}" data-objtype="cve" data-objsubtype="" data-objid="{{ dict_object["correlation_id"] }}">
|
2023-04-06 16:18:06 +02:00
|
|
|
{{ tag }}
|
|
|
|
</button>
|
|
|
|
{% endfor %}
|
|
|
|
<button type="button" class="btn btn-light" data-toggle="modal" data-target="#add_tags_modal">
|
|
|
|
<i class="far fa-plus-square"></i>
|
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
</li>
|
2022-10-25 16:25:19 +02:00
|
|
|
</ul>
|
|
|
|
|
2022-12-21 16:48:08 +01:00
|
|
|
{% with obj_type='cve', obj_id=dict_object['correlation_id'], obj_subtype='' %}
|
2022-10-25 16:25:19 +02:00
|
|
|
{% include 'modals/investigations_register_obj.html' %}
|
|
|
|
{% endwith %}
|
|
|
|
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#investigations_register_obj_modal">
|
|
|
|
<i class="fas fa-microscope"></i> Investigations
|
|
|
|
</button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<script src="{{ url_for('static', filename='js/d3/sparklines.js')}}"></script>
|
|
|
|
<script>
|
|
|
|
sparkline("sparkline", {{ dict_object["metadata_card"]["sparkline"] }}, {});
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
function create_line_chart(id, url){
|
|
|
|
|
|
|
|
var width = 900;
|
|
|
|
var height = Math.round(width / 4);
|
|
|
|
|
|
|
|
var margin = {top: 20, right: 55, bottom: 50, left: 40};
|
|
|
|
|
|
|
|
var x = d3.scaleTime().range([0, width]);
|
|
|
|
var y = d3.scaleLinear().rangeRound([height, 0]);
|
|
|
|
|
|
|
|
var xAxis = d3.axisBottom(x);
|
|
|
|
var yAxis = d3.axisLeft(y);
|
|
|
|
|
|
|
|
var parseTime = d3.timeParse("%Y-%m-%d");
|
|
|
|
|
|
|
|
var line = d3.line()
|
|
|
|
.x(function(d) {
|
|
|
|
return x(d.date);
|
|
|
|
}).y(function(d) {
|
|
|
|
return y(d.value);
|
|
|
|
});
|
|
|
|
|
|
|
|
var svg_line = d3.select('#'+id).append('svg')
|
|
|
|
.attr("id", "graph_div")
|
|
|
|
.attr("width", width + margin.left + margin.right)
|
|
|
|
.attr("height", height + margin.top + margin.bottom)
|
|
|
|
.append('g')
|
|
|
|
.attr('transform', "translate("+ margin.left +","+ margin.top +")");
|
|
|
|
|
|
|
|
var div = d3.select('body').append('div')
|
|
|
|
.attr('class', 'tooltip')
|
|
|
|
.style('opacity', 0);
|
|
|
|
|
|
|
|
//add div tooltip
|
|
|
|
|
|
|
|
d3.json(url)
|
|
|
|
.then(function(data){
|
|
|
|
|
|
|
|
data.forEach(function(d) {
|
|
|
|
d.date_label = d.date;
|
|
|
|
d.date = parseTime(d.date);
|
|
|
|
d.value = +d.value;
|
|
|
|
});
|
|
|
|
|
|
|
|
// fit the data
|
|
|
|
x.domain(d3.extent(data, function(d) { return d.date; }));
|
|
|
|
//x.domain(data.map(function (d) { return d.date; })); //E
|
|
|
|
y.domain([0, d3.max(data, function(d){ return d.value ; })]);
|
|
|
|
|
|
|
|
//line
|
|
|
|
svg_line.append("path")
|
|
|
|
.data([data])
|
|
|
|
.attr("class", "line_graph")
|
|
|
|
.attr("d", line);
|
|
|
|
|
|
|
|
// add X axis
|
|
|
|
svg_line.append("g")
|
|
|
|
.attr("transform", "translate(0," + height + ")")
|
|
|
|
.call(d3.axisBottom(x))
|
|
|
|
.selectAll("text")
|
|
|
|
.style("text-anchor", "end")
|
|
|
|
.attr("transform", "rotate(-45)" );
|
|
|
|
|
|
|
|
// Add the Y Axis
|
|
|
|
svg_line.append("g")
|
|
|
|
.call(d3.axisLeft(y));
|
|
|
|
|
|
|
|
//add a dot circle
|
|
|
|
svg_line.selectAll('dot')
|
|
|
|
.data(data).enter()
|
|
|
|
.append('circle')
|
|
|
|
.attr('r', 2)
|
|
|
|
.attr('cx', function(d) { return x(d.date); })
|
|
|
|
.attr('cy', function(d) { return y(d.value); })
|
|
|
|
|
|
|
|
.on('mouseover', function(d) {
|
|
|
|
div.transition().style('opacity', .9);
|
|
|
|
div.html('' + d.date_label+ '<br/>' + d.value).style('left', (d3.event.pageX) + 'px')
|
|
|
|
.style("left", (d3.event.pageX) + "px")
|
|
|
|
.style("top", (d3.event.pageY - 28) + "px");
|
|
|
|
})
|
|
|
|
.on('mouseout', function(d)
|
|
|
|
{
|
|
|
|
div.transition().style('opacity', 0);
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
</script>
|