devsecops-radar 0.2.9__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {devsecops_radar-0.2.9/devsecops_radar.egg-info → devsecops_radar-0.3.0}/PKG-INFO +1 -1
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/dashboard/routes.py +10 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0/devsecops_radar.egg-info}/PKG-INFO +1 -1
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/pyproject.toml +1 -1
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/LICENSE +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/MANIFEST.in +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/README.md +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/__init__.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/cli/__init__.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/cli/scanner.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/__init__.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/analyzer.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/attack_simulation.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/database.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/models.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/parser.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/rag.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/remediation.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/reporting.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/rule_fusion.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/sbom.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/core/valuation.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/plugins/__init__.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/scanners/adapter.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/scanners/base.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/scanners/gitleaks.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/scanners/poutine.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/scanners/semgrep.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/scanners/trivy.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/scanners/zizmor.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/__init__.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/app.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/attack_paths/__init__.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/attack_paths/routes.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/dashboard/__init__.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/sentry/routes.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/static/css/bootstrap.min.css +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/static/css/style.css +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/static/js/bootstrap.bundle.min.js +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/static/js/chart.umd.min.js +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/static/js/dashboard.js +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/summary/__init__.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/summary/routes.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/templates/index.html +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/topology/__init__.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/topology/routes.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar.egg-info/SOURCES.txt +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar.egg-info/dependency_links.txt +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar.egg-info/entry_points.txt +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar.egg-info/requires.txt +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar.egg-info/top_level.txt +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/setup.cfg +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/tests/test_cli.py +0 -0
- {devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/tests/test_scanners.py +0 -0
|
@@ -221,11 +221,14 @@ DASHBOARD_HTML = r"""
|
|
|
221
221
|
renderTable(filtered);
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
+
// ✅ FIX: use data.items for the array, and use allFindings for charts & stats
|
|
224
225
|
fetch('/api/findings', { headers: getHeaders() })
|
|
225
226
|
.then(res => res.json())
|
|
226
227
|
.then(data => {
|
|
227
228
|
allFindings = data.items;
|
|
228
229
|
renderTable(allFindings);
|
|
230
|
+
|
|
231
|
+
// Doughnut chart counts
|
|
229
232
|
const counts = {CRITICAL:0, HIGH:0, MEDIUM:0, LOW:0};
|
|
230
233
|
allFindings.forEach(f => {
|
|
231
234
|
const sev = f.severity.toUpperCase();
|
|
@@ -242,6 +245,8 @@ DASHBOARD_HTML = r"""
|
|
|
242
245
|
},
|
|
243
246
|
options: { plugins: { legend: { labels: { color: 'white' } } } }
|
|
244
247
|
});
|
|
248
|
+
|
|
249
|
+
// Pipeline stats (Poutine + Zizmor)
|
|
245
250
|
const pipeline = allFindings.filter(f => f.tool === 'Poutine' || f.tool === 'Zizmor');
|
|
246
251
|
const pCounts = {CRITICAL:0, HIGH:0, MEDIUM:0, LOW:0};
|
|
247
252
|
pipeline.forEach(f => {
|
|
@@ -252,6 +257,8 @@ DASHBOARD_HTML = r"""
|
|
|
252
257
|
document.getElementById('pipeline-high').textContent = pCounts.HIGH;
|
|
253
258
|
document.getElementById('pipeline-medium').textContent = pCounts.MEDIUM;
|
|
254
259
|
document.getElementById('pipeline-low').textContent = pCounts.LOW;
|
|
260
|
+
|
|
261
|
+
// Attach filter events
|
|
255
262
|
document.getElementById('searchInput').addEventListener('input', applyFilters);
|
|
256
263
|
document.getElementById('toolFilter').addEventListener('change', applyFilters);
|
|
257
264
|
document.getElementById('severityFilter').addEventListener('change', applyFilters);
|
|
@@ -290,6 +297,8 @@ DASHBOARD_HTML = r"""
|
|
|
290
297
|
}
|
|
291
298
|
if (!data.nodes || data.nodes.length === 0) return;
|
|
292
299
|
const container = document.getElementById('attack-graph');
|
|
300
|
+
// ✅ Clean previous SVG before drawing new one
|
|
301
|
+
container.innerHTML = '';
|
|
293
302
|
const width = container.clientWidth;
|
|
294
303
|
const height = container.clientHeight;
|
|
295
304
|
const svg = d3.select('#attack-graph')
|
|
@@ -372,6 +381,7 @@ DASHBOARD_HTML = r"""
|
|
|
372
381
|
const nodes = topo.servers.map(s => ({ id: s.name, group: s.ip }));
|
|
373
382
|
const links = topo.connections.map(c => ({ source: c.source, target: c.target, label: c.protocol }));
|
|
374
383
|
const container = document.getElementById('topology-graph');
|
|
384
|
+
container.innerHTML = '';
|
|
375
385
|
const width = container.clientWidth;
|
|
376
386
|
const height = container.clientHeight;
|
|
377
387
|
const svg = d3.select('#topology-graph')
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/attack_paths/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/static/css/bootstrap.min.css
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar/web/static/js/chart.umd.min.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devsecops_radar-0.2.9 → devsecops_radar-0.3.0}/devsecops_radar.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|