161 lines
6.5 KiB
HTML
161 lines
6.5 KiB
HTML
<!DOCTYPE html>
|
|
<html class="light">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>FIPS Mesh Network</title>
|
|
<link rel="stylesheet" href="sovereign://fips.css">
|
|
</head>
|
|
<body>
|
|
<h1>FIPS Mesh Network <button class="btn" id="refresh-btn">Refresh</button></h1>
|
|
|
|
<div class="tabs">
|
|
<button class="tab-btn active" data-tab="status">Status</button>
|
|
<button class="tab-btn" data-tab="peers">Peers</button>
|
|
<button class="tab-btn" data-tab="network">Network</button>
|
|
<button class="tab-btn" data-tab="tree">Tree</button>
|
|
<button class="tab-btn" data-tab="directory">Directory</button>
|
|
</div>
|
|
|
|
<div id="status-msg" class="status"></div>
|
|
|
|
<!-- Status tab -->
|
|
<div class="tab-panel active" id="tab-status">
|
|
<h2>Status</h2>
|
|
<div class="card" id="fips-status">
|
|
<div class="info-row"><span>State</span><span id="fips-state">—</span></div>
|
|
<div class="info-row"><span>Node</span><span id="fips-node" class="mono">—</span></div>
|
|
<div class="info-row"><span>TUN</span><span id="fips-tun">—</span></div>
|
|
<div class="info-row"><span>Peers</span><span id="fips-peers">—</span></div>
|
|
<div class="info-row"><span>Tree</span><span id="fips-tree">—</span></div>
|
|
<div class="info-row"><span>Ownership</span><span id="fips-ownership">—</span></div>
|
|
<div class="info-row"><span>Control</span><span id="fips-control" class="mono">—</span></div>
|
|
<div class="info-row" id="fips-error-row" style="display:none">
|
|
<span>Error</span><span id="fips-error" class="err-text"></span>
|
|
</div>
|
|
<div class="actions">
|
|
<button class="btn" id="restart-btn">Restart Service</button>
|
|
</div>
|
|
</div>
|
|
|
|
<h2>Tor Status <span class="note">(read-only)</span></h2>
|
|
<div class="card" id="tor-status">
|
|
<div class="info-row"><span>State</span><span id="tor-state">—</span></div>
|
|
<div class="info-row"><span>Bootstrap</span><span id="tor-bootstrap">—</span></div>
|
|
<div class="info-row"><span>SOCKS</span><span id="tor-socks" class="mono">—</span></div>
|
|
<div class="info-row"><span>Ownership</span><span id="tor-ownership">—</span></div>
|
|
<div class="info-row" id="tor-error-row" style="display:none">
|
|
<span>Error</span><span id="tor-error" class="err-text"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Peers tab -->
|
|
<div class="tab-panel" id="tab-peers">
|
|
<h2>Peers</h2>
|
|
<div id="peers-container">
|
|
<p class="empty" id="peers-empty">Loading peers…</p>
|
|
<table id="peers-table" style="display:none">
|
|
<thead>
|
|
<tr>
|
|
<th>npub</th><th>address</th><th>transport</th><th>state</th><th></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="peers-body"></tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<h2>Add Peer</h2>
|
|
<div class="card">
|
|
<div class="form">
|
|
<input type="text" id="peer-npub" placeholder="npub1..." size="50">
|
|
<input type="text" id="peer-address" placeholder="host:port" size="30">
|
|
<select id="peer-transport">
|
|
<option value="udp">udp</option>
|
|
<option value="tcp">tcp</option>
|
|
</select>
|
|
<button class="btn" id="connect-btn">Connect</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Network tab -->
|
|
<div class="tab-panel" id="tab-network">
|
|
<h2>Mesh Summary</h2>
|
|
<div class="card" id="mesh-summary">
|
|
<div class="info-row"><span>Known nodes</span><span id="mesh-known">—</span></div>
|
|
<div class="info-row"><span>Direct peers</span><span id="mesh-direct">—</span></div>
|
|
<div class="info-row"><span>Tree depth</span><span id="mesh-depth">—</span></div>
|
|
<div class="info-row"><span>Root</span><span id="mesh-root" class="mono">—</span></div>
|
|
<div class="info-row"><span>Our parent</span><span id="mesh-parent">—</span></div>
|
|
<div class="info-row" id="mesh-error-row" style="display:none">
|
|
<span>Error</span><span id="mesh-error" class="err-text"></span>
|
|
</div>
|
|
</div>
|
|
|
|
<h2>Known Nodes <span class="note" id="nodes-count-label"></span></h2>
|
|
<div id="nodes-container">
|
|
<p class="empty" id="nodes-empty">Loading network…</p>
|
|
<table id="nodes-table" style="display:none">
|
|
<thead>
|
|
<tr>
|
|
<th></th><th>npub</th><th>name</th><th>ipv6</th><th>last seen</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="nodes-body"></tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Directory tab -->
|
|
<div class="tab-panel" id="tab-directory">
|
|
<h2>FIPS Node Directory <span class="note" id="dir-count-label"></span></h2>
|
|
<p class="note">All nodes that have published a FIPS service advert (Kind 37195) to the Nostr advert relays. This is the global network directory, like join.fips.network.</p>
|
|
<div id="dir-container">
|
|
<p class="empty" id="dir-empty">Click to load the directory from Nostr relays…</p>
|
|
<table id="dir-table" style="display:none">
|
|
<thead>
|
|
<tr>
|
|
<th></th><th>npub</th><th>endpoint</th><th></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="dir-body"></tbody>
|
|
</table>
|
|
</div>
|
|
<div class="actions" id="dir-actions" style="display:none">
|
|
<button class="btn" id="dir-refresh-btn">Reload Directory</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tree tab -->
|
|
<div class="tab-panel" id="tab-tree">
|
|
<h2>Spanning Tree</h2>
|
|
<div class="card" id="tree-summary">
|
|
<div class="info-row"><span>Root</span><span id="tree-root" class="mono">—</span></div>
|
|
<div class="info-row"><span>Is root</span><span id="tree-is-root">—</span></div>
|
|
<div class="info-row"><span>Our depth</span><span id="tree-depth">—</span></div>
|
|
<div class="info-row"><span>Our parent</span><span id="tree-parent">—</span></div>
|
|
<div class="info-row"><span>Our node addr</span><span id="tree-node-addr" class="mono">—</span></div>
|
|
<div class="info-row" id="tree-error-row" style="display:none">
|
|
<span>Error</span><span id="tree-error" class="err-text"></span>
|
|
</div>
|
|
</div>
|
|
|
|
<h2>Tree Peers <span class="note">(1-hop neighbors)</span></h2>
|
|
<div id="tree-peers-container">
|
|
<p class="empty" id="tree-peers-empty">Loading tree…</p>
|
|
<table id="tree-peers-table" style="display:none">
|
|
<thead>
|
|
<tr>
|
|
<th>node addr</th><th>name</th><th>depth</th><th>distance</th><th>role</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="tree-peers-body"></tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="sovereign://fips.js"></script>
|
|
</body>
|
|
</html>
|