From 7f769aaf8f1910d6730e6e7cde1aa9e5c6161f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hern=C3=A2ni=20Marques?= Date: Mon, 13 Jul 2026 11:03:47 +0200 Subject: [PATCH] configs/paivana: add Containerfile and compose on :9025 --- configs/paivana/Containerfile | 55 +++++++++++++++++++++ configs/paivana/README.md | 13 +++++ configs/paivana/compose.yml | 42 ++++++++++++++++ configs/paivana/conf/paivana.conf.template | 18 +++++++ configs/paivana/entrypoint.sh | 29 +++++++++++ configs/paivana/taler-systems.gpg | Bin 0 -> 1756 bytes configs/paivana/upstream/index.html | 8 +++ configs/paivana/upstream/robots.txt | 2 + 8 files changed, 167 insertions(+) create mode 100644 configs/paivana/Containerfile create mode 100644 configs/paivana/README.md create mode 100644 configs/paivana/compose.yml create mode 100644 configs/paivana/conf/paivana.conf.template create mode 100755 configs/paivana/entrypoint.sh create mode 100644 configs/paivana/taler-systems.gpg create mode 100644 configs/paivana/upstream/index.html create mode 100644 configs/paivana/upstream/robots.txt diff --git a/configs/paivana/Containerfile b/configs/paivana/Containerfile new file mode 100644 index 0000000..20ba0bb --- /dev/null +++ b/configs/paivana/Containerfile @@ -0,0 +1,55 @@ +# Build paivana-httpd from source against Taler libs (deb.taler.net) +FROM docker.io/library/debian:trixie AS build +ENV DEBIAN_FRONTEND=noninteractive +RUN mkdir -p /etc/apt/keyrings +COPY taler-systems.gpg /etc/apt/keyrings/taler-systems.gpg +RUN apt-get update -yqq \ + && apt-get install -yqq --no-install-recommends \ + ca-certificates curl gnupg git \ + meson ninja-build pkg-config gcc g++ make \ + zlib1g-dev libmicrohttpd-dev libcurl4-gnutls-dev \ + libjansson-dev libgcrypt20-dev libpq-dev \ + python3 python3-jinja2 \ + && printf "%s\n" "deb [signed-by=/etc/apt/keyrings/taler-systems.gpg] https://deb.taler.net/apt/debian trixie main" \ + > /etc/apt/sources.list.d/taler.list \ + && apt-get update -yqq \ + && apt-get install -yqq --no-install-recommends \ + libgnunet-dev libtalerexchange-dev libtalermerchant-dev \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /src +RUN git clone --depth 1 https://git.taler.net/paivana.git . \ + && if [ -x ./bootstrap ]; then ./bootstrap; fi \ + && if [ -x ./configure ]; then \ + ./configure --prefix=/usr/local && make -j"$(nproc)" && make install; \ + else \ + meson setup build --prefix=/usr/local && meson compile -C build && meson install -C build; \ + fi + +FROM docker.io/library/debian:trixie-slim +ENV DEBIAN_FRONTEND=noninteractive +RUN mkdir -p /etc/apt/keyrings +COPY taler-systems.gpg /etc/apt/keyrings/taler-systems.gpg +RUN apt-get update -yqq \ + && apt-get install -yqq --no-install-recommends ca-certificates curl \ + && printf "%s\n" "deb [signed-by=/etc/apt/keyrings/taler-systems.gpg] https://deb.taler.net/apt/debian trixie main" \ + > /etc/apt/sources.list.d/taler.list \ + && apt-get update -yqq \ + && apt-get install -yqq --no-install-recommends \ + libtalerexchange libtalermerchant libgnunet \ + libmicrohttpd12t64 libcurl3t64-gnutls libjansson4 libgcrypt20 zlib1g libpq5 \ + && rm -rf /var/lib/apt/lists/* \ + && useradd --system --home /var/lib/paivana --shell /usr/sbin/nologin paivana-httpd \ + && mkdir -p /etc/paivana /var/lib/paivana \ + && chown -R paivana-httpd:paivana-httpd /var/lib/paivana /etc/paivana + +COPY --from=build /usr/local/ /usr/local/ +RUN ldconfig || true +COPY entrypoint.sh /usr/local/bin/paivana-entrypoint +COPY conf/paivana.conf.template /etc/paivana/paivana.conf.template +RUN chmod 755 /usr/local/bin/paivana-entrypoint \ + && chown paivana-httpd:paivana-httpd /etc/paivana/paivana.conf.template + +USER paivana-httpd +EXPOSE 9967 +ENTRYPOINT ["/usr/local/bin/paivana-entrypoint"] diff --git a/configs/paivana/README.md b/configs/paivana/README.md new file mode 100644 index 0000000..4bc39cd --- /dev/null +++ b/configs/paivana/README.md @@ -0,0 +1,13 @@ +# paivana — `paivana.hacktivism.ch` + +GNU Taler **paivana-httpd** reverse-proxy paywall, GOA payments. + +| Item | Value | +|------|--------| +| Live | `/home/hernani/koopa-paivana/` | +| Containers | `koopa-paivana`, `koopa-paivana-upstream` | +| Host port | **9025** | +| Currency | **GOA** | +| Merchant | `https://taler.hacktivism.ch/instances/goa-shop/` | + +Build: `Containerfile` from `git.taler.net/paivana` + deb.taler.net libs. diff --git a/configs/paivana/compose.yml b/configs/paivana/compose.yml new file mode 100644 index 0000000..016d633 --- /dev/null +++ b/configs/paivana/compose.yml @@ -0,0 +1,42 @@ +# koopa-paivana — host :9025 → Caddy paivana.hacktivism.ch +# Live: /home/hernani/koopa-paivana/ +services: + paivana: + build: + context: . + dockerfile: Containerfile + image: localhost/koopa-paivana:latest + container_name: koopa-paivana + restart: unless-stopped + ports: + - "9025:9967" + extra_hosts: + - "taler.hacktivism.ch:host-gateway" + - "bank.hacktivism.ch:host-gateway" + - "exchange.hacktivism.ch:host-gateway" + volumes: + - ./conf/paivana.conf.template:/etc/paivana/paivana.conf.template:ro + - ./entrypoint.sh:/usr/local/bin/paivana-entrypoint:ro + - ./secrets/merchant-access-token:/run/secrets/merchant-access-token:ro + - ./secrets/paivana-secret:/run/secrets/paivana-secret:ro + depends_on: + - upstream + labels: + org.hacktivism.service: paivana + org.hacktivism.host_port: "9025" + org.hacktivism.site: paivana.hacktivism.ch + org.hacktivism.managed_by: koopa-admin + org.hacktivism.currency: GOA + + upstream: + image: docker.io/library/nginx:1.27-alpine + container_name: koopa-paivana-upstream + restart: unless-stopped + volumes: + - ./upstream:/usr/share/nginx/html:ro + expose: + - "80" + command: ["nginx", "-g", "daemon off;"] + labels: + org.hacktivism.service: paivana-upstream + org.hacktivism.managed_by: koopa-admin diff --git a/configs/paivana/conf/paivana.conf.template b/configs/paivana/conf/paivana.conf.template new file mode 100644 index 0000000..abad54b --- /dev/null +++ b/configs/paivana/conf/paivana.conf.template @@ -0,0 +1,18 @@ +# paivana.hacktivism.ch — paywall reverse proxy +# Secrets injected by entrypoint from /run/secrets/ + +[paivana] +SERVE = tcp +PORT = 9967 +BIND_TO = 0.0.0.0 + +BASE_URL = https://paivana.hacktivism.ch/ + +DESTINATION_BASE_URL = http://upstream:80/ + +MERCHANT_BACKEND_URL = https://taler.hacktivism.ch/instances/goa-shop/ +MERCHANT_ACCESS_TOKEN = @MERCHANT_ACCESS_TOKEN@ + +SECRET = @PAIVANA_SECRET@ + +WHITELIST = ^/(favicon\.ico|robots\.txt)$ diff --git a/configs/paivana/entrypoint.sh b/configs/paivana/entrypoint.sh new file mode 100755 index 0000000..e751b47 --- /dev/null +++ b/configs/paivana/entrypoint.sh @@ -0,0 +1,29 @@ +#!/bin/sh +set -eu +TOKEN_FILE="${MERCHANT_TOKEN_FILE:-/run/secrets/merchant-access-token}" +SECRET_FILE="${PAIVANA_SECRET_FILE:-/run/secrets/paivana-secret}" +TEMPLATE="${PAIVANA_CONF_TEMPLATE:-/etc/paivana/paivana.conf.template}" +OUT="${PAIVANA_CONF:-/tmp/paivana.conf}" + +if [ ! -r "$TOKEN_FILE" ]; then + echo "missing merchant token: $TOKEN_FILE" >&2 + exit 1 +fi +if [ ! -r "$SECRET_FILE" ]; then + echo "missing paivana secret: $SECRET_FILE" >&2 + exit 1 +fi + +TOKEN=$(tr -d '\n\r' < "$TOKEN_FILE") +SECRET=$(tr -d '\n\r' < "$SECRET_FILE") + +awk -v t="$TOKEN" -v s="$SECRET" ' +{ + gsub(/@MERCHANT_ACCESS_TOKEN@/, t) + gsub(/@PAIVANA_SECRET@/, s) + print +} +' "$TEMPLATE" > "$OUT" +chmod 600 "$OUT" + +exec paivana-httpd -c "$OUT" -g -f -L INFO diff --git a/configs/paivana/taler-systems.gpg b/configs/paivana/taler-systems.gpg new file mode 100644 index 0000000000000000000000000000000000000000..b53bff4d58b269d0c4a5469a19790f4066ae9a5a GIT binary patch literal 1756 zcmV<21|#{I0gVJ-?jDc<3;@1-8OjHmAz046OAhL73Y#$MyG`bNUmjxhxySgyps>?fX~g=kn4C+&OkbTnS;+sBcDtoJP6&zFQR9@hnCQ1e z01l;jeMv;Yv1cC^(@WS{rBO%XNy@K0A`Cfj{-d}IBRs=lyavyShs8yDS4vC!8;ZAr)E(1B(-mTbY6Z6t@=%qP48faIhN0HhtL4WV#oUQ;Xo%2W#{|pv z_rCG(Xqv=2GI7om58dK9PA;C{Ff_=ko9e=DyaE3bZgp zd2@7SZF3+~K_EP1Z*Fv9V{|}tVQgh`E^cLXK8XR;1QP)Y06qd60|g5S2nPZN6$%Lm z3jzcd0s{d89svRufEFPH0EC%5ENtIL8hw8KCgnz@{(b^x1p;S*p;!e88efIT0162Z zCgnz@{(b^xsrd{12$(W6;?3F%Q_3gMYAq6XaO(?}L(>kLEdS-UjRXRMYWJef2Y zrHaB>^mOi6NYI2lYRRhlorqFuxl^}qdU_B9f#h(B(6;+AR5C+5G_RV#XVlFS%innD z4VRgkw9P-W8}hY!lC5I((P%U^Hi$(6WU%G=kMLQ_bwJ|$A0}|B52P9nIMOzA%&Vr_kq~yAFnMs1eJc3{%~`EXF)IuB0)aRu>RtbjDF}Sw2MLq z71AS;y95~199L}}ISk?GNu6Wv+k;%N{}5$x79W?3{Xnq6&%96I!DQxOkVeN5 zL;kgF0h~T#K$QVmzVT#TNIfXzKUr0fqTf9xnIM$IFgl>yr0%>E{)REASOBteG3dg- zh8;Wki!zy@py6Zuw0G?j`d1?bG4if*Q7zG{R`1IoZ$w+=20aNQh1-&^@)N<+!t$P% zn`4Rj9`Itnqx-P{5di=Ji2=L>7y$|ZCITA_79j)xgqb`nY~M#3eSZBWbp*rk1 zM8!vnjfgscFI)n&$GK;pz?uOLUlAd6jOxg8V+d;tM$shp^JKUVHD}A|1L``^HB_au zz0SKiC{(eK9vm(NGRLCOfwMb0fcleT%RQg5J}n1i zCGEe+RU6P`M;}3%6)7FO*X1Zd---D{XD$^Q?gGS)I>56;YvqXmr#RxhagY7UV=aCd z0^G|o^41W*Kemt15)#N95PcLumvA%|8|3muk$Ka*FpQpI=9e5ida>qL#3j;v7dj%f z(R#m;cdzz7^u7Ac-uCRa`G^M; ylq_U!R=g2Whib*o)1{!-!61GRi<*(bc&jUJUAWJF(a$OrGmyda*C)!$i4Z$SB1HB8 literal 0 HcmV?d00001 diff --git a/configs/paivana/upstream/index.html b/configs/paivana/upstream/index.html new file mode 100644 index 0000000..c27ede4 --- /dev/null +++ b/configs/paivana/upstream/index.html @@ -0,0 +1,8 @@ + + +Protected — paivana.hacktivism.ch + +

Payment verified

+

Demo upstream behind Paivana (GOA). Site: https://paivana.hacktivism.ch/

+ + diff --git a/configs/paivana/upstream/robots.txt b/configs/paivana/upstream/robots.txt new file mode 100644 index 0000000..1f53798 --- /dev/null +++ b/configs/paivana/upstream/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: /