Files
gotelegram_pro/admin-web/static/index.html
Виталий Литвинов 008143a617 v2.5.0: remove local web admin token gate
2026-04-24 22:00:08 +03:00

151 lines
4.4 KiB
HTML

<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GoTelegram Admin</title>
<link rel="stylesheet" href="/styles.css">
</head>
<body>
<div class="shell">
<aside class="sidebar">
<div class="brand">
<div class="brand-mark">GT</div>
<div>
<strong>GoTelegram</strong>
<span>Local Admin</span>
</div>
</div>
<nav>
<a href="#dashboard" class="active">Dashboard</a>
<a href="#keys">Keys</a>
<a href="#traffic">Traffic</a>
<a href="#backups">Backups</a>
<a href="#logs">Logs</a>
</nav>
</aside>
<main>
<header class="topbar">
<div>
<p class="eyebrow">127.0.0.1:1984</p>
<h1>GoTelegram Admin</h1>
</div>
<button id="refreshBtn" class="ghost">Refresh</button>
</header>
<section id="dashboard" class="section">
<div class="metric-grid">
<article class="metric-card">
<span>Mode</span>
<strong id="metricMode">--</strong>
<small id="metricDomain">--</small>
</article>
<article class="metric-card">
<span>Keys</span>
<strong id="metricUsers">0</strong>
<small>configured users</small>
</article>
<article class="metric-card">
<span>Proxy Traffic</span>
<strong id="metricProxyTraffic">0 B</strong>
<small id="metricProxyPackets">0 packets</small>
</article>
<article class="metric-card">
<span>Site Traffic</span>
<strong id="metricSiteTraffic">0 B</strong>
<small id="metricSitePackets">0 packets</small>
</article>
</div>
<div class="service-grid" id="services"></div>
</section>
<section id="traffic" class="section split">
<div>
<div class="section-head">
<div>
<p class="eyebrow">Traffic</p>
<h2>History</h2>
</div>
</div>
<div class="chart-wrap">
<canvas id="trafficChart" height="260"></canvas>
</div>
</div>
<aside class="activity">
<p class="eyebrow">Runtime</p>
<pre id="runtimeBox">{}</pre>
</aside>
</section>
<section id="keys" class="section">
<div class="section-head">
<div>
<p class="eyebrow">Access</p>
<h2>User keys</h2>
</div>
<form id="addUserForm" class="inline-form">
<input id="userName" autocomplete="off" placeholder="client-name">
<button type="submit">Add key</button>
</form>
</div>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>User</th>
<th>Secret</th>
<th>Link</th>
<th></th>
</tr>
</thead>
<tbody id="usersTable"></tbody>
</table>
</div>
</section>
<section id="backups" class="section split">
<div>
<div class="section-head">
<div>
<p class="eyebrow">Snapshots</p>
<h2>Backups</h2>
</div>
<button id="createBackupBtn">Create backup</button>
</div>
<div id="backupsList" class="backup-list"></div>
</div>
<aside class="activity">
<p class="eyebrow">Events</p>
<div id="events"></div>
</aside>
</section>
<section id="logs" class="section">
<div class="section-head">
<div>
<p class="eyebrow">Journal</p>
<h2>Logs</h2>
</div>
<div class="inline-form">
<select id="logService">
<option value="telemt">telemt</option>
<option value="nginx">nginx</option>
<option value="gotelegram-bot">bot</option>
<option value="gotelegram-stats">stats</option>
<option value="gotelegram-admin">admin</option>
</select>
<button id="loadLogsBtn" type="button">Load</button>
</div>
</div>
<pre id="logsBox" class="logs"></pre>
</section>
</main>
</div>
<div id="toast" class="toast"></div>
<script src="/app.js" type="module"></script>
</body>
</html>