merchant: dual-currency /terms installer (CHF+GOA)
This commit is contained in:
parent
4c6f82eb67
commit
495f35900d
1 changed files with 232 additions and 0 deletions
232
scripts/taler-merchant/install_dual_terms.sh
Normal file
232
scripts/taler-merchant/install_dual_terms.sh
Normal file
|
|
@ -0,0 +1,232 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Install dual-currency "No Formal Terms" ToS for the merchant backend.
|
||||||
|
# Run as root inside the merchant container (taler-hacktivism).
|
||||||
|
#
|
||||||
|
# Sets files under TERMS_DIR/en/ for TERMS_ETAG = merchant-tos-dual-v0
|
||||||
|
# (see configs/taler-merchant/merchant-overrides.conf).
|
||||||
|
set -euo pipefail
|
||||||
|
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin${PATH:+:$PATH}"
|
||||||
|
|
||||||
|
ETAG="${TERMS_ETAG:-merchant-tos-dual-v2}"
|
||||||
|
CONF="${TALER_MERCHANT_CONFIG:-/etc/taler-merchant/taler-merchant.conf}"
|
||||||
|
|
||||||
|
DATA_HOME=""
|
||||||
|
if command -v taler-config >/dev/null 2>&1; then
|
||||||
|
DATA_HOME=$(taler-config -c "$CONF" -f -s PATHS -o TALER_DATA_HOME 2>/dev/null || true)
|
||||||
|
fi
|
||||||
|
# common fallbacks
|
||||||
|
for d in \
|
||||||
|
"$DATA_HOME" \
|
||||||
|
/var/lib/taler-merchant/ \
|
||||||
|
/var/lib/taler-merchant
|
||||||
|
do
|
||||||
|
[ -n "${d:-}" ] || continue
|
||||||
|
d="${d%/}/"
|
||||||
|
if [ -d "$d" ] || mkdir -p "$d" 2>/dev/null; then
|
||||||
|
DATA_HOME="$d"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
DATA_HOME="${DATA_HOME:-/var/lib/taler-merchant/}"
|
||||||
|
TERMS_DIR="${TERMS_DIR:-${DATA_HOME%/}/terms}"
|
||||||
|
LANG_DIR="$TERMS_DIR/en"
|
||||||
|
mkdir -p "$LANG_DIR"
|
||||||
|
|
||||||
|
TITLE="No Formal Terms · Dual Currency Notice"
|
||||||
|
|
||||||
|
BODY_MD='# No Formal Terms · Dual Currency Notice
|
||||||
|
|
||||||
|
This is a **self-hosted GNU Taler merchant backend** at `taler.hacktivism.ch` (hacktivism.ch).
|
||||||
|
|
||||||
|
**No formal terms of service** from Taler Operations AG (or any other third-party portal operator) apply to this instance. This short notice is the site policy for using the backend.
|
||||||
|
|
||||||
|
## Dual currency
|
||||||
|
|
||||||
|
This backend is configured for **two currencies at once**:
|
||||||
|
|
||||||
|
- **GOA** — explorational / experimental currency of the local stack (`exchange.hacktivism.ch`, `bank.hacktivism.ch`). GOA is **not** legal tender. It has **no guaranteed real-world value**, redemption, or convertibility.
|
||||||
|
- **CHF** — Swiss francs, a **real** currency. CHF amounts are real money settled via the CHF exchange configured on this host (taler-ops / TOPS infrastructure as deployed). Treat CHF with the seriousness of ordinary payments.
|
||||||
|
|
||||||
|
By creating a merchant instance, accepting payments, or otherwise using this service you acknowledge that:
|
||||||
|
|
||||||
|
- GOA is for exploration and testing only.
|
||||||
|
- CHF involves real money — only use funds you control and can afford to risk on a self-hosted experimental stack.
|
||||||
|
- There is no guaranteed availability, support, or uptime.
|
||||||
|
- Operators may reset GOA state, change configuration, delete instance data, or interrupt service without notice.
|
||||||
|
- Software is provided as-is, without warranty.
|
||||||
|
|
||||||
|
If you do not agree, do not use this merchant backend.
|
||||||
|
|
||||||
|
## Related
|
||||||
|
|
||||||
|
- Exchange (GOA): https://exchange.hacktivism.ch/terms
|
||||||
|
- Bank intro: https://bank.hacktivism.ch/intro/
|
||||||
|
- Merchant intro: https://taler.hacktivism.ch/intro/
|
||||||
|
'
|
||||||
|
|
||||||
|
BODY_TXT='No Formal Terms · Dual Currency Notice
|
||||||
|
|
||||||
|
This is a self-hosted GNU Taler merchant backend at taler.hacktivism.ch (hacktivism.ch).
|
||||||
|
|
||||||
|
No formal terms of service from Taler Operations AG (or any other third-party portal operator) apply to this instance. This short notice is the site policy for using the backend.
|
||||||
|
|
||||||
|
Dual currency
|
||||||
|
-------------
|
||||||
|
This backend is configured for two currencies at once:
|
||||||
|
|
||||||
|
- GOA — explorational / experimental currency of the local stack
|
||||||
|
(exchange.hacktivism.ch, bank.hacktivism.ch). GOA is not legal tender.
|
||||||
|
It has no guaranteed real-world value, redemption, or convertibility.
|
||||||
|
- CHF — Swiss francs, a real currency. CHF amounts are real money
|
||||||
|
settled via the CHF exchange configured on this host (taler-ops / TOPS
|
||||||
|
infrastructure as deployed). Treat CHF with the seriousness of
|
||||||
|
ordinary payments.
|
||||||
|
|
||||||
|
By creating a merchant instance, accepting payments, or otherwise using
|
||||||
|
this service you acknowledge that:
|
||||||
|
|
||||||
|
- GOA is for exploration and testing only.
|
||||||
|
- CHF involves real money — only use funds you control and can afford
|
||||||
|
to risk on a self-hosted experimental stack.
|
||||||
|
- There is no guaranteed availability, support, or uptime.
|
||||||
|
- Operators may reset GOA state, change configuration, delete instance
|
||||||
|
data, or interrupt service without notice.
|
||||||
|
- Software is provided as-is, without warranty.
|
||||||
|
|
||||||
|
If you do not agree, do not use this merchant backend.
|
||||||
|
|
||||||
|
Related
|
||||||
|
-------
|
||||||
|
- Exchange (GOA): https://exchange.hacktivism.ch/terms
|
||||||
|
- Bank intro: https://bank.hacktivism.ch/intro/
|
||||||
|
- Merchant intro: https://taler.hacktivism.ch/intro/
|
||||||
|
'
|
||||||
|
|
||||||
|
printf '%s\n' "$BODY_TXT" >"$LANG_DIR/${ETAG}.txt"
|
||||||
|
printf '%s\n' "$BODY_MD" >"$LANG_DIR/${ETAG}.md"
|
||||||
|
|
||||||
|
# HTML (browser-friendly; style close to exchange short terms)
|
||||||
|
cat >"$LANG_DIR/${ETAG}.html" <<HTML
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>${TITLE}</title>
|
||||||
|
<style>
|
||||||
|
:root { color-scheme: dark light; }
|
||||||
|
body {
|
||||||
|
font-family: system-ui, -apple-system, sans-serif;
|
||||||
|
max-width: 40rem; margin: 2rem auto; padding: 0 1.1rem 3rem;
|
||||||
|
line-height: 1.5; color: #e8e6e3; background: #1a1520;
|
||||||
|
}
|
||||||
|
h1 { font-size: 1.35rem; font-weight: 800; margin: 0 0 1rem; color: #f5f0ea; }
|
||||||
|
h2 { font-size: 1.05rem; margin: 1.4rem 0 0.5rem; color: #e8c878; }
|
||||||
|
p, li { font-size: 0.98rem; }
|
||||||
|
ul { padding-left: 1.2rem; }
|
||||||
|
code, a { color: #5eead4; }
|
||||||
|
a { text-decoration: none; }
|
||||||
|
a:hover { text-decoration: underline; }
|
||||||
|
.badge {
|
||||||
|
display: inline-block; font-size: 0.72rem; font-weight: 700;
|
||||||
|
letter-spacing: 0.06em; text-transform: uppercase;
|
||||||
|
color: #c4b5fd; border: 1px solid rgba(196,181,253,0.35);
|
||||||
|
border-radius: 999px; padding: 0.2rem 0.65rem; margin-bottom: 0.85rem;
|
||||||
|
}
|
||||||
|
.pair {
|
||||||
|
display: grid; gap: 0.65rem; margin: 0.85rem 0 1rem;
|
||||||
|
}
|
||||||
|
@media (min-width: 520px) { .pair { grid-template-columns: 1fr 1fr; } }
|
||||||
|
.cur {
|
||||||
|
border-radius: 12px; padding: 0.75rem 0.9rem;
|
||||||
|
border: 1px solid rgba(255,255,255,0.1); background: rgba(0,0,0,0.25);
|
||||||
|
}
|
||||||
|
.cur strong { display: block; font-size: 1.05rem; margin-bottom: 0.25rem; }
|
||||||
|
.cur.go a, .cur.go strong { color: #5eead4; }
|
||||||
|
.cur.chf strong { color: #e8c878; }
|
||||||
|
.muted { color: #a39e98; font-size: 0.88rem; }
|
||||||
|
footer { margin-top: 2rem; font-size: 0.85rem; color: #a39e98; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="badge">taler.hacktivism.ch · merchant</div>
|
||||||
|
<h1>${TITLE}</h1>
|
||||||
|
<p>This is a <strong>self-hosted GNU Taler merchant backend</strong> at
|
||||||
|
<code>taler.hacktivism.ch</code> (hacktivism.ch).</p>
|
||||||
|
<p><strong>No formal terms of service</strong> from Taler Operations AG
|
||||||
|
(or any other third-party portal operator) apply to this instance.
|
||||||
|
This short notice is the site policy for using the backend.</p>
|
||||||
|
|
||||||
|
<h2>Dual currency</h2>
|
||||||
|
<p>This backend is configured for <strong>two currencies at once</strong>:</p>
|
||||||
|
<div class="pair">
|
||||||
|
<div class="cur go">
|
||||||
|
<strong>GOA · explorational</strong>
|
||||||
|
Local stack currency
|
||||||
|
(<a href="https://exchange.hacktivism.ch/">exchange</a>,
|
||||||
|
<a href="https://bank.hacktivism.ch/intro/">bank</a>).
|
||||||
|
Not legal tender. No guaranteed real-world value, redemption, or convertibility.
|
||||||
|
</div>
|
||||||
|
<div class="cur chf">
|
||||||
|
<strong>CHF · real</strong>
|
||||||
|
Swiss francs. Real money, settled via the CHF exchange configured
|
||||||
|
on this host (taler-ops / TOPS infrastructure as deployed).
|
||||||
|
Treat CHF with the seriousness of ordinary payments.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>By using this service you acknowledge</h2>
|
||||||
|
<ul>
|
||||||
|
<li>GOA is for exploration and testing only.</li>
|
||||||
|
<li>CHF involves real money — only use funds you control and can afford to risk on a self-hosted experimental stack.</li>
|
||||||
|
<li>There is no guaranteed availability, support, or uptime.</li>
|
||||||
|
<li>Operators may reset GOA state, change configuration, delete instance data, or interrupt service without notice.</li>
|
||||||
|
<li>Software is provided as-is, without warranty.</li>
|
||||||
|
</ul>
|
||||||
|
<p>If you do not agree, do not use this merchant backend.</p>
|
||||||
|
|
||||||
|
<h2>Related</h2>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://exchange.hacktivism.ch/terms">Exchange terms (GOA)</a></li>
|
||||||
|
<li><a href="https://bank.hacktivism.ch/intro/">Bank intro</a></li>
|
||||||
|
<li><a href="https://taler.hacktivism.ch/intro/">Merchant intro</a></li>
|
||||||
|
<li><a href="https://taler.hacktivism.ch/privacy">Merchant privacy</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Privacy</h2>
|
||||||
|
<p class="muted">Processing under Swiss FADP (revDSG). What data is retained
|
||||||
|
(instances, orders, deposits, logs, …) is listed on
|
||||||
|
<a href="https://taler.hacktivism.ch/privacy">/privacy</a>.</p>
|
||||||
|
<footer class="muted">Version ${ETAG} · hacktivism.ch</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
HTML
|
||||||
|
|
||||||
|
# Optional PDF so Accept: */* / wallets preferring PDF still get content
|
||||||
|
PDF="$LANG_DIR/${ETAG}.pdf"
|
||||||
|
if command -v pandoc >/dev/null 2>&1; then
|
||||||
|
if pandoc -f markdown -t pdf -o "$PDF" "$LANG_DIR/${ETAG}.md" 2>/dev/null; then
|
||||||
|
echo "pdf via pandoc: $PDF"
|
||||||
|
elif command -v wkhtmltopdf >/dev/null 2>&1; then
|
||||||
|
wkhtmltopdf "$LANG_DIR/${ETAG}.html" "$PDF" 2>/dev/null && echo "pdf via wkhtmltopdf" || true
|
||||||
|
fi
|
||||||
|
elif command -v wkhtmltopdf >/dev/null 2>&1; then
|
||||||
|
wkhtmltopdf "$LANG_DIR/${ETAG}.html" "$PDF" 2>/dev/null && echo "pdf via wkhtmltopdf" || true
|
||||||
|
fi
|
||||||
|
# If no PDF toolchain: leave absent — httpd will serve md/html/txt by Accept
|
||||||
|
|
||||||
|
chmod -R a+rX "$TERMS_DIR"
|
||||||
|
if id taler-merchant-httpd >/dev/null 2>&1; then
|
||||||
|
chown -R taler-merchant-httpd: "$TERMS_DIR" 2>/dev/null \
|
||||||
|
|| chown -R taler-merchant-httpd:www-data "$TERMS_DIR" 2>/dev/null \
|
||||||
|
|| true
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Installed under $LANG_DIR:"
|
||||||
|
ls -la "$LANG_DIR"/${ETAG}.* 2>/dev/null || ls -la "$LANG_DIR"
|
||||||
|
echo
|
||||||
|
echo "Config should set:"
|
||||||
|
echo " [merchant]"
|
||||||
|
echo " TERMS_ETAG = ${ETAG}"
|
||||||
|
echo " TERMS_DIR = \${TALER_DATA_HOME}terms/"
|
||||||
|
echo "Then restart taler-merchant-httpd."
|
||||||
Loading…
Add table
Add a link
Reference in a new issue