devsecops-radar 0.2.7__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.7/devsecops_radar.egg-info → devsecops_radar-0.3.0}/PKG-INFO +4 -4
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/README.md +4 -4
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/dashboard/routes.py +10 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/summary/routes.py +15 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0/devsecops_radar.egg-info}/PKG-INFO +4 -4
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/pyproject.toml +1 -1
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/LICENSE +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/MANIFEST.in +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/__init__.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/cli/__init__.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/cli/scanner.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/__init__.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/analyzer.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/attack_simulation.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/database.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/models.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/parser.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/rag.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/remediation.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/reporting.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/rule_fusion.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/sbom.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/core/valuation.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/plugins/__init__.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/scanners/adapter.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/scanners/base.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/scanners/gitleaks.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/scanners/poutine.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/scanners/semgrep.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/scanners/trivy.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/scanners/zizmor.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/__init__.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/app.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/attack_paths/__init__.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/attack_paths/routes.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/dashboard/__init__.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/sentry/routes.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/static/css/bootstrap.min.css +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/static/css/style.css +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/static/js/bootstrap.bundle.min.js +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/static/js/chart.umd.min.js +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/static/js/dashboard.js +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/summary/__init__.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/templates/index.html +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/topology/__init__.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar/web/topology/routes.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar.egg-info/SOURCES.txt +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar.egg-info/dependency_links.txt +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar.egg-info/entry_points.txt +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar.egg-info/requires.txt +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/devsecops_radar.egg-info/top_level.txt +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/setup.cfg +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/tests/test_cli.py +0 -0
- {devsecops_radar-0.2.7 → devsecops_radar-0.3.0}/tests/test_scanners.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devsecops-radar
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Unified CI/CD Security Dashboard — Pipeline Sentinel
|
|
5
5
|
Author-email: Mehrdoost <70381337+Mehrdoost@users.noreply.github.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -107,8 +107,8 @@ Pipeline Sentinel is designed to be **flexible** — you decide where it fits be
|
|
|
107
107
|
[Gitleaks scan] ┘
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
> **📌 Diagram Placeholder:**
|
|
111
|
-
|
|
110
|
+
> **📌 Diagram Placeholder:**
|
|
111
|
+

|
|
112
112
|
|
|
113
113
|
---
|
|
114
114
|
|
|
@@ -389,7 +389,7 @@ devsecops_radar/
|
|
|
389
389
|
```
|
|
390
390
|
|
|
391
391
|
> **📌 Diagram Placeholder:**
|
|
392
|
-
|
|
392
|
+

|
|
393
393
|
|
|
394
394
|
---
|
|
395
395
|
|
|
@@ -81,8 +81,8 @@ Pipeline Sentinel is designed to be **flexible** — you decide where it fits be
|
|
|
81
81
|
[Gitleaks scan] ┘
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
> **📌 Diagram Placeholder:**
|
|
85
|
-
|
|
84
|
+
> **📌 Diagram Placeholder:**
|
|
85
|
+

|
|
86
86
|
|
|
87
87
|
---
|
|
88
88
|
|
|
@@ -363,7 +363,7 @@ devsecops_radar/
|
|
|
363
363
|
```
|
|
364
364
|
|
|
365
365
|
> **📌 Diagram Placeholder:**
|
|
366
|
-
|
|
366
|
+

|
|
367
367
|
|
|
368
368
|
---
|
|
369
369
|
|
|
@@ -440,4 +440,4 @@ MIT — see [LICENSE](LICENSE).
|
|
|
440
440
|
|
|
441
441
|
<div align="center">
|
|
442
442
|
⭐ If this project helps your team ship safer software, drop a star — it makes a real difference.
|
|
443
|
-
</div>
|
|
443
|
+
</div>
|
|
@@ -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')
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
from flask import Blueprint, jsonify
|
|
2
|
+
import json
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
summary_bp = Blueprint('summary', __name__)
|
|
6
|
+
|
|
7
|
+
AI_SUMMARY_FILE = os.environ.get('AI_SUMMARY_FILE', 'findings_ai_summary.json')
|
|
8
|
+
|
|
9
|
+
@summary_bp.route('/api/summary')
|
|
10
|
+
def api_summary():
|
|
11
|
+
if os.path.exists(AI_SUMMARY_FILE):
|
|
12
|
+
with open(AI_SUMMARY_FILE) as f:
|
|
13
|
+
return jsonify(json.load(f))
|
|
14
|
+
return jsonify({})
|
|
15
|
+
|
|
1
16
|
@summary_bp.route('/badge/<int:scan_id>.svg')
|
|
2
17
|
def security_badge(scan_id):
|
|
3
18
|
from devsecops_radar.core.database import get_scan_by_id
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devsecops-radar
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Unified CI/CD Security Dashboard — Pipeline Sentinel
|
|
5
5
|
Author-email: Mehrdoost <70381337+Mehrdoost@users.noreply.github.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -107,8 +107,8 @@ Pipeline Sentinel is designed to be **flexible** — you decide where it fits be
|
|
|
107
107
|
[Gitleaks scan] ┘
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
> **📌 Diagram Placeholder:**
|
|
111
|
-
|
|
110
|
+
> **📌 Diagram Placeholder:**
|
|
111
|
+

|
|
112
112
|
|
|
113
113
|
---
|
|
114
114
|
|
|
@@ -389,7 +389,7 @@ devsecops_radar/
|
|
|
389
389
|
```
|
|
390
390
|
|
|
391
391
|
> **📌 Diagram Placeholder:**
|
|
392
|
-
|
|
392
|
+

|
|
393
393
|
|
|
394
394
|
---
|
|
395
395
|
|
|
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.7 → 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.7 → 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.7 → 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
|
{devsecops_radar-0.2.7 → 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
|