1 line
11 KiB
HTML
1 line
11 KiB
HTML
<!DOCTYPE html><html lang="en" data-theme="webapp-light"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="xmode" content="dev" /><meta name="xapp" content="mainapp" /><meta name="xtribe" content="dev" /><meta name="xnation" content="zero" /><title data-i18n="app.title">Setup - apxtri</title><script src="/cdn/dev/lib/axios/dist/axios.min.js"></script><script src="/cdn/dev/lib/openpgp/dist/openpgp.min.js"></script><script src="/cdn/dev/lib/bip39/bip39.js"></script><script src="/cdn/dev/lib/apxtri/draft.js"></script><script src="/cdn/dev/lib/apxtri/auth.js"></script><script src="/cdn/dev/lib/apxtri/localdb.js"></script><link href="/cdn/dev/css/base.css" rel="stylesheet" /><link href="/cdn/dev/css/setup.css" rel="stylesheet" /><link rel="icon" href="/cdn/dev/static/img/logo/logoX.svg" type="image/svg+xml" /></head><body class="min-h-screen bg-base-200 flex items-center justify-center p-4"><div id="loading-overlay" class="flex items-center justify-center"><span class="loading loading-spinner loading-lg text-primary"></span></div><div class="max-w-[600px] w-full mx-auto"><div id="msginfo" class="hidden mb-3 text-sm w-full mx-auto"></div><div id="screen-welcome" class="screen card bg-base-100 shadow-xl"><div class="card-body text-center py-12"><div class="avatar placeholder mb-6"><div class="bg-primary text-primary-content rounded-full w-24 h-24 mx-auto flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" class="w-12 h-12" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z"/></svg></div></div><h1 class="text-2xl font-bold mb-2" data-i18n="welcome.title">Welcome</h1><p class="opacity-60 mb-1" data-i18n="welcome.subtitle">apxtri instance · <strong id="status-town">-</strong></p><p class="text-sm opacity-50 mb-6" data-i18n="welcome.desc">This instance is not configured yet.</p><div class="space-y-3 text-left"><button class="btn btn-primary btn-block btn-lg justify-start" onclick='App.selectMode("new")'><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v6m3-3H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/></svg><div class="text-left"><span class="font-bold" data-i18n="welcome.new">New nation</span><br><span class="text-xs opacity-70" data-i18n="welcome.new_desc">Start a fresh blockchain</span></div></button> <button class="btn btn-outline btn-block btn-lg justify-start" onclick='App.selectMode("sync")'><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19.5 12c0-1.232-.046-2.453-.138-3.662a4.006 4.006 0 0 0-3.7-3.7 48.678 48.678 0 0 0-7.324 0 4.006 4.006 0 0 0-3.7 3.7c-.017.22-.032.441-.046.662M19.5 12l3-3m-3 3-3-3m-12 3c0 1.232.046 2.453.138 3.662a4.006 4.006 0 0 0 3.7 3.7 48.656 48.656 0 0 0 7.324 0 4.006 4.006 0 0 0 3.7-3.7c.017-.22.032-.441.046-.662M4.5 12l3 3m-3-3-3 3"/></svg><div class="text-left"><span class="font-bold" data-i18n="welcome.sync">Sync blockchain</span><br><span class="text-xs opacity-70" data-i18n="welcome.sync_desc">Connect to an existing network</span></div></button></div><div class="mt-6 pt-4 border-t border-base-300 flex items-center justify-center gap-2"><span class="text-xs opacity-50">Language:</span> <button class="btn btn-xs btn-ghost btn-lang" data-lg="en">🇬🇧 EN</button> <button class="btn btn-xs btn-ghost btn-lang" data-lg="fr">🇫🇷 FR</button> <button class="btn btn-xs btn-ghost btn-lang" data-lg="de">🇩🇪 DE</button> <button class="btn btn-xs btn-ghost btn-lang" data-lg="it">🇮🇹 IT</button> <button class="btn btn-xs btn-ghost btn-lang" data-lg="es">🇪🇸 ES</button> <button class="btn btn-xs btn-ghost btn-lang" data-lg="nl">🇳🇱 NL</button></div></div></div><div id="screen-identity" class="screen hidden card bg-base-100 shadow-xl"><div class="card-body"><p class="text-xs opacity-50 mb-1" id="mode-display">-</p><h2 class="card-title" data-i18n="identity.title">Create the mayor identity</h2><p class="text-sm opacity-60 mb-3" data-i18n="identity.subtitle">The alias will be the <strong>mayor</strong> of town <span id="town-display">-</span></p><div id="sync-sources" class="hidden"><div class="form-control mb-3"><label class="label"><span class="label-text" data-i18n="identity.sync_source">Sync source</span></label><div id="sync-loading" class="hidden"><span class="loading loading-spinner loading-sm"></span> <span data-i18n="identity.sync_loading">Searching for nations...</span></div><div id="sync-has-nations" class="hidden"><select id="sync-nation-select" class="select select-bordered w-full"><option value="" data-i18n="identity.sync_choose">Choose a nation...</option></select> <label class="label"><span class="label-text-alt text-xs opacity-50" data-i18n="identity.sync_nations">Available nations with existing blockchain</span></label></div><div id="sync-no-nations" class="hidden"><input id="sync-domain-input" data-i18n="identity.sync_domain" placeholder="town.nation.example.com" class="input input-bordered w-full"> <label class="label"><span class="label-text-alt text-xs opacity-50" data-i18n="identity.sync_nations">Domain of an existing town for bootstrap</span></label></div></div></div><div id="sync-sources-new" class="hidden mb-3"><div class="stat bg-base-200 rounded-lg p-3"><div class="stat-title text-xs" data-i18n="identity.new_nation">New nation</div><div class="stat-value text-lg" id="new-nation-name">-</div></div></div><div class="form-control"><label class="label"><span class="label-text" data-i18n="identity.alias_label">Alias *</span></label> <input id="setup-alias" data-i18n="identity.alias_placeholder" placeholder="myalias" class="input input-bordered w-full" pattern="[a-z0-9]*" autocomplete="off"></div><div class="form-control"><label class="label"><span class="label-text" data-i18n="identity.email_label">Email (optional - recovery)</span></label> <input id="setup-email" type="email" data-i18n="identity.email_placeholder" placeholder="mail@example.com" class="input input-bordered w-full" autocomplete="off"></div><div id="keys-generated" class="hidden mt-4"><div class="alert alert-success mb-3"><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m4.5 12.75 6 6 9-13.5"/></svg> <span data-i18n="identity.keys_generated">Keys generated! Write down your 24 words and download the file.</span></div><div class="bg-base-200 rounded-lg p-3 mb-3"><p class="text-xs font-bold mb-2" data-i18n="identity.mnemonic_label">Your 24 recovery words</p><textarea id="mnemonic-display" rows="3" class="textarea textarea-bordered w-full font-mono text-xs" readonly="readonly"></textarea></div><div id="mnemonic-confirm" class="hidden mb-3"><p class="text-xs opacity-60 mb-2" data-i18n="identity.mnemonic_confirm">Confirm your recovery phrase by typing it below:</p><textarea id="mnemonic-confirm-input" rows="2" data-i18n="identity.mnemonic_placeholder" placeholder="paste your 24 words in order" class="textarea textarea-bordered w-full font-mono text-xs"></textarea> <button id="mnemonic-confirm-btn" class="btn btn-outline btn-sm w-full mt-1" data-i18n="identity.mnemonic_verify">Verify phrase</button></div><div class="mb-3"><button id="download-backup-btn" class="btn btn-outline btn-secondary w-full" data-i18n="identity.dl_backup">Backup (words + key)</button><p id="download-required-hint" class="text-xs text-error mt-1 text-center" data-i18n="identity.dl_required" >Download your backup before creating the identity.</p></div><div id="setup-trusted-block" class="hidden"><div class="form-control"><label class="label cursor-pointer justify-start gap-3"><input id="setup-trusted" type="checkbox" checked="checked" class="checkbox checkbox-secondary"> <span class="label-text text-xs" data-i18n="identity.trust_label">Trust the private key to the server (writes PRIVKMAJOR in .env)</span></label></div><button id="finalize-btn" class="btn btn-primary w-full hidden" onclick="App.finalize()" data-i18n="identity.finalize">Finalize installation</button></div></div><button id="generate-btn" class="btn btn-primary w-full mt-3" onclick="App.generateKeys()" data-i18n="identity.generate">Generate my PGP keys</button><div class="mt-4 pt-3 border-t border-base-300 flex items-center justify-center gap-2"><span class="text-xs opacity-50">Language:</span> <button class="btn btn-xs btn-ghost btn-lang" data-lg="en">🇬🇧 EN</button> <button class="btn btn-xs btn-ghost btn-lang" data-lg="fr">🇫🇷 FR</button> <button class="btn btn-xs btn-ghost btn-lang" data-lg="de">🇩🇪 DE</button> <button class="btn btn-xs btn-ghost btn-lang" data-lg="it">🇮🇹 IT</button> <button class="btn btn-xs btn-ghost btn-lang" data-lg="es">🇪🇸 ES</button> <button class="btn btn-xs btn-ghost btn-lang" data-lg="nl">🇳🇱 NL</button></div></div></div><div id="screen-complete" class="screen hidden card bg-base-100 shadow-xl"><div class="card-body text-center py-8"><div class="avatar placeholder mb-4"><div class="bg-success text-success-content rounded-full w-24 h-24 mx-auto flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" class="w-12 h-12" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m4.5 12.75 6 6 9-13.5"/></svg></div></div><h2 class="text-2xl font-bold mb-2" data-i18n="complete.title">Installation complete</h2><p class="opacity-60 mb-4" data-i18n="complete.desc">Your apxtri instance is ready</p><div id="finalize-https-block" class="hidden mb-4"><div class="flex items-center gap-3 p-4 rounded-lg bg-base-200"><span class="loading loading-spinner loading-md text-primary" id="https-spinner"></span><p class="text-sm flex-1" id="https-status">Enabling HTTPS...</p></div><button id="https-finalize-btn" class="btn btn-secondary btn-block hidden mt-2" onclick="App.finalizeHttps()">Retry HTTPS</button></div><div class="stats stats-vertical shadow w-full mb-4"><div class="stat"><div class="stat-title" data-i18n="complete.alias">Alias</div><div class="stat-value text-lg" id="result-alias">-</div></div><div class="stat"><div class="stat-title" data-i18n="complete.profils">Profiles</div><div class="stat-value text-lg" id="result-profils">-</div></div></div><a href="/identities/" class="btn btn-primary btn-block mt-4" data-i18n="complete.go_identities" onclick="if('https:'!==location.protocol){var _h=App._handoff,_u=_h?'https://'+location.host+'/identities/?setup='+encodeURIComponent(_h.setup)+'&xdays='+encodeURIComponent(_h.xdays)+'&xhash='+encodeURIComponent(_h.xhash):'https://'+location.host+'/identities/';location.href=_u;return false}">Access my identities</a></div></div></div><script src="js/app.js"></script></body></html> |