sandcastle-ng

Scripts for the deployment of Sandcastle (GNU Taler)
Log | Files | Refs | README

commit bbffcde06e55c4ecc98cea726188b58befa3615c
parent 41afbc0f75cedf3c8fd3fb8727c1f9f502d1316e
Author: Florian Dold <florian@dold.me>
Date:   Fri, 23 Aug 2024 16:43:05 +0200

challenger integration WIP

Diffstat:
MDockerfile | 22++++++++++++++++++++++
Abuildconfig/challenger.tag | 1+
Adata/sandcastle-challenger-auth | 5+++++
Mprint-latest-versions | 1+
Msandcastle-run | 3+++
Mscripts/demo/setup-sandcastle.sh | 38++++++++++++++++++++++++++++++++++++++
6 files changed, 70 insertions(+), 0 deletions(-)

diff --git a/Dockerfile b/Dockerfile @@ -129,6 +129,27 @@ RUN rm -rf /build RUN apt-get install --no-install-recommends -y /packages/merchant/*.deb WORKDIR / +# Challenger +FROM exchange as challenger + +COPY buildconfig/challenger.* /buildconfig/ +WORKDIR /build +RUN TAG=$(cat /buildconfig/challenger.tag) && \ + git clone git://git.taler.net/challenger \ + --branch $TAG && \ + cd challenger && git checkout $(cat /buildconfig/challenger.checkout) +WORKDIR /build/challenger +RUN ./bootstrap && \ + ./configure --prefix=/usr \ + --disable-doc +RUN dpkg-buildpackage -rfakeroot -b -uc -us +WORKDIR / +RUN mkdir -p /packages/challenger +RUN mv /build/*.deb /packages/challenger +RUN rm -rf /build +RUN apt-get install --no-install-recommends -y /packages/challenger/*.deb +WORKDIR / + # Libeufin FROM base-system as libeufin @@ -242,6 +263,7 @@ COPY --from=merchant /packages/merchant/* /packages/ COPY --from=wallet /packages/wallet/* /packages/ COPY --from=libeufin /packages/libeufin/* /packages/ COPY --from=merchant-demos /packages/merchant-demos/* /packages/ +COPY --from=challenger /packages/challenger/* /packages/ RUN apt-get install --no-install-recommends -y /packages/*.deb COPY systemd/setup-sandcastle.service /etc/systemd/system/ RUN systemctl enable setup-sandcastle.service diff --git a/buildconfig/challenger.tag b/buildconfig/challenger.tag @@ -0,0 +1 @@ +v0.12.1-dev.9 diff --git a/data/sandcastle-challenger-auth b/data/sandcastle-challenger-auth @@ -0,0 +1,5 @@ +#!/usr/bin/bash + +mkdir -p /tmp/challenges/ + +exec cat >/tmp/challenges/$1 diff --git a/print-latest-versions b/print-latest-versions @@ -19,3 +19,4 @@ getver libeufin git://git.taler.net/libeufin getver wallet git://git.taler.net/wallet-core getver gnunet git://git.gnunet.org/gnunet getver sync git://git.taler.net/sync +getver challenger git://git.taler.net/challenger diff --git a/sandcastle-run b/sandcastle-run @@ -20,6 +20,8 @@ PORT_INTERNAL_LANDING=8501 PORT_INTERNAL_BLOG=8502 PORT_INTERNAL_DONATIONS=8503 PORT_INTERNAL_BANK_SPA=8505 +PORT_INTERNAL_CHALLENGER=8506 +PORT_INTERNAL_AUDITOR=8507 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) cd $SCRIPT_DIR @@ -60,6 +62,7 @@ exec podman run \ -v talerdata:/talerdata:Z \ -v talerdata_persistent:/talerdata_persistent:Z \ $OVERRIDES \ + -v $PWD/data:/data:Z \ -v $PWD/scripts:/scripts:Z \ -v $PWD/scripts/$SETUP_NAME:/provision:Z \ --entrypoint /sbin/init \ diff --git a/scripts/demo/setup-sandcastle.sh b/scripts/demo/setup-sandcastle.sh @@ -46,6 +46,7 @@ EXCHANGE_DOMAIN=exchange.$MYDOMAIN MERCHANT_DOMAIN=backend.$MYDOMAIN BLOG_DOMAIN=shop.$MYDOMAIN DONATIONS_DOMAIN=donations.$MYDOMAIN +CHALLENGER_DOMAIN=challenger.$MYDOMAIN # Ports of the services running inside the container. # Should be synchronized with the sandcastle-run script. @@ -56,6 +57,8 @@ PORT_INTERNAL_LANDING=8501 PORT_INTERNAL_BLOG=8502 PORT_INTERNAL_DONATIONS=8503 PORT_INTERNAL_BANK_SPA=8505 +PORT_INTERNAL_CHALLENGER=8506 +PORT_INTERNAL_AUDITOR=8507 # Just make sure the services are stopped systemctl stop taler-exchange.target @@ -121,6 +124,7 @@ function persist_exchange_key() { lift_dir /var/lib/taler var-lib-taler lift_dir /etc/taler etc-taler lift_dir /etc/libeufin etc-libeufin +lift_dir /etc/taler etc-challenger lift_dir /var/lib/postgresql var-lib-postgresql persist_exchange_key /var/lib/taler/exchange-offline exchange-offline @@ -134,6 +138,11 @@ persist_exchange_key /var/lib/taler/exchange-offline exchange-offline systemctl stop caddy.service cat <<EOF > /etc/caddy/Caddyfile + +# Internally reverse-proxy https://, +# so that service can talk to each other via +# https:// inside the container. + https://$BANK_DOMAIN { tls internal reverse_proxy :8080 { @@ -153,6 +162,11 @@ https://$MERCHANT_DOMAIN { reverse_proxy unix//run/taler/merchant-httpd/merchant-http.sock } +https://$CHALLENGER_DOMAIN { + tls internal + reverse_proxy unix//run/challenger/httpd/challenger.http +} + # Services that only listen on unix domain sockets # are reverse-proxied to serve on a TCP port. @@ -172,6 +186,13 @@ https://$MERCHANT_DOMAIN { root /settings.json /etc/libeufin/ file_server } + +:$PORT_INTERNAL_CHALLENGER { + reverse_proxy unix//run/challenger/httpd/challenger.http { + # Set this, or otherwise wrong taler://pay URIs will be generated. + header_up X-Forwarded-Proto "https" + } +} EOF cat <<EOF >> /etc/hosts @@ -182,6 +203,7 @@ cat <<EOF >> /etc/hosts 127.0.0.1 $MERCHANT_DOMAIN 127.0.0.1 $BLOG_DOMAIN 127.0.0.1 $DONATIONS_DOMAIN +127.0.0.1 $CHALLENGER_DOMAIN # End of Taler Sandcastle Domains EOF @@ -192,6 +214,22 @@ caddy trust systemctl start postgresql.service +# Set up challenger + +challenger-dbconfig + +CHALL_CLIENT_ID=$(sudo -u challenger-httpd challenger-admin -q --add=sandbox https://$EXCHANGE_DOMAIN/kyc-proof/mychallenger) +echo Challenger client ID: $CHALL_CLIENT_ID + +mkdir -p /etc/challenger/conf.d +cat <<EOF >/etc/challenger/conf.d/setup-sandcastle.conf +[challenger] +ADDRESS_TYPE = email +AUTH_COMMAND = /data/sandcastle-challenger-auth +EOF + +systemctl enable --now challenger-httpd.service + # Set up bank cat <<EOF >/etc/libeufin/libeufin-bank.conf