forked from bitcoinafterlife/bal-welist-website
Check server is read-only: list lookup and server data, no registration
- Looks the exact URL up in /datalist and shows expiry, balance and donations from /weinfodata - No terms box, no POST /data: checking an unlisted URL creates nothing; clear message either way
This commit is contained in:
65
index.html
65
index.html
@@ -716,7 +716,70 @@ function startDepositWatch(chain, id) {
|
||||
pollDeposit();
|
||||
}
|
||||
|
||||
document.getElementById('check').addEventListener('click', () => document.getElementById('submit').click());
|
||||
// "Check server" is read-only: it looks the URL up in the list (GET /datalist) and
|
||||
// shows the server's expiry and balance from /weinfodata. It never POSTs to /data,
|
||||
// so checking a URL that is not listed creates nothing.
|
||||
function normalizeUrl(u) {
|
||||
u = u.trim();
|
||||
if (!u) return '';
|
||||
if (!u.startsWith('http://') && !u.startsWith('https://')) u = 'https://' + u;
|
||||
return u.replace(/\/+$/, '');
|
||||
}
|
||||
function hidePaymentRows() {
|
||||
document.getElementById('iv-min').parentElement.style.display = 'none';
|
||||
document.getElementById('iv-addr').parentElement.style.display = 'none';
|
||||
document.getElementById('qrcode').style.display = 'none';
|
||||
document.getElementById('share-btn').style.display = 'none';
|
||||
}
|
||||
document.getElementById('check').addEventListener('click', async () => {
|
||||
stopDepositWatch();
|
||||
const urlInput = document.getElementById('url');
|
||||
const url = normalizeUrl(urlInput.value);
|
||||
if (!url) return;
|
||||
urlInput.value = url;
|
||||
const chain = getChain();
|
||||
const status = document.getElementById('iv-status');
|
||||
const inv = document.getElementById('invoice');
|
||||
inv.classList.remove('show');
|
||||
document.getElementById('terms-box').classList.remove('show');
|
||||
status.className = '';
|
||||
status.textContent = 'Checking…';
|
||||
try {
|
||||
const listResp = await fetch(`/datalist/${chain}?page=0&limit=100`);
|
||||
if (!listResp.ok) throw new Error(`HTTP ${listResp.status}`);
|
||||
const list = await listResp.json();
|
||||
const idx = list.findIndex(d => normalizeUrl(d.url || '').toLowerCase() === url.toLowerCase());
|
||||
if (idx < 0) {
|
||||
status.className = 'err-line';
|
||||
status.textContent = `Not in the ${chain} list: no server with this exact URL. To list it, press "Add server".`;
|
||||
return;
|
||||
}
|
||||
const d = list[idx];
|
||||
const infoResp = await fetch(`/weinfodata/${chain}/${d.id}`);
|
||||
const info = infoResp.ok ? await infoResp.json() : {};
|
||||
const expiry = (info.expiry_date || '').slice(0, 10) || '—'; // '2027-07-16 00:00:00' -> the date
|
||||
const bal = info.balance != null ? fmt(info.balance) : null;
|
||||
const unc = info.unconfirmed_balance != null ? fmt(info.unconfirmed_balance) : null;
|
||||
document.getElementById('iv-chain').textContent = info.chain || chain;
|
||||
document.getElementById('iv-balance').textContent = bal ? (unc ? bal + ' (' + unc + ')' : bal) : '—';
|
||||
document.getElementById('iv-donations').textContent = info.donation != null ? fmt(info.donation) : '—';
|
||||
document.getElementById('iv-contact').textContent = '—';
|
||||
document.getElementById('iv-url').textContent = d.url;
|
||||
const weinfoEl = document.getElementById('iv-weinfo');
|
||||
weinfoEl.href = `/weinfo/${chain}/${d.id}`;
|
||||
weinfoEl.textContent = 'View page';
|
||||
document.getElementById('iv-nextdep').textContent = expiry;
|
||||
document.getElementById('iv-nextdep-row').style.display = 'flex';
|
||||
hidePaymentRows();
|
||||
status.className = 'ok-line';
|
||||
status.textContent = `Server is listed (#${idx + 1} of ${list.length}). Expiry: ${expiry}. Renewal opens 6 months before.`;
|
||||
inv.classList.add('show');
|
||||
inv.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||||
} catch (err) {
|
||||
status.className = 'err-line';
|
||||
status.textContent = 'Could not check the list right now. Please try again in a moment.';
|
||||
}
|
||||
});
|
||||
document.getElementById('submit').addEventListener('click', async () => {
|
||||
stopDepositWatch();
|
||||
const urlInput = document.getElementById('url');
|
||||
|
||||
Reference in New Issue
Block a user