@greenarmor/ges-web-dashboard 1.2.7 → 1.2.8
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.
- package/dist/index.js +1 -1
- package/dist/template.js +45 -2
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -190,7 +190,7 @@ export function collectDashboardData(projectPath) {
|
|
|
190
190
|
projectName: config?.project_name || "Unknown Project",
|
|
191
191
|
projectType: config?.project_type || "unknown",
|
|
192
192
|
frameworks: allFrameworks,
|
|
193
|
-
gesfVersion: "1.2.
|
|
193
|
+
gesfVersion: "1.2.8",
|
|
194
194
|
score,
|
|
195
195
|
controls,
|
|
196
196
|
findings,
|
package/dist/template.js
CHANGED
|
@@ -385,6 +385,42 @@ export function renderDashboard(data) {
|
|
|
385
385
|
</div>
|
|
386
386
|
</div>
|
|
387
387
|
|
|
388
|
+
${(() => {
|
|
389
|
+
const installedPacks = packs.filter(p => p.installed);
|
|
390
|
+
if (installedPacks.length === 0)
|
|
391
|
+
return '';
|
|
392
|
+
return `<div class="card" style="margin-top:16px;">
|
|
393
|
+
<div class="card-title">Installed Policy Packs (${installedPacks.length})</div>
|
|
394
|
+
<div class="grid grid-2" style="gap:12px;margin-top:8px;">
|
|
395
|
+
${installedPacks.map(p => {
|
|
396
|
+
const pct = p.score;
|
|
397
|
+
const color = pct >= 80 ? '#22c55e' : pct >= 60 ? '#eab308' : pct >= 40 ? '#f97316' : '#ef4444';
|
|
398
|
+
const isImplemented = p.notImplementedCount < p.controlCount;
|
|
399
|
+
const statusBadge = isImplemented
|
|
400
|
+
? '<span style="background:#d1fae5;color:#065f46;padding:2px 8px;border-radius:4px;font-size:10px;font-weight:600;">Implemented</span>'
|
|
401
|
+
: '<span style="background:#fef3c7;color:#92400e;padding:2px 8px;border-radius:4px;font-size:10px;font-weight:600;">Not Implemented</span>';
|
|
402
|
+
const borderStyle = isImplemented ? '1px solid #e5e7eb' : '1px dashed #d1d5db;opacity:0.85;';
|
|
403
|
+
return `<div class="pack-mini" onclick="loadPackDetail('${p.id}')" style="cursor:pointer;padding:12px;border:${borderStyle};border-radius:8px;">
|
|
404
|
+
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;">
|
|
405
|
+
<div style="font-size:13px;font-weight:600;">${escapeHtml(p.name)}</div>
|
|
406
|
+
<div style="display:flex;align-items:center;gap:8px;">
|
|
407
|
+
${statusBadge}
|
|
408
|
+
<div style="font-size:16px;font-weight:700;color:${color};">${pct}%</div>
|
|
409
|
+
</div>
|
|
410
|
+
</div>
|
|
411
|
+
${scoreBarHtml(pct)}
|
|
412
|
+
<div style="margin-top:6px;font-size:11px;color:#6b7280;">
|
|
413
|
+
${p.controlCount} controls ·
|
|
414
|
+
<span style="color:#22c55e;">${p.passedCount - p.notApplicableCount} pass</span> ·
|
|
415
|
+
<span style="color:#ef4444;">${p.failedCount} fail</span> ·
|
|
416
|
+
<span style="color:#6b7280;">${p.notImplementedCount} not impl</span>
|
|
417
|
+
</div>
|
|
418
|
+
</div>`;
|
|
419
|
+
}).join('')}
|
|
420
|
+
</div>
|
|
421
|
+
</div>`;
|
|
422
|
+
})()}
|
|
423
|
+
|
|
388
424
|
<div class="grid grid-2">
|
|
389
425
|
<div class="card">
|
|
390
426
|
<div class="card-title">Security Findings Detail (${findings.length})</div>
|
|
@@ -425,9 +461,16 @@ export function renderDashboard(data) {
|
|
|
425
461
|
</div>
|
|
426
462
|
|
|
427
463
|
<div class="card">
|
|
428
|
-
<div class="card-title">Active Frameworks</div>
|
|
464
|
+
<div class="card-title">Active Frameworks & Installed Packs</div>
|
|
429
465
|
<div style="display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;">
|
|
430
|
-
${data.frameworks.map(fw => `<span class="tag" style="background:#d1fae5;color:#065f46;">${escapeHtml(fw)}</span>`).join('')
|
|
466
|
+
${data.frameworks.map(fw => `<span class="tag" style="background:#d1fae5;color:#065f46;">${escapeHtml(fw)}</span>`).join('')}
|
|
467
|
+
${packs.filter(p => p.installed).map(p => {
|
|
468
|
+
const isImpl = p.notImplementedCount < p.controlCount;
|
|
469
|
+
const bg = isImpl ? '#dbeafe' : '#fef3c7';
|
|
470
|
+
const cl = isImpl ? '#1e40af' : '#92400e';
|
|
471
|
+
return `<span class="tag" style="background:${bg};color:${cl};">${escapeHtml(p.name)}</span>`;
|
|
472
|
+
}).join('')}
|
|
473
|
+
${data.frameworks.length === 0 && packs.filter(p => p.installed).length === 0 ? '<span style="color:#9ca3af;">No frameworks or packs installed</span>' : ''}
|
|
431
474
|
</div>
|
|
432
475
|
</div>
|
|
433
476
|
</div>
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dependencies": {
|
|
3
|
-
"@greenarmor/ges-audit-engine": "1.2.
|
|
4
|
-
"@greenarmor/ges-core": "1.2.
|
|
5
|
-
"@greenarmor/ges-policy-engine": "1.2.
|
|
6
|
-
"@greenarmor/ges-scoring-engine": "1.2.
|
|
3
|
+
"@greenarmor/ges-audit-engine": "1.2.8",
|
|
4
|
+
"@greenarmor/ges-core": "1.2.8",
|
|
5
|
+
"@greenarmor/ges-policy-engine": "1.2.8",
|
|
6
|
+
"@greenarmor/ges-scoring-engine": "1.2.8"
|
|
7
7
|
},
|
|
8
8
|
"description": "GESF Web Dashboard - Visual compliance dashboard for teams",
|
|
9
9
|
"devDependencies": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"type": "module",
|
|
42
42
|
"types": "./dist/index.d.ts",
|
|
43
|
-
"version": "1.2.
|
|
43
|
+
"version": "1.2.8",
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "tsc",
|
|
46
46
|
"clean": "rm -rf dist tsconfig.tsbuildinfo",
|