161 lines
5.8 KiB
Markdown
161 lines
5.8 KiB
Markdown
# Bank landing (`bank.hacktivism.ch`)
|
|
|
|
English intro for **GOA exploration**: put coins in a GNU Taler wallet, optionally
|
|
open your own bank account, and point merchants at `taler.hacktivism.ch`.
|
|
|
|
| Public URL | What |
|
|
|------------|------|
|
|
| `https://bank.hacktivism.ch/` · `/intro/` | Landing (nginx in bank container → host **9013**, Caddy) |
|
|
| `https://bank.hacktivism.ch/intro/stats.json` | **Live stats** (written *inside* bank container) |
|
|
| `https://bank.hacktivism.ch/webui/` | libeufin-bank SPA (register · login · withdraw) when libeufin is up on **9012** |
|
|
| `https://exchange.hacktivism.ch/` | Exchange (ToS `/terms`, keys `/keys`) |
|
|
| `https://taler.hacktivism.ch/` | Merchant backend |
|
|
|
|
## User flow (documented on the page)
|
|
|
|
Same **one-step** pattern as [taler-ops.ch Android/iOS guides](https://taler-ops.ch/en/users-android.html):
|
|
|
|
1. **Install wallet** — Android (Play Store / F-Droid) and iOS (App Store), plus hub `wallet.taler.net`.
|
|
2. **One QR / link** — `taler://withdraw-exchange/exchange.hacktivism.ch/`
|
|
Adds the GOA exchange **and** starts withdrawal (accept ToS → enter amount).
|
|
|
|
The old two-step path (`taler://add-exchange/…` + demo `taler://withdraw/…` from `withdraw.uri`) is **removed** from the landing.
|
|
|
|
Optional: bank UI (`/webui/`) and merchant (`taler.hacktivism.ch`) stay further down.
|
|
|
|
### CLI sketch (fresh wallet DB)
|
|
|
|
```bash
|
|
# equivalent one-step in CLI terms:
|
|
taler-wallet-cli exchanges add https://exchange.hacktivism.ch/
|
|
taler-wallet-cli exchanges accept-tos https://exchange.hacktivism.ch/
|
|
# then withdraw from the exchange (amount chosen in wallet UI)
|
|
```
|
|
|
|
---
|
|
|
|
## Live stats (in bank container)
|
|
|
|
Stats are **not** computed on the laptop or host browser. A small script runs
|
|
**inside the bank container**, queries libeufin for the demo funding account
|
|
(`explorer`), and writes a public JSON file next to the landing assets.
|
|
|
|
| Piece | Path / role |
|
|
|-------|-------------|
|
|
| Generator (in-container) | `/usr/local/bin/landing-stats.sh` |
|
|
| Source in admin-log | `scripts/taler-bank/landing-stats.sh` |
|
|
| Host installer | `scripts/taler-bank/landing-stats-install.sh` |
|
|
| Output | `/var/www/bank-landing/stats.json` → `https://bank.hacktivism.ch/intro/stats.json` |
|
|
| Landing UI | `index.html` section **GOA flow · live** |
|
|
|
|
### What the page shows
|
|
|
|
- **Bank accounts** — registered accounts (libeufin `GET /accounts`, admin)
|
|
- **Wallets involved** — unique reserve pubs from Taler withdrawal debits (≈ individual wallet withdraws)
|
|
- **Withdraws / total out** — customer debit withdrawals only (exchange mirror skipped)
|
|
- **Last withdraws** — recent list with amount, time (**CEST** / `Europe/Zurich`), bank username
|
|
- **Last 24h / 7d** — count · amount
|
|
- Footer: updated time (CEST), user-account count, accounts that funded withdraws — **no** “demo QR / pool explorer”
|
|
|
|
### `stats.json` shape (abridged)
|
|
|
|
```json
|
|
{
|
|
"ok": true,
|
|
"currency": "GOA",
|
|
"generated_at": "2026-07-09T18:55Z",
|
|
"account": "explorer",
|
|
"balance": "GOA:960",
|
|
"withdraws": {
|
|
"count": 4,
|
|
"total_amount": "GOA:40",
|
|
"last_amount": "GOA:10",
|
|
"last_at": "2026-07-09T08:49Z",
|
|
"last_24h": { "count": 2, "amount": "GOA:20" },
|
|
"last_7d": { "count": 4, "amount": "GOA:40" }
|
|
},
|
|
"flow": {
|
|
"debits_scanned": "GOA:40",
|
|
"credits_scanned": "GOA:1000",
|
|
"tx_scanned": 5
|
|
},
|
|
"demo": {
|
|
"uri": "taler://withdraw/…",
|
|
"amount": "GOA:10",
|
|
"status": "confirmed",
|
|
"ready": false
|
|
},
|
|
"source": "in-container landing-stats.sh"
|
|
}
|
|
```
|
|
|
|
### Install + refresh (on koopa host)
|
|
|
|
```bash
|
|
# from laptop: copy scripts, then on koopa:
|
|
cd /path/to/koopa-admin-log/scripts/taler-bank
|
|
|
|
# copy into container + one-shot run
|
|
sudo ./landing-stats-install.sh
|
|
|
|
# every minute inside the container (* * * * *)
|
|
sudo ./landing-stats-install.sh --cron
|
|
# optional: LANDING_STATS_CRON='*/5 * * * *' ./landing-stats-install.sh --cron
|
|
|
|
# later: only re-run
|
|
sudo ./landing-stats-install.sh --run-only
|
|
```
|
|
|
|
Requirements **inside** the container:
|
|
|
|
- `curl`, `awk` (mawk OK), `sed`, `date` — **no python**
|
|
- libeufin-bank listening on loopback (script auto-detects `PORT` / 9012 / 8080)
|
|
- `/root/bank-explorer-password.txt` (or `BANK_PASS=…` on the `podman exec`)
|
|
- writable `/var/www/bank-landing/` (same tree nginx uses for `/intro/`)
|
|
|
|
`make-demo-withdraw-qr.sh` also calls `landing-stats.sh` after refreshing the demo URI,
|
|
when the binary is already installed at `/usr/local/bin/landing-stats.sh`.
|
|
|
|
### Manual one-liner (debug)
|
|
|
|
```bash
|
|
podman exec -e LANDING_DIR=/var/www/bank-landing taler-hacktivism-bank \
|
|
/usr/local/bin/landing-stats.sh
|
|
curl -sS https://bank.hacktivism.ch/intro/stats.json | python3 -m json.tool
|
|
```
|
|
|
|
---
|
|
|
|
## Host / container files
|
|
|
|
Landing root (nginx in bank container), typically under something like
|
|
`/var/www/bank-landing/` or the container path mapped for **9013**:
|
|
|
|
| File | Role |
|
|
|------|------|
|
|
| `index.html` | landing (steps + stats panel) |
|
|
| `qrcode.min.js` | QR helper |
|
|
| `stats.json` | **live stats** (from in-container script) |
|
|
| `withdraw.uri` | current demo `taler://withdraw/…` (optional) |
|
|
| `withdraw.amount` | e.g. `GOA:10` (optional) |
|
|
| `withdraw-watch.ids` | ids for auto-confirm helper (optional) |
|
|
|
|
## Deploy landing HTML
|
|
|
|
```bash
|
|
# from laptop (example) — path depends on where nginx in the bank container reads from
|
|
scp koopa-admin-log/configs/bank-landing/index.html \
|
|
koopa-admin-log/configs/bank-landing/qrcode.min.js \
|
|
hernani@koopa:/tmp/bank-landing/
|
|
# then copy into the bank container / host path used by nginx :9013
|
|
podman cp /tmp/bank-landing/index.html taler-hacktivism-bank:/var/www/bank-landing/index.html
|
|
```
|
|
|
|
### Demo QR refresh (in container, no python)
|
|
|
|
```bash
|
|
podman exec taler-hacktivism-bank /usr/local/bin/refresh-demo-withdraw.sh
|
|
# source: scripts/taler-bank/refresh-demo-withdraw.sh
|
|
```
|
|
|
|
Older host script (needs python3): `scripts/taler-bank/make-demo-withdraw-qr.sh`
|