pithos/ui/index.html
Local Dev cacbdd571f Pithos 0.3.0: PIN gate and a recovery phrase from the Theseus vault
In Theseus, Pithos now opens only with the vault unlocked: it asks
Theseus for the unlock (api.vault.requestUnlock), and Theseus shows its
own PIN prompt, falling back to the master password after three wrong
tries. Pithos never sees either. When the vault locks (Settings > Lock
now) Pithos locks within a few seconds; the add-on watches from the main
process because a hidden panel's timers run about once a minute.

The guide's phrase step gains "Use my Theseus vault" (the default when a
vault exists): the add-on derives the 12-word phrase from the vault
(purpose path pithos/sia-recovery/v1, first 16 bytes as BIP-39 entropy)
and hands it straight to s3d, so there is nothing to write down and the
vault backup restores storage access. The path is now fixed; changing it
would cut users off from their data.

Needs the vault-derive capability. On a Theseus without requestUnlock it
runs ungated, as before.
2026-10-03 20:42:21 +02:00

52 lines
2 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pithos</title>
<link rel="icon" href="icon.svg" type="image/svg+xml">
<link rel="stylesheet" href="app.css">
</head>
<body>
<div id="signin" class="signin" hidden>
<form class="card signin-card" id="signin-form">
<img src="icon.svg" alt="" width="48" height="48">
<h1>Pithos</h1>
<p class="muted" id="signin-hint">Enter the console password.</p>
<input type="password" id="signin-password" autocomplete="current-password" placeholder="Password" required>
<button class="btn primary" type="submit">Sign in</button>
<p class="error" id="signin-error" hidden></p>
</form>
</div>
<div id="locked" class="signin" hidden>
<div class="card signin-card">
<img src="icon.svg" alt="" width="48" height="48">
<h1>Pithos is locked</h1>
<p class="muted">Unlock your Theseus vault with your PIN or master password to open Pithos.</p>
<button class="btn primary" type="button" id="unlock-btn">Unlock</button>
</div>
</div>
<div id="app" class="app" hidden>
<aside class="sidebar">
<div class="brand"><img src="icon.svg" alt="" width="28" height="28"><span>Pithos</span></div>
<nav id="nav">
<a href="#/start" data-view="start">Get started</a>
<a href="#/overview" data-view="overview">Overview</a>
<a href="#/buckets" data-view="buckets">Buckets</a>
<a href="#/users" data-view="users">Users &amp; keys</a>
<a href="#/setup" data-view="setup">Sia connection</a>
<a href="#/settings" data-view="settings">Settings</a>
<a href="#/logs" data-view="logs">Logs</a>
</nav>
<div class="daemon-pill" id="daemon-pill"><span class="dot"></span><span class="label">…</span></div>
</aside>
<main id="main"></main>
</div>
<div id="modal-root"></div>
<div id="toasts" class="toasts" aria-live="polite"></div>
<script type="module" src="app.js"></script>
</body>
</html>