feat: operator auth (Bearer+WS 4401), atomic saves, WS heartbeat, Loot viewer (files+creds+screenshots), auth gate, WS reconnect backoff, empty-state hero, toasts
This commit is contained in:
@@ -198,6 +198,23 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<section class="logs-section" id="lootSection">
|
||||
<div class="section-header">
|
||||
<h3><i class="fa-solid fa-sack-dollar"></i> Loot — Exfiltrated Files & Harvested Credentials</h3>
|
||||
<div class="loot-tabs">
|
||||
<button class="tab-btn active" id="lootTabFiles" onclick="switchLootTab('files')"><i class="fa-solid fa-file-arrow-down"></i> Files <span class="badge" id="lootFilesCount">0</span></button>
|
||||
<button class="tab-btn" id="lootTabCreds" onclick="switchLootTab('creds')"><i class="fa-solid fa-key"></i> Credentials <span class="badge purple" id="lootCredsCount">0</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="loot-body" id="lootFilesPanel">
|
||||
<div class="log-entry system">[LOOT] No files exfiltrated yet. Use Control → Exfil & Harvest on an online node.</div>
|
||||
</div>
|
||||
<div class="loot-body" id="lootCredsPanel" style="display:none;">
|
||||
<div class="log-entry system">[LOOT] No credentials harvested yet. Use Control → Exfil & Harvest on an online node.</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<!-- Agent Installer Modal -->
|
||||
@@ -493,6 +510,27 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="app.js"></script>
|
||||
<div style="text-align:center;padding:1.5rem;margin-top:2rem;border-top:1px solid rgba(148,163,184,0.1)"><a href="https://buymeacoffee.com/r26xrthzttg" target="_blank" rel="noopener" style="display:inline-flex;align-items:center;gap:0.5rem;background:linear-gradient(135deg,#FF813F,#FF5E0E);color:#fff;padding:0.5rem 1.2rem;border-radius:30px;text-decoration:none;font-weight:600;font-size:0.82rem;transition:all 0.2s;box-shadow:0 4px 15px rgba(255,94,14,0.3)"><span style="font-size:1.1rem">☕</span> Support This Project — Buy Me a Coffee</a></div>
|
||||
<script src="app.js"></script>
|
||||
|
||||
<!-- Toast stack -->
|
||||
<div id="toastStack" class="toast-stack"></div>
|
||||
|
||||
<!-- Auth gate overlay -->
|
||||
<div class="auth-overlay" id="authOverlay" style="display:none;">
|
||||
<div class="auth-card">
|
||||
<i class="fa-solid fa-shield-halved auth-icon"></i>
|
||||
<h2>NexusOps Access</h2>
|
||||
<p>Enter your operator token to continue.</p>
|
||||
<input type="password" id="authTokenInput" class="form-input" placeholder="Operator token" autocomplete="current-password">
|
||||
<button class="btn btn-primary" id="authTokenSubmit" style="width:100%;margin-top:0.75rem;"><i class="fa-solid fa-unlock"></i> Unlock</button>
|
||||
<p class="auth-error" id="authError" style="display:none;">Invalid token — try again.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Loot lightbox -->
|
||||
<div class="modal-overlay" id="lootLightbox" style="display:none;" onclick="closeLootLightbox()">
|
||||
<img id="lootLightboxImg" class="loot-lightbox-img" alt="preview">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user