Initial commit: Talos edge-facing scan orchestrator.
CI / skip-ci-check (push) Successful in 8s
CI / secret-scan (push) Successful in 7s
CI / python-ci (push) Failing after 19s

FastAPI + Kali tools UI for authorized scans of levkin.ca / LAN targets.
Gitignore local data/.env; add pytest + gitleaks CI.
This commit is contained in:
2026-07-12 11:46:54 -04:00
commit 12a6e2b6bc
29 changed files with 3075 additions and 0 deletions
+110
View File
@@ -0,0 +1,110 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>TALOS</title>
<link rel="icon" href="/static/favicon.svg" type="image/svg+xml" />
<link rel="apple-touch-icon" href="/static/favicon.svg" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="/static/styles.css" />
</head>
<body class="talos-body">
<header class="header-bar">
<div class="brand">
<img src="/static/favicon.svg" alt="" class="brand-icon" width="28" height="28" />
<div class="logo">TALOS</div>
</div>
<div class="health-badges">
<span id="ollama-badge" class="badge">Ollama: …</span>
<span id="tools-badge" class="badge">Tools: …</span>
</div>
</header>
<div class="layout">
<aside class="sidebar">
<section class="panel">
<h2>New scan</h2>
<div class="scan-mode" role="tablist" aria-label="Scan mode">
<button type="button" id="mode-single" class="mode-btn active" data-mode="single">Single</button>
<button type="button" id="mode-bulk" class="mode-btn" data-mode="bulk">Bulk</button>
</div>
<div id="single-target" class="target-panel">
<label for="target">Target</label>
<input id="target" type="text" placeholder="IP, hostname, or URL" />
</div>
<div id="bulk-target" class="target-panel hidden">
<div class="bulk-label-row">
<label for="targets-bulk">Targets</label>
<span id="bulk-count" class="bulk-count">0 targets</span>
</div>
<textarea
id="targets-bulk"
rows="7"
spellcheck="false"
placeholder="example.com&#10;https://app.example.com&#10;1.2.3.4&#10;# lines starting with # are ignored"
></textarea>
<p class="bulk-hint">One target per line. Blank lines and <code>#</code> comments are ignored.</p>
</div>
<label for="profile">Profile</label>
<select id="profile">
<option value="passive">Passive Recon</option>
<option value="standard" selected>Standard Pentest</option>
<option value="redteam">Full Red Team</option>
</select>
<label class="checkbox-row">
<input type="checkbox" id="opt-web" checked /> Web tools
</label>
<label class="checkbox-row">
<input type="checkbox" id="opt-ssl" checked /> SSL (testssl)
</label>
<label class="checkbox-row">
<input type="checkbox" id="opt-brute" /> SSH brute (red team)
</label>
<label class="auth-row">
<input type="checkbox" id="authorized" />
I confirm I own this target or have written authorization to test it. Unauthorized testing is a crime.
</label>
<button id="launch" class="btn-launch" disabled>Launch scan</button>
</section>
<section class="panel recent">
<h2>Recent scans</h2>
<ul id="recent-list"></ul>
</section>
</aside>
<main class="main">
<div class="console-wrap panel">
<div class="console-header">
<span>Live Console</span>
<label class="checkbox-row"><input type="checkbox" id="pause-scroll" /> Pause autoscroll</label>
</div>
<pre id="console" class="console"><span class="prompt">talos@scan:~$</span> waiting…</pre>
</div>
<div class="panel">
<h2>Phases</h2>
<ul id="phases" class="phases-list"></ul>
</div>
<div class="panel">
<h2>Findings</h2>
<div id="severity-tabs" class="severity-tabs"></div>
<div id="findings"></div>
</div>
<div id="bulk-progress" class="bulk-progress hidden">
<span id="bulk-progress-text">Bulk: —</span>
</div>
<div class="actions">
<button id="export-md" class="btn-secondary" disabled>Export MD</button>
<button id="export-json" class="btn-secondary" disabled>Export JSON</button>
<button id="export-cursor" class="btn-secondary hidden" disabled>Export for Cursor</button>
<button id="cancel" class="btn-danger" disabled>Cancel</button>
<button id="clear" class="btn-secondary">Clear</button>
</div>
</main>
</div>
<script src="/static/app.js"></script>
</body>
</html>