diff options
Diffstat (limited to 'docker/hybrid/images/libeufin/startup.sh')
-rw-r--r-- | docker/hybrid/images/libeufin/startup.sh | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/docker/hybrid/images/libeufin/startup.sh b/docker/hybrid/images/libeufin/startup.sh index 129e404..07bb4ee 100644 --- a/docker/hybrid/images/libeufin/startup.sh +++ b/docker/hybrid/images/libeufin/startup.sh @@ -2,13 +2,18 @@ set -eu +MAYBE_VOLUME_MOUNTPOINT="/data/libeufin" +export LIBEUFIN_SANDBOX_DB_CONNECTION="jdbc:sqlite:${MAYBE_VOLUME_MOUNTPOINT}/sandbox.sqlite3" +export LIBEUFIN_NEXUS_DB_CONNECTION="jdbc:sqlite:${MAYBE_VOLUME_MOUNTPOINT}/nexus.sqlite3" +# This file indicates that data preparation ran already +# once. It helps against some non idempotent commands. +INIT_MARKER=${MAYBE_VOLUME_MOUNTPOINT}/init-done export LD_LIBRARY_PATH=/usr/local/lib # helps taler-config CURRENCY=`taler-config -c /config/deployment.conf -s taler-deployment -o currency` SANDBOX_PORT=15000 NEXUS_PORT=15001 SANDBOX_BASE_URL="http://localhost:${SANDBOX_PORT}" EXCHANGE_URL=`taler-config -c /config/deployment.conf -s taler-deployment -o default-exchange` -MAYBE_VOLUME_MOUNTPOINT="/data/libeufin" # As wanted by the Libeufin CLI: export LIBEUFIN_SANDBOX_URL="${SANDBOX_BASE_URL}/demobanks/default" export LIBEUFIN_NEXUS_URL="http://localhost:${NEXUS_PORT}" @@ -17,7 +22,9 @@ export LIBEUFIN_NEXUS_URL="http://localhost:${NEXUS_PORT}" register_sandbox_account() { export LIBEUFIN_SANDBOX_USERNAME=$1 export LIBEUFIN_SANDBOX_PASSWORD=$2 - libeufin-cli sandbox demobank register --name "$4" --iban $3 + # A unavailable username upon registration should + # fail, hence non idempotence is acceptable here. + test -a $INIT_MARKER || libeufin-cli sandbox demobank register --name "$4" --iban $3 unset LIBEUFIN_SANDBOX_USERNAME unset LIBEUFIN_SANDBOX_PASSWORD } @@ -43,13 +50,12 @@ is_serving() { EXCHANGE_IBAN=DE159593 mkdir -p ${MAYBE_VOLUME_MOUNTPOINT} -export LIBEUFIN_SANDBOX_DB_CONNECTION="jdbc:sqlite:${MAYBE_VOLUME_MOUNTPOINT}/sandbox.sqlite3" export LIBEUFIN_SANDBOX_ADMIN_PASSWORD=secret echo -n "Creating ${CURRENCY} default demobank..." -libeufin-sandbox config --currency ${CURRENCY} default +test -a $INIT_MARKER || libeufin-sandbox config --currency ${CURRENCY} default echo DONE echo -n "Specify default exchange..." -libeufin-sandbox default-exchange \ +test -a $INIT_MARKER || libeufin-sandbox default-exchange \ ${EXCHANGE_URL} \ "payto://iban/SANDBOXX/${EXCHANGE_IBAN}?receiver-name=Exchange+Company" echo DONE @@ -73,10 +79,10 @@ echo -n "Create exchange EBICS subscriber at Sandbox.." export LIBEUFIN_SANDBOX_USERNAME=admin export LIBEUFIN_SANDBOX_PASSWORD=secret echo -n "Create EBICS host at Sandbox.." -libeufin-cli sandbox --sandbox-url $SANDBOX_BASE_URL ebicshost create --host-id talerebics +test -a $INIT_MARKER || libeufin-cli sandbox --sandbox-url $SANDBOX_BASE_URL ebicshost create --host-id talerebics echo DONE echo -n "Create exchange's EBICS subscriber at Sandbox.." -libeufin-cli sandbox \ +test -a $INIT_MARKER || libeufin-cli sandbox \ demobank new-ebicssubscriber --host-id talerebics \ --user-id exchangeebics --partner-id talerpartner \ --bank-account $EXCHANGE_SANDBOX_USERNAME @@ -84,8 +90,10 @@ echo DONE ## NEXUS SETUP EXCHANGE_NEXUS_USERNAME=`taler-config -c /config/deployment.conf -s taler-deployment -o exchange-nexus-username` EXCHANGE_NEXUS_PASSWORD=`taler-config -c /config/deployment.conf -s taler-deployment -o exchange-nexus-password` -export LIBEUFIN_NEXUS_DB_CONNECTION="jdbc:sqlite:${MAYBE_VOLUME_MOUNTPOINT}/nexus.sqlite3" + echo -n "Creating Nexus superuser..." +# Idempotent in the sense that if the user is found, +# they'll get the password changed. libeufin-nexus superuser $EXCHANGE_NEXUS_USERNAME \ --password $EXCHANGE_NEXUS_PASSWORD echo DONE @@ -97,8 +105,12 @@ is_serving $LIBEUFIN_NEXUS_URL Nexus export LIBEUFIN_NEXUS_USERNAME=$EXCHANGE_NEXUS_USERNAME export LIBEUFIN_NEXUS_PASSWORD=$EXCHANGE_NEXUS_PASSWORD + echo -n Creating a EBICS connection at Nexus.. -libeufin-cli connections new-ebics-connection \ +# Not idempotent: the implementation does check if +# a connection with the requested name exists, and +# returns "409 Conflict". FIXME +test -a $INIT_MARKER || libeufin-cli connections new-ebics-connection \ --ebics-url "${SANDBOX_BASE_URL}/ebicsweb" \ --host-id talerebics \ --partner-id talerpartner \ @@ -106,12 +118,15 @@ libeufin-cli connections new-ebics-connection \ talerconn echo DONE echo -n Setup EBICS keying.. -libeufin-cli connections connect talerconn > /dev/null +# idempotent (noop if 'talerconn' is found) +libeufin-cli connections connect talerconn > /dev/null echo DONE echo -n Download bank account name from Sandbox.. +# idempotent (only stores new bank account names) libeufin-cli connections download-bank-accounts talerconn echo DONE echo -n Importing bank account info into Nexus.. +# idempotent NEXUS_IMPORTED_BANKACCOUNT=nexus-bankaccount libeufin-cli connections import-bank-account \ --offered-account-id $EXCHANGE_SANDBOX_USERNAME \ @@ -120,7 +135,8 @@ libeufin-cli connections import-bank-account \ echo DONE echo -n Setup payments submission task.. # Tries every second. -libeufin-cli accounts task-schedule \ +# Not idempotent, FIXME +test -a $INIT_MARKER || libeufin-cli accounts task-schedule \ --task-type submit \ --task-name exchange-payments \ --task-cronspec "* * *" \ @@ -128,7 +144,8 @@ libeufin-cli accounts task-schedule \ echo DONE # Tries every second. Ask C52 echo -n Setup history fetch task.. -libeufin-cli accounts task-schedule \ +# Not idempotent, FIXME +test -a $INIT_MARKER || libeufin-cli accounts task-schedule \ --task-type fetch \ --task-name exchange-history \ --task-cronspec "* * *" \ @@ -137,11 +154,15 @@ libeufin-cli accounts task-schedule \ $NEXUS_IMPORTED_BANKACCOUNT echo DONE echo -n Create the Taler facade at Nexus.. +# Not idempotent, in the sense that a duplicate +# facade will be created. FIXME FACADE_NAME=taler-facade -libeufin-cli facades \ +test -a $INIT_MARKER || libeufin-cli facades \ new-taler-wire-gateway-facade \ --currency ${CURRENCY} --facade-name $FACADE_NAME \ talerconn $NEXUS_IMPORTED_BANKACCOUNT echo DONE +touch $INIT_MARKER + wait |