Add MrTerm Web: self-hosted browser version (Docker Compose) with user accounts, per-user vaults encrypted by the login password, the desktop UI over WebSocket, SFTP upload/download over HTTP; share backend channels between Android and web (src/core/backend.js)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
// Anmeldung bzw. Ersteinrichtung (Admin-Konto) der Web-Version
|
||||
(async () => {
|
||||
'use strict';
|
||||
I18N.setLanguage('auto', navigator.language);
|
||||
const T = I18N.t;
|
||||
const $ = (s) => document.querySelector(s);
|
||||
document.querySelectorAll('[data-t]').forEach((e) => { e.textContent = T(e.dataset.t); });
|
||||
|
||||
const st = await fetch('/api/state').then((r) => r.json());
|
||||
if (st.user) { location.href = '/app/src/renderer/index.html'; return; }
|
||||
const setup = st.setup;
|
||||
$('#ver').textContent = `MrTerm Web ${st.version}`;
|
||||
$('#intro').textContent = setup ? T('Welcome! Create the administrator account for this MrTerm server.') : T('Sign in to your MrTerm server.');
|
||||
$('#submit').textContent = setup ? T('Create account') : T('Sign in');
|
||||
$('#repeatRow').hidden = !setup;
|
||||
if (setup) $('[name=password]').autocomplete = 'new-password';
|
||||
|
||||
$('#form').onsubmit = async (e) => {
|
||||
e.preventDefault();
|
||||
const f = Object.fromEntries(new FormData(e.target));
|
||||
const err = $('#err');
|
||||
err.hidden = true;
|
||||
if (setup && f.password !== f.repeat) { err.textContent = T('The passwords do not match.'); err.hidden = false; return; }
|
||||
$('#submit').disabled = true;
|
||||
try {
|
||||
const r = await fetch(setup ? '/api/setup' : '/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-MrTerm': '1' }, body: JSON.stringify({ name: f.name, password: f.password }) });
|
||||
const j = await r.json().catch(() => ({}));
|
||||
if (!r.ok) throw new Error(j.error || r.statusText);
|
||||
location.href = '/app/src/renderer/index.html';
|
||||
} catch (ex) {
|
||||
err.textContent = T(ex.message);
|
||||
err.hidden = false;
|
||||
$('#submit').disabled = false;
|
||||
}
|
||||
};
|
||||
})();
|
||||
Reference in New Issue
Block a user