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.
52 lines
2 KiB
HTML
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 & 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>
|