2019-12-23 11:47:16 +01:00
|
|
|
#!/bin/sh
|
|
|
|
# This file is in the public domain
|
2023-01-11 13:35:40 +01:00
|
|
|
# Wrapper around libeufin to first configure the required
|
2019-12-23 11:47:16 +01:00
|
|
|
# testing accounts before launching the bank properly.
|
|
|
|
#
|
2023-01-11 13:35:40 +01:00
|
|
|
# Takes 4 arguments:
|
2022-08-06 13:25:54 +02:00
|
|
|
# $1: the Nexus port (Sandbox port prepends 1 to it)
|
2019-12-23 11:47:16 +01:00
|
|
|
# $2: the database name
|
2022-08-06 13:25:54 +02:00
|
|
|
# $3: exchange base URL (used to specify the default exchange)
|
|
|
|
# $4: config file (needs patch to specify exchange's PAYTO_URI)
|
2019-12-23 11:47:16 +01:00
|
|
|
|
|
|
|
set -eu
|
|
|
|
|
2023-01-11 13:38:10 +01:00
|
|
|
if [ "$1" -eq "--help" ];
|
2023-01-11 13:35:40 +01:00
|
|
|
then
|
|
|
|
echo "This is a tool to launch a libeufin based bank for testing."
|
|
|
|
echo "Call using: Nexus port number, SQLite file path, exchange base URL, config file path."
|
|
|
|
exit 0
|
|
|
|
fi
|
2022-08-06 13:25:54 +02:00
|
|
|
if [ "$#" -ne 4 ];
|
2020-02-04 22:37:49 +01:00
|
|
|
then
|
2022-08-06 13:25:54 +02:00
|
|
|
echo "illegal number of parameters. \
|
2022-08-06 13:56:26 +02:00
|
|
|
Give: Nexus port number, SQLite file path, exchange base URL, config file path."
|
2020-02-04 22:37:49 +01:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2022-08-06 13:25:54 +02:00
|
|
|
# Must not terminate jobs here, as they are needed
|
|
|
|
# by the script _importing_ this one. Those script
|
|
|
|
# will then manage the termination.
|
|
|
|
# trap cleanup EXIT
|
2019-12-23 11:47:16 +01:00
|
|
|
|
2022-08-06 13:25:54 +02:00
|
|
|
export LIBEUFIN_SANDBOX_DB_CONNECTION="jdbc:sqlite:$2"
|
|
|
|
# Create the default demobank.
|
|
|
|
libeufin-sandbox config --currency TESTKUDOS default
|
|
|
|
export LIBEUFIN_SANDBOX_ADMIN_PASSWORD=secret
|
|
|
|
libeufin-sandbox serve --port "1$1" \
|
|
|
|
> libeufin-sandbox-stdout.log \
|
|
|
|
2> libeufin-sandbox-stderr.log &
|
|
|
|
echo $! > libeufin-sandbox.pid
|
|
|
|
export LIBEUFIN_SANDBOX_URL="http://localhost:1$1/demobanks/default"
|
|
|
|
set +e
|
|
|
|
echo -n "Waiting for Sandbox.."
|
|
|
|
for n in `seq 1 50`; do
|
|
|
|
echo -n "."
|
2022-08-06 13:56:26 +02:00
|
|
|
sleep 1
|
2022-08-19 12:25:41 +02:00
|
|
|
if wget --timeout=1 \
|
2022-08-06 13:25:54 +02:00
|
|
|
--tries=3 --waitretry=0 \
|
|
|
|
-o /dev/null -O /dev/null \
|
2022-08-19 12:25:41 +02:00
|
|
|
$LIBEUFIN_SANDBOX_URL; then
|
|
|
|
break
|
|
|
|
fi
|
2022-08-06 13:25:54 +02:00
|
|
|
done
|
|
|
|
echo OK
|
2019-12-23 11:47:16 +01:00
|
|
|
|
2022-08-06 13:25:54 +02:00
|
|
|
register_sandbox_account() {
|
|
|
|
export LIBEUFIN_SANDBOX_USERNAME=$1
|
|
|
|
export LIBEUFIN_SANDBOX_PASSWORD=$2
|
|
|
|
libeufin-cli sandbox \
|
|
|
|
demobank \
|
|
|
|
register --name "$3"
|
|
|
|
unset LIBEUFIN_SANDBOX_USERNAME
|
|
|
|
unset LIBEUFIN_SANDBOX_PASSWORD
|
|
|
|
}
|
|
|
|
set -e
|
|
|
|
echo -n "Register the 'fortytwo' Sandbox user.."
|
|
|
|
register_sandbox_account fortytwo x "Forty Two"
|
|
|
|
echo OK
|
|
|
|
echo -n "Register the 'fortythree' Sandbox user.."
|
|
|
|
register_sandbox_account fortythree x "Forty Three"
|
|
|
|
echo OK
|
|
|
|
echo -n "Register 'exchange' Sandbox user.."
|
|
|
|
register_sandbox_account exchange x "Exchange Company"
|
|
|
|
echo OK
|
|
|
|
echo -n "Register 'tor' Sandbox user.."
|
|
|
|
register_sandbox_account tor x "Tor Project"
|
|
|
|
echo OK
|
|
|
|
echo -n "Register 'gnunet' Sandbox user.."
|
|
|
|
register_sandbox_account gnunet x "GNUnet"
|
|
|
|
echo OK
|
|
|
|
echo -n "Register 'tutorial' Sandbox user.."
|
|
|
|
register_sandbox_account tutorial x "Tutorial"
|
|
|
|
echo OK
|
|
|
|
echo -n "Register 'survey' Sandbox user.."
|
|
|
|
register_sandbox_account survey x "Survey"
|
|
|
|
echo OK
|
|
|
|
echo -n "Specify exchange's PAYTO_URI in the config ..."
|
|
|
|
export LIBEUFIN_SANDBOX_USERNAME=exchange
|
|
|
|
export LIBEUFIN_SANDBOX_PASSWORD=x
|
|
|
|
PAYTO=`libeufin-cli sandbox demobank info --bank-account exchange | jq --raw-output '.paytoUri'`
|
|
|
|
taler-config -c $4 -s exchange-account-1 -o PAYTO_URI -V $PAYTO
|
|
|
|
echo " OK"
|
|
|
|
echo -n "Setting this exchange as the bank's default ..."
|
|
|
|
EXCHANGE_PAYTO=`libeufin-cli sandbox demobank info --bank-account exchange | jq --raw-output '.paytoUri'`
|
|
|
|
libeufin-sandbox default-exchange "$3" "$EXCHANGE_PAYTO"
|
|
|
|
echo " OK"
|
|
|
|
# Prepare EBICS: create Ebics host and Exchange subscriber.
|
|
|
|
# Shortly becoming admin to setup Ebics.
|
|
|
|
export LIBEUFIN_SANDBOX_USERNAME=admin
|
|
|
|
export LIBEUFIN_SANDBOX_PASSWORD=secret
|
|
|
|
echo -n "Create EBICS host at Sandbox.."
|
|
|
|
libeufin-cli sandbox \
|
|
|
|
--sandbox-url http://localhost:1$1 \
|
|
|
|
ebicshost create --host-id talerebics
|
|
|
|
echo OK
|
|
|
|
echo -n "Create exchange EBICS subscriber at Sandbox.."
|
|
|
|
libeufin-cli sandbox \
|
|
|
|
demobank new-ebicssubscriber --host-id talerebics \
|
|
|
|
--user-id exchangeebics --partner-id talerpartner \
|
|
|
|
--bank-account exchange # that's a username _and_ a bank account name
|
|
|
|
echo OK
|
|
|
|
unset LIBEUFIN_SANDBOX_USERNAME
|
|
|
|
unset LIBEUFIN_SANDBOX_PASSWORD
|
|
|
|
# Prepare Nexus, which is the side actually talking
|
|
|
|
# to the exchange.
|
|
|
|
export LIBEUFIN_NEXUS_DB_CONNECTION="jdbc:sqlite:$2"
|
|
|
|
# For convenience, username and password are
|
|
|
|
# identical to those used at the Sandbox.
|
|
|
|
echo -n Create exchange Nexus user..
|
|
|
|
libeufin-nexus superuser exchange --password x
|
|
|
|
echo OK
|
|
|
|
libeufin-nexus serve --port $1 \
|
|
|
|
2> libeufin-nexus-stderr.log \
|
|
|
|
> libeufin-nexus-stdout.log &
|
|
|
|
echo $! > libeufin-nexus.pid
|
|
|
|
export LIBEUFIN_NEXUS_URL=http://localhost:$1
|
|
|
|
echo -n Waiting for Nexus..
|
|
|
|
set +e
|
|
|
|
for n in `seq 1 50`; do
|
|
|
|
echo -n "."
|
2022-08-06 13:56:26 +02:00
|
|
|
sleep 1
|
2022-08-19 12:25:41 +02:00
|
|
|
if wget --timeout=1 \
|
2022-08-06 13:25:54 +02:00
|
|
|
--tries=3 --waitretry=0 \
|
|
|
|
-o /dev/null -O /dev/null \
|
2022-08-19 12:25:41 +02:00
|
|
|
$LIBEUFIN_NEXUS_URL; then
|
|
|
|
break
|
|
|
|
fi
|
2022-08-06 13:25:54 +02:00
|
|
|
done
|
|
|
|
set -e
|
|
|
|
echo OK
|
|
|
|
export LIBEUFIN_NEXUS_USERNAME=exchange
|
|
|
|
export LIBEUFIN_NEXUS_PASSWORD=x
|
|
|
|
echo -n Creating a EBICS connection at Nexus..
|
|
|
|
libeufin-cli connections new-ebics-connection \
|
|
|
|
--ebics-url "http://localhost:1$1/ebicsweb" \
|
|
|
|
--host-id talerebics \
|
|
|
|
--partner-id talerpartner \
|
|
|
|
--ebics-user-id exchangeebics \
|
|
|
|
talerconn
|
|
|
|
echo OK
|
|
|
|
echo -n Setup EBICS keying..
|
|
|
|
libeufin-cli connections connect talerconn > /dev/null
|
|
|
|
echo OK
|
|
|
|
echo -n Download bank account name from Sandbox..
|
|
|
|
libeufin-cli connections download-bank-accounts talerconn
|
|
|
|
echo OK
|
|
|
|
echo -n Importing bank account info into Nexus..
|
|
|
|
libeufin-cli connections import-bank-account \
|
|
|
|
--offered-account-id exchange \
|
|
|
|
--nexus-bank-account-id exchange-nexus \
|
|
|
|
talerconn
|
|
|
|
echo OK
|
|
|
|
echo -n Setup payments submission task..
|
|
|
|
# Tries every second.
|
|
|
|
libeufin-cli accounts task-schedule \
|
|
|
|
--task-type submit \
|
|
|
|
--task-name exchange-payments \
|
|
|
|
--task-cronspec "* * *" \
|
|
|
|
exchange-nexus
|
|
|
|
echo OK
|
|
|
|
# Tries every second. Ask C52
|
|
|
|
echo -n Setup history fetch task..
|
|
|
|
libeufin-cli accounts task-schedule \
|
|
|
|
--task-type fetch \
|
|
|
|
--task-name exchange-history \
|
|
|
|
--task-cronspec "* * *" \
|
|
|
|
--task-param-level report \
|
|
|
|
--task-param-range-type latest \
|
|
|
|
exchange-nexus
|
|
|
|
echo OK
|
|
|
|
# TBD: create Taler facade.
|
|
|
|
echo -n Create the Taler facade at Nexus..
|
|
|
|
libeufin-cli facades \
|
|
|
|
new-taler-wire-gateway-facade \
|
|
|
|
--currency TESTKUDOS --facade-name test-facade \
|
|
|
|
talerconn exchange-nexus
|
|
|
|
echo OK
|
|
|
|
# Facade schema: http://localhost:$1/facades/test-facade/taler-wire-gateway/
|