- Add chi v5.2.5 to go.mod - Vendor htmx v2.0.4 minified JS in pkg/web/static/ - Create go:embed directives for static/ and templates/ - Create layout.html with nav bar and Tailwind CDN - Create overview.html with stat cards and findings table
78 lines
3.3 KiB
HTML
78 lines
3.3 KiB
HTML
{{template "layout" .}}
|
|
|
|
{{define "content"}}
|
|
<!-- Stat cards -->
|
|
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
|
<div class="stat-card bg-white border border-gray-200">
|
|
<p class="text-sm font-medium text-gray-500">Total Keys Found</p>
|
|
<p class="mt-2 text-3xl font-bold text-gray-900">{{.TotalKeys}}</p>
|
|
</div>
|
|
<div class="stat-card bg-white border border-gray-200">
|
|
<p class="text-sm font-medium text-gray-500">Providers Loaded</p>
|
|
<p class="mt-2 text-3xl font-bold text-gray-900">{{.TotalProviders}}</p>
|
|
</div>
|
|
<div class="stat-card bg-white border border-gray-200">
|
|
<p class="text-sm font-medium text-gray-500">Recon Sources</p>
|
|
<p class="mt-2 text-3xl font-bold text-gray-900">{{.ReconSources}}</p>
|
|
</div>
|
|
<div class="stat-card bg-white border border-gray-200">
|
|
<p class="text-sm font-medium text-gray-500">Last Scan</p>
|
|
<p class="mt-2 text-xl font-bold text-gray-900">{{if .LastScan}}{{.LastScan}}{{else}}Never{{end}}</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Recent findings -->
|
|
<div class="bg-white shadow-sm rounded-lg border border-gray-200">
|
|
<div class="px-6 py-4 border-b border-gray-200">
|
|
<h2 class="text-lg font-semibold text-gray-900">Recent Findings</h2>
|
|
</div>
|
|
{{if .RecentFindings}}
|
|
<div class="overflow-x-auto">
|
|
<table class="findings-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Provider</th>
|
|
<th>Masked Key</th>
|
|
<th>Source</th>
|
|
<th>Confidence</th>
|
|
<th>Verified</th>
|
|
<th>Date</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{{range .RecentFindings}}
|
|
<tr>
|
|
<td class="font-medium">{{.ProviderName}}</td>
|
|
<td class="font-mono text-sm text-gray-600">{{.KeyMasked}}</td>
|
|
<td class="text-sm text-gray-600">{{.SourcePath}}</td>
|
|
<td>
|
|
{{if eq .Confidence "high"}}
|
|
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800">High</span>
|
|
{{else if eq .Confidence "medium"}}
|
|
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-yellow-100 text-yellow-800">Medium</span>
|
|
{{else}}
|
|
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-gray-100 text-gray-800">{{.Confidence}}</span>
|
|
{{end}}
|
|
</td>
|
|
<td>
|
|
{{if .Verified}}
|
|
<span class="text-green-600 font-medium">Live</span>
|
|
{{else}}
|
|
<span class="text-gray-400">-</span>
|
|
{{end}}
|
|
</td>
|
|
<td class="text-sm text-gray-500">{{.CreatedAt.Format "2006-01-02 15:04"}}</td>
|
|
</tr>
|
|
{{end}}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{{else}}
|
|
<div class="px-6 py-12 text-center text-gray-500">
|
|
<p class="text-lg">No findings yet</p>
|
|
<p class="mt-1 text-sm">Run a scan to detect API keys</p>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|