From 46912a74dd0af0feada356cefde49c9d198a5d66 Mon Sep 17 00:00:00 2001 From: Local Dev Date: Sat, 3 Oct 2026 21:25:24 +0200 Subject: [PATCH] Pithos 0.3.1: plain Next on the account step, confirmed by a checkbox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The account step's button read "I have an account — Next", folding a confirmation into navigation. It is a plain Next now, enabled by an explicit "I have created my Sia Storage account and I am signed in" checkbox (or by choosing your own indexer). Pithos cannot see the sia.storage tab to detect the sign-in itself, and the Connect step proves it anyway: approving needs a signed-in account. --- package.json | 2 +- theseus/addon.json | 2 +- ui/app.js | 26 ++++++++++++++++++-------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 7ed2d4e..59a1637 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pithos", - "version": "0.3.0", + "version": "0.3.1", "description": "A control panel for s3d, the Sia S3 gateway: daemon, users and keys, buckets, upload pipeline.", "license": "MPL-2.0", "type": "module", diff --git a/theseus/addon.json b/theseus/addon.json index b3e6c81..92b0513 100644 --- a/theseus/addon.json +++ b/theseus/addon.json @@ -1,7 +1,7 @@ { "id": "pithos", "name": "Pithos", - "version": "0.3.0", + "version": "0.3.1", "description": "Run s3d, the Sia S3 gateway, from the Theseus sidebar: connect it to a Sia indexer, create S3 users and access keys, browse and share buckets, and watch uploads reach Sia.", "author": "Silent Mode", "icon": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCA2NCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjM2RkYzk3Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMWU4ZjZhIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZD0iTTIyIDZoMjB2NWMwIDItMiAzLTIgNSA4IDMgMTQgMTEgMTQgMjEgMCAxMi05IDIxLTIyIDIxUzEwIDQ5IDEwIDM3YzAtMTAgNi0xOCAxNC0yMSAwLTItMi0zLTItNXoiIGZpbGw9InVybCgjZykiLz48cGF0aCBkPSJNMTQgMzBoMzZNMTMgNDBoMzgiIHN0cm9rZT0iIzBiMWYxOCIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIG9wYWNpdHk9Ii41NSIvPjwvc3ZnPgo=", diff --git a/ui/app.js b/ui/app.js index bc58eca..2121f12 100644 --- a/ui/app.js +++ b/ui/app.js @@ -388,17 +388,27 @@ function getStarted(main) { content = [ h('h2', {}, 'Create your Sia Storage account'), h('p', {}, 'Sia Storage runs the indexer that rents space from Sia hosts for you. The free plan gives you 50 GB; you sign up with Sia Storage directly, and Pithos never sees your account password.'), - h('div', { class: 'row' }, - h('button', { class: 'btn primary', onclick: () => openLink('https://sia.storage') }, 'Open sia.storage ↗'), - h('span', { class: 'muted small' }, 'Sign up there, then come back and press Next.')), - h('label', { class: 'check', style: 'margin-top:18px' }, + !wiz.ownIndexer && [ + h('div', { class: 'row' }, + h('button', { class: wiz.accountReady ? 'btn' : 'btn primary', onclick: () => openLink('https://sia.storage') }, 'Open sia.storage ↗'), + h('span', { class: 'muted small' }, 'Sign up or sign in there, then come back here.')), + // Pithos cannot see the sia.storage tab, so the user confirms; the + // Connect step proves it anyway, since approving needs a signed-in account. + h('label', { class: 'check', style: 'margin-top:16px' }, + h('input', { type: 'checkbox', checked: !!wiz.accountReady, onchange: (e) => { wiz.accountReady = e.target.checked; draw(); } }), + 'I have created my Sia Storage account and I am signed in'), + ], + h('label', { class: 'check', style: 'margin-top:12px' }, h('input', { type: 'checkbox', checked: wiz.ownIndexer, onchange: (e) => { wiz.ownIndexer = e.target.checked; if (!wiz.ownIndexer) wiz.indexerUrl = 'https://sia.storage'; draw(); } }), 'I run my own indexer instead'), wiz.ownIndexer && h('label', { class: 'field', style: 'margin-top:8px' }, h('span', {}, 'Indexer URL'), url), - nav({ nextLabel: 'I have an account — Next', onNext: () => { - if (!/^https?:\/\/\S+$/.test(wiz.indexerUrl)) return toast('Enter the indexer URL', 'error'); - go(2); - } }), + nav({ + nextDisabled: !wiz.ownIndexer && !wiz.accountReady, + onNext: () => { + if (!/^https?:\/\/\S+$/.test(wiz.indexerUrl)) return toast('Enter the indexer URL', 'error'); + go(2); + }, + }), ]; break; }