97 lines
No EOL
4 KiB
HTML
97 lines
No EOL
4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Admin Control Panel - SpotNotes.app</title>
|
|
<link rel="stylesheet" href="/assets/css/base.css">
|
|
<link rel="stylesheet" href="/assets/css/auth.css">
|
|
<link rel="stylesheet" href="/assets/css/admin.css">
|
|
<link rel="icon" href="favicon.ico" type="image/x-icon" />
|
|
</head>
|
|
<body class="page-body">
|
|
<div class="content-container admin-container">
|
|
<div class="admin-header">
|
|
<div>
|
|
<h1>⚙️ Admin Control Panel</h1>
|
|
<p class="admin-subtitle">System administration, security, capacity management, and public content moderation.</p>
|
|
</div>
|
|
<a href="/" class="btn-back-map">🗺️ Back to Map</a>
|
|
</div>
|
|
|
|
<!-- Zero-Knowledge Notice -->
|
|
<div class="privacy-banner">
|
|
<span class="privacy-icon">🔒</span>
|
|
<div class="privacy-text">
|
|
<strong>Zero-Knowledge E2EE Architecture:</strong>
|
|
Private notes and coordinates are client-side encrypted using AES-GCM-256 and RSA-OAEP keys. The server operator cannot read private note contents, decryption keys, or private GPS positions. As an administrator, you manage user security, accounts, IP bans, storage hygiene, and moderation of unencrypted public content.
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Stats Dashboard -->
|
|
<div id="admin-stats" class="stats-container">
|
|
<!-- Stats injected by JS -->
|
|
</div>
|
|
|
|
<!-- Moderation Queue -->
|
|
<div class="admin-section" id="section-reported">
|
|
<h2 class="section-title">
|
|
<span>🚩 Moderation Queue: Reported Public Notes <span id="reported-badge" class="badge-count">0</span></span>
|
|
<span class="toggle-icon">▼</span>
|
|
</h2>
|
|
<div id="reported-list" class="section-content">
|
|
<p>Loading reported notes...</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- User Management -->
|
|
<div class="admin-section" id="section-users">
|
|
<h2 class="section-title">
|
|
<span>👥 User Accounts & Access Control</span>
|
|
<span class="toggle-icon">▼</span>
|
|
</h2>
|
|
<div class="search-bar-wrap">
|
|
<input type="text" id="user-search" class="admin-search" placeholder="Search users by email, name, or IP...">
|
|
</div>
|
|
<div id="user-list" class="section-content">
|
|
<p>Loading users...</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Banned IPs -->
|
|
<div class="admin-section" id="section-banned-ips">
|
|
<h2 class="section-title">
|
|
<span>🚫 Banned IP Addresses</span>
|
|
<span class="toggle-icon">▼</span>
|
|
</h2>
|
|
<div id="banned-ip-list" class="section-content collapsed">
|
|
<p>Loading banned IPs...</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Notepads Explorer -->
|
|
<div class="admin-section" id="section-notepads">
|
|
<h2 class="section-title">
|
|
<span id="notepads-header-title">📁 Notepads Explorer</span>
|
|
<span class="toggle-icon">▼</span>
|
|
</h2>
|
|
<div id="notepad-list" class="section-content">
|
|
<p>Select a user above to inspect their notepads, or select <em>System / Public Notepads</em>.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Notes Explorer -->
|
|
<div class="admin-section" id="section-notes">
|
|
<h2 class="section-title">
|
|
<span id="notes-header-title">📝 Notes Explorer</span>
|
|
<span class="toggle-icon">▼</span>
|
|
</h2>
|
|
<div id="note-list" class="section-content">
|
|
<p>Select a notepad above to view its notes and storage details.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="/assets/js/admin.js"></script>
|
|
</body>
|
|
</html> |