diff options
Diffstat (limited to 'contrib/taler-nexus-prepare')
-rwxr-xr-x | contrib/taler-nexus-prepare | 233 |
1 files changed, 110 insertions, 123 deletions
diff --git a/contrib/taler-nexus-prepare b/contrib/taler-nexus-prepare index 66a0b1c1e..6a36387d9 100755 --- a/contrib/taler-nexus-prepare +++ b/contrib/taler-nexus-prepare @@ -1,128 +1,115 @@ -#!/usr/bin/env python3 -# This file is in the public domain. +#!/bin/bash -from requests import get, post -from subprocess import call -import base64 +set -eu # EBICS details -EBICS_URL = "http://localhost:5000/ebicsweb" -HOST_ID = "HOST01" -PARTNER_ID = "PARTNER1" -USER_ID = "USER1" -EBICS_VERSION = "H004" - -SUBSCRIBER_IBAN = "ES9121000418450200051332" -SUBSCRIBER_BIC = "BIC" -SUBSCRIBER_NAME = "Exchange" - -BANK_ACCOUNT_LABEL = "my-bank-account" -BANK_CONNECTION_LABEL = "my-bank-connection" +EBICS_URL="http://localhost:5000/ebicsweb" +HOST_ID="HOST01" +PARTNER_ID="PARTNER1" +USER_ID="USER1" + +# This is used _both_ at Sandbox and at Nexus. +# Basically, Nexus imports the offered bank account +# using the same name used by the Sandbox. +BANK_ACCOUNT_LABEL="my-bank-account" +BANK_CONNECTION_LABEL="my-bank-connection" FACADE_LABEL="my-facade" -USERNAME="Exchange" -USER_AUTHORIZATION_HEADER = "basic {}".format( - base64.b64encode(b"Exchange:x").decode("utf-8") -) - -def assertResponse(response): - if response.status_code != 200: - print("Test failed on URL: {}".format(response.url)) - # stdout/stderr from both services is A LOT of text. - # Confusing to dump all that to console. - print("Check nexus.log and sandbox.log, probably under /tmp") - exit(1) - # Allows for finer grained checks. - return response - -# Create a nexus (super-) user -check_call(["libeufin-nexus", - "superuser", - "--db-name", "/tmp/nexus-exchange-test.sqlite3", - "Exchange", - "--password", "x"] -) - -# Create a EBICS bank connection. -assertResponse( - post( - "http://localhost:5001/bank-connections", - json=dict( - name=BANK_CONNECTION_LABEL, - source="new", - type="ebics", - data=dict( - ebicsURL=EBICS_URL, hostID=HOST_ID, partnerID=PARTNER_ID, userID=USER_ID - ), - ), - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) - -# Create a facade -assertResponse( - post( - "http://localhost:5001/facades", - json=dict( - name=FACADE_LABEL, - type="taler-wire-gateway", - creator=USERNAME, - config=dict( - bankAccount=BANK_ACCOUNT_LABEL, - bankConnection=BANK_CONNECTION_LABEL, - reserveTransferLevel="UNUSED", - intervalIncremental="UNUSED" - ) - ), - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) - -# Create the EBICS host at the Sandbox. -assertResponse( - post( - "http://localhost:5000/admin/ebics/host", - json=dict(hostID=HOST_ID, ebicsVersion=EBICS_VERSION), - ) -) - -# Create Exchange EBICS subscriber at the Sandbox. -assertResponse( - post( - "http://localhost:5000/admin/ebics/subscribers", - json=dict(hostID=HOST_ID, partnerID=PARTNER_ID, userID=USER_ID), - ) -) - -# Create a bank account associated to the Exchange's EBICS subscriber, -# again at the Sandbox. -assertResponse( - post( - "http://localhost:5000/admin/ebics/bank-accounts", - json=dict( - subscriber=dict(hostID=HOST_ID, partnerID=PARTNER_ID, userID=USER_ID), - iban=SUBSCRIBER_IBAN, - bic=SUBSCRIBER_BIC, - name=SUBSCRIBER_NAME, - label=BANK_ACCOUNT_LABEL, - ), - ) -) - -# 'connect' to the bank: upload+download keys. -assertResponse( - post( - "http://localhost:5001/bank-connections/{}/connect".format(BANK_CONNECTION_LABEL), - json=dict(), - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) - -# Download bank accounts. -assertResponse( - post( - "http://localhost:5001/bank-connections/{}/ebics/import-accounts".format(BANK_CONNECTION_LABEL), - json=dict(), - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) +export LIBEUFIN_SANDBOX_USERNAME=exchange +export LIBEUFIN_SANDBOX_PASSWORD=x +export LIBEUFIN_SANDBOX_URL=http://localhost:5000/demobanks/default +libeufin-cli sandbox demobank register --name "Exchange Company" + +export LIBEUFIN_SANDBOX_USERNAME=fortytwo +export LIBEUFIN_SANDBOX_PASSWORD=x +export LIBEUFIN_SANDBOX_URL=http://localhost:5000/demobanks/default +libeufin-cli sandbox demobank register \ + --name User42 --iban FR7630006000011234567890189 + +export LIBEUFIN_SANDBOX_USERNAME=fortythree +export LIBEUFIN_SANDBOX_PASSWORD=x +export LIBEUFIN_SANDBOX_URL=http://localhost:5000/demobanks/default +libeufin-cli sandbox demobank register \ + --name User43 --iban GB33BUKB20201555555555 + +export LIBEUFIN_SANDBOX_USERNAME=admin +export LIBEUFIN_SANDBOX_PASSWORD=secret +export LIBEUFIN_SANDBOX_URL=http://localhost:5000/demobanks/default +echo -n "Create EBICS host at Sandbox..." +libeufin-cli sandbox \ + --sandbox-url "http://localhost:5000" \ + ebicshost create --host-id $HOST_ID +echo " OK" + +echo -n "Create exchange EBICS subscriber at Sandbox..." +libeufin-cli sandbox \ + demobank new-ebicssubscriber --host-id $HOST_ID \ + --user-id $USER_ID --partner-id $PARTNER_ID \ + --bank-account exchange # that's a username _and_ a bank account name +echo " OK" +unset LIBEUFIN_SANDBOX_USERNAME +unset LIBEUFIN_SANDBOX_PASSWORD +unset LIBEUFIN_SANDBOX_URL + +export LIBEUFIN_NEXUS_USERNAME=exchange +export LIBEUFIN_NEXUS_PASSWORD=x +export LIBEUFIN_NEXUS_URL=http://localhost:5001/ + +echo -n "Create the exchange (super)user at Nexus..." +libeufin-nexus superuser exchange --password x +echo " DONE" + +echo -n "Creating a EBICS connection at Nexus..." +libeufin-cli connections new-ebics-connection \ + --ebics-url $EBICS_URL \ + --host-id $HOST_ID \ + --partner-id $PARTNER_ID \ + --ebics-user-id $USER_ID \ + $BANK_CONNECTION_LABEL +echo " OK" + +echo -n "Setup EBICS keying..." +libeufin-cli connections connect $BANK_CONNECTION_LABEL > /dev/null +echo " OK" + +echo -n "Download bank account name from Sandbox..." +libeufin-cli connections download-bank-accounts $BANK_CONNECTION_LABEL +echo " OK" + +echo -n "Importing bank account info into Nexus..." +libeufin-cli connections import-bank-account \ + --offered-account-id exchange \ + --nexus-bank-account-id $BANK_ACCOUNT_LABEL \ + $BANK_CONNECTION_LABEL +echo " OK" + +echo -n "Create the Taler facade at Nexus..." +libeufin-cli facades \ + new-taler-wire-gateway-facade \ + --currency KUDOS --facade-name $FACADE_LABEL \ + $BANK_CONNECTION_LABEL $BANK_ACCOUNT_LABEL +echo " DONE" + +echo -n Setup payments submission task.. +# Tries every second. +libeufin-cli accounts task-schedule \ + --task-type submit \ + --task-name exchange-payments \ + --task-cronspec "* * *" \ + $BANK_ACCOUNT_LABEL +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 \ + $BANK_ACCOUNT_LABEL +echo OK + +# unset, in case the script gets 'source'd. +unset LIBEUFIN_NEXUS_USERNAME +unset LIBEUFIN_NEXUS_PASSWORD +unset LIBEUFIN_NEXUS_URL |