263 lines
9.2 KiB
Bash
Executable file
263 lines
9.2 KiB
Bash
Executable file
#!/bin/bash
|
|
# Install "No Terms Required" ToS + privacy for the exchange (styled like merchant terms).
|
|
# Run as root inside the exchange container.
|
|
set -euo pipefail
|
|
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin${PATH:+:$PATH}"
|
|
|
|
CONF="${TALER_EXCHANGE_CONFIG:-/etc/taler-exchange/taler-exchange.conf}"
|
|
DATA_HOME=$(taler-exchange-config -c "$CONF" -f -s PATHS -o TALER_DATA_HOME 2>/dev/null || true)
|
|
DATA_HOME="${DATA_HOME:-/var/lib/taler-exchange/}"
|
|
TERMS_DIR="${DATA_HOME%/}/terms"
|
|
LANG_DIR="$TERMS_DIR/en"
|
|
mkdir -p "$LANG_DIR"
|
|
|
|
# Bump when HTML/style changes (long Cache-Control on /terms).
|
|
TOS_ETAG="${TERMS_ETAG:-no-terms-v2}"
|
|
# Prefer Swiss FADP privacy install (install_swiss_privacy.sh); fallback etag here
|
|
PP_ETAG="${PRIVACY_ETAG:-exchange-pp-swiss-v0}"
|
|
|
|
# Shared palette with merchant-tos-dual / bank terms pages
|
|
COMMON_CSS='
|
|
: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;
|
|
}
|
|
.cur {
|
|
border-radius: 12px; padding: 0.75rem 0.9rem; margin: 0.85rem 0 1rem;
|
|
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; color: #5eead4; }
|
|
.muted { color: #a39e98; font-size: 0.88rem; }
|
|
footer { margin-top: 2rem; font-size: 0.85rem; color: #a39e98; }
|
|
'
|
|
|
|
write_tos() {
|
|
local base="$1"
|
|
local title="No Terms Required"
|
|
local body_txt body_md
|
|
|
|
body_txt='No Terms Required.
|
|
|
|
This is an experimental / exploration GNU Taler exchange for the currency GOA (hacktivism.ch).
|
|
|
|
No formal terms of service are required to use this service.
|
|
|
|
By withdrawing or using GOA coins you acknowledge that:
|
|
- This service is for exploration and testing only.
|
|
- GOA is not legal tender and has no guaranteed real-world value or redemption.
|
|
- There is no guaranteed availability, support, or uptime.
|
|
- Operators may reset balances or change configuration without notice.
|
|
- Do not use real money you cannot afford to lose.
|
|
|
|
If you do not agree, do not use this exchange.
|
|
|
|
Related:
|
|
- Bank: https://bank.hacktivism.ch/intro/
|
|
- Merchant terms: https://taler.hacktivism.ch/terms
|
|
- Bank terms: https://bank.hacktivism.ch/terms
|
|
|
|
Privacy:
|
|
Processing under Swiss FADP (revDSG). What data is retained is listed at
|
|
https://exchange.hacktivism.ch/privacy
|
|
'
|
|
|
|
body_md='# No Terms Required
|
|
|
|
This is an **experimental / exploration** GNU Taler exchange for the currency **GOA** (hacktivism.ch).
|
|
|
|
**No formal terms of service** are required to use this service.
|
|
|
|
By withdrawing or using GOA coins you acknowledge that:
|
|
|
|
- This service is for exploration and testing only.
|
|
- GOA is not legal tender and has no guaranteed real-world value or redemption.
|
|
- There is no guaranteed availability, support, or uptime.
|
|
- Operators may reset balances or change configuration without notice.
|
|
- Do not use real money you cannot afford to lose.
|
|
|
|
If you do not agree, do not use this exchange.
|
|
|
|
## Related
|
|
|
|
- [Bank intro](https://bank.hacktivism.ch/intro/)
|
|
- [Bank terms](https://bank.hacktivism.ch/terms)
|
|
- [Merchant terms](https://taler.hacktivism.ch/terms)
|
|
- [Exchange privacy](https://exchange.hacktivism.ch/privacy)
|
|
|
|
## Privacy
|
|
|
|
Processing under Swiss FADP (revDSG). What data is retained is listed on
|
|
[exchange.hacktivism.ch/privacy](https://exchange.hacktivism.ch/privacy).
|
|
'
|
|
|
|
printf '%s\n' "$body_txt" >"$LANG_DIR/${base}.txt"
|
|
printf '%s\n' "$body_md" >"$LANG_DIR/${base}.md"
|
|
cat >"$LANG_DIR/${base}.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>
|
|
${COMMON_CSS}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="badge">exchange.hacktivism.ch · GOA</div>
|
|
<h1>${title}</h1>
|
|
<p>This is an <strong>experimental / exploration</strong> GNU Taler exchange for the
|
|
currency <strong>GOA</strong> at <code>exchange.hacktivism.ch</code> (hacktivism.ch).</p>
|
|
<p><strong>No formal terms of service</strong> are required to use this service.</p>
|
|
|
|
<div class="cur">
|
|
<strong>GOA · explorational</strong>
|
|
Not legal tender. No guaranteed real-world value, redemption, or convertibility.
|
|
Issued only for exploration and testing on this stack.
|
|
</div>
|
|
|
|
<h2>By withdrawing or using GOA coins you acknowledge</h2>
|
|
<ul>
|
|
<li>This service is for exploration and testing only.</li>
|
|
<li>There is no guaranteed availability, support, or uptime.</li>
|
|
<li>Operators may reset balances or change configuration without notice.</li>
|
|
<li>Do not use real money you cannot afford to lose.</li>
|
|
<li>Software is provided as-is, without warranty.</li>
|
|
</ul>
|
|
<p>If you do not agree, do not use this exchange.</p>
|
|
|
|
<h2>Related</h2>
|
|
<ul>
|
|
<li><a href="https://bank.hacktivism.ch/intro/">Bank intro</a></li>
|
|
<li><a href="https://bank.hacktivism.ch/terms">Bank terms</a></li>
|
|
<li><a href="https://taler.hacktivism.ch/terms">Merchant terms</a></li>
|
|
<li><a href="https://exchange.hacktivism.ch/intro/">Exchange intro</a></li>
|
|
<li><a href="https://exchange.hacktivism.ch/privacy">Exchange privacy</a></li>
|
|
</ul>
|
|
|
|
<h2>Privacy</h2>
|
|
<p class="muted">Processing under Swiss FADP (revDSG). What data is retained
|
|
(reserves, wire-in, coins, logs, …) is listed on
|
|
<a href="https://exchange.hacktivism.ch/privacy">/privacy</a>.</p>
|
|
<footer class="muted">Version ${base} · hacktivism.ch</footer>
|
|
</body>
|
|
</html>
|
|
HTML
|
|
}
|
|
|
|
write_pp() {
|
|
# Legacy short PP only if not using install_swiss_privacy.sh etag
|
|
local base="$1"
|
|
local title="Privacy notice · GOA Exchange"
|
|
local body_txt body_md
|
|
|
|
body_txt='No Privacy Policy Required.
|
|
|
|
This is an experimental / exploration GNU Taler exchange for GOA.
|
|
|
|
No formal privacy policy is required for this demo service.
|
|
|
|
High-level notes:
|
|
- Wire transfers via the regional bank may identify bank account holders.
|
|
- The exchange processes withdrawals, deposits, and related protocol operations.
|
|
- Logs may be kept for operation and debugging.
|
|
|
|
Do not use this service if that is unacceptable.
|
|
|
|
Related:
|
|
- Exchange terms: https://exchange.hacktivism.ch/terms
|
|
'
|
|
|
|
body_md='# No Privacy Policy Required
|
|
|
|
This is an **experimental / exploration** GNU Taler exchange for **GOA**.
|
|
|
|
**No formal privacy policy** is required for this demo service.
|
|
|
|
## High-level notes
|
|
|
|
- Wire transfers via the regional bank may identify bank account holders.
|
|
- The exchange processes withdrawals, deposits, and related protocol operations.
|
|
- Logs may be kept for operation and debugging.
|
|
|
|
Do not use this service if that is unacceptable.
|
|
|
|
## Related
|
|
|
|
- [Exchange terms](https://exchange.hacktivism.ch/terms)
|
|
'
|
|
|
|
printf '%s\n' "$body_txt" >"$LANG_DIR/${base}.txt"
|
|
printf '%s\n' "$body_md" >"$LANG_DIR/${base}.md"
|
|
cat >"$LANG_DIR/${base}.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>
|
|
${COMMON_CSS}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="badge">exchange.hacktivism.ch · privacy</div>
|
|
<h1>${title}</h1>
|
|
<p>This is an <strong>experimental / exploration</strong> GNU Taler exchange for
|
|
<strong>GOA</strong> at <code>exchange.hacktivism.ch</code>.</p>
|
|
<p><strong>No formal privacy policy</strong> is required for this demo service.</p>
|
|
|
|
<h2>High-level notes</h2>
|
|
<ul>
|
|
<li>Wire transfers via the regional bank may identify bank account holders.</li>
|
|
<li>The exchange processes withdrawals, deposits, and related protocol operations.</li>
|
|
<li>Logs may be kept for operation and debugging.</li>
|
|
</ul>
|
|
<p>Do not use this service if that is unacceptable.</p>
|
|
|
|
<h2>Related</h2>
|
|
<ul>
|
|
<li><a href="https://exchange.hacktivism.ch/terms">Exchange terms</a></li>
|
|
<li><a href="https://bank.hacktivism.ch/terms">Bank terms</a></li>
|
|
<li><a href="https://taler.hacktivism.ch/terms">Merchant terms</a></li>
|
|
</ul>
|
|
<footer class="muted">Version ${base}</footer>
|
|
</body>
|
|
</html>
|
|
HTML
|
|
}
|
|
|
|
write_tos "$TOS_ETAG"
|
|
# Prefer Swiss FADP privacy installer when present (precise retention tables)
|
|
if [ -x /usr/local/bin/install_swiss_privacy.sh ]; then
|
|
PRIVACY_ETAG="$PP_ETAG" /usr/local/bin/install_swiss_privacy.sh
|
|
else
|
|
write_pp "$PP_ETAG"
|
|
fi
|
|
|
|
chmod -R a+rX "$TERMS_DIR"
|
|
if id taler-exchange-httpd >/dev/null 2>&1; then
|
|
chown -R taler-exchange-httpd: "$TERMS_DIR" 2>/dev/null || true
|
|
fi
|
|
|
|
echo "Installed under $LANG_DIR:"
|
|
ls -la "$LANG_DIR"/${TOS_ETAG}.* "$LANG_DIR"/${PP_ETAG}.* 2>/dev/null || ls -la "$LANG_DIR"
|
|
echo "Config should set:"
|
|
echo " TERMS_ETAG = ${TOS_ETAG}"
|
|
echo " PRIVACY_ETAG = ${PP_ETAG}"
|
|
echo " TERMS_DIR / PRIVACY_DIR = \${TALER_DATA_HOME}terms/"
|