libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit ca27936df1c5bdfcab7b26e1be8a24503c260a73
parent 9437d034203690d0f536e428a0025f0416186a5b
Author: MS <ms@taler.net>
Date:   Thu, 11 Jun 2020 18:39:14 +0200

cli upgrading

adding a bash script that uses the new python cli.
It bootstraps a new environment using the sandbox.

Diffstat:
Mcli/libeufin-cli-new | 30++++++++++++++++++++----------
Acli/setup-template.sh | 104+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 124 insertions(+), 10 deletions(-)

diff --git a/cli/libeufin-cli-new b/cli/libeufin-cli-new @@ -1,6 +1,5 @@ #!/usr/bin/env python3 -import os import click import json import hashlib @@ -46,19 +45,19 @@ def sandbox(ctx): @click.argument("nexus-base-url") @click.pass_obj def new_ebics_connection(obj, connection_name, ebics_url, host_id, partner_id, - nexus_user_id, nexus_password, nexus_base_url): + nexus_user_id, nexus_password, nexus_base_url, ebics_user_id): url = urljoin(nexus_base_url, "/bank-connections") body = dict( name=connection_name, source="new", type="ebics", - data=dict(ebicsURL=ebics_url, hostID=host_id, partnerID=partner_id, userID=user_id) + data=dict(ebicsURL=ebics_url, hostID=host_id, partnerID=partner_id, userID=ebics_user_id) ), try: resp = post(url, json=body, auth = auth.HTTPBasicAuth(nexus_user_id, nexus_password)) except Exception: print("Could not reach nexus") - return + exit(1) print(resp.content.decode("utf-8")) @bank_connection.command(help="bootstrap the bank connection") @@ -103,6 +102,7 @@ def import_bank_accounts(obj, connection_name, nexus_user_id, nexus_password, ne @click.option("--nexus-user-id", help="Nexus user ID", required=True) @click.option("--nexus-password", help="Nexus password", required=True) @click.argument("nexus-base-url") +@click.pass_obj def prepare_payment(obj, account_name, credit_iban, credit_bic, credit_name, nexus_user_id, nexus_password, nexus_base_url): url = urljoin(nexus_basd_url, "/bank-accounts/{}/prepared-payments".format(account_name)) @@ -128,6 +128,7 @@ def prepare_payment(obj, account_name, credit_iban, credit_bic, credit_name, @click.option("--nexus-user-id", help="nexus user id", required=True) @click.option("--nexus-password", help="nexus user password", required=True) @click.argument("nexus-base-url") +@click.pass_obj def submit_payment(obj, account_name, payment_uuid, nexus_user_id, nexus_password, nexus_base_url): url = urljoin( nexus_base_url, "/bank-accounts/{}/prepared-payments/{}/submit".format(account_name, payment_uuid) @@ -144,6 +145,7 @@ def submit_payment(obj, account_name, payment_uuid, nexus_user_id, nexus_passwor @click.option("--nexus-user-id", help="nexus user id", required=True) @click.option("--nexus-password", help="nexus user password", required=True) @click.argument("nexus-base-url") +@click.pass_obj def submit_payment(obj, account_name, nexus_user_id, nexus_password, nexus_base_url): url = urljoin( nexus_base_url, "/bank-accounts/{}/fetch-transactions".format(account_name) @@ -160,6 +162,7 @@ def submit_payment(obj, account_name, nexus_user_id, nexus_password, nexus_base_ @click.option("--nexus-user-id", help="nexus user id", required=True) @click.option("--nexus-password", help="nexus user password", required=True) @click.argument("nexus-base-url") +@click.pass_obj def transactions(obj, account_name, nexus_user_id, nexus_password, nexus_base_url): url = urljoin(nexus_base_url, "/bank-accounts/{}/transactions".format(account_name)) try: @@ -173,21 +176,26 @@ def transactions(obj, account_name, nexus_user_id, nexus_password, nexus_base_ur @sandbox.command(help="activate a Ebics host") @click.option("--host-id", help="Ebics host ID", required=True) @click.argument("sandbox-base-url") +@click.pass_obj def make_ebics_host(obj, host_id, sandbox_base_url): url = urljoin(sandbox_base_url, "/admin/ebics/host") try: - post(url, json=dict(hostID=host_id, ebicsVersion="2.5")) + resp = post(url, json=dict(hostID=host_id, ebicsVersion="2.5")) except Exception: print("Could not reach sandbox") return print(resp.content.decode("utf-8")) @sandbox.command(help="activate a Ebics subscriber") +@click.option("--host-id", help="Ebics host ID", required=True) +@click.option("--partner-id", help="Ebics partner ID", required=True) +@click.option("--user-id", help="Ebics user ID", required=True) @click.argument("sandbox-base-url") +@click.pass_obj def activate_ebics_subscriber(obj, host_id, partner_id, user_id, sandbox_base_url): url = urljoin(sandbox_base_url, "/admin/ebics/subscribers") try: - post(url, json=dict(hostID=host_id, partnerID=partner_id, userID=user_id)) + resp = post(url, json=dict(hostID=host_id, partnerID=partner_id, userID=user_id)) except Exception: print("Could not reach sandbox") return @@ -198,10 +206,11 @@ def activate_ebics_subscriber(obj, host_id, partner_id, user_id, sandbox_base_ur @click.option("--bic", help="BIC", required=True) @click.option("--person-name", help="bank account owner name", required=True) @click.option("--account-name", help="label of this bank account", required=True) -@click.option("--ebics_user_id", help="user ID of the Ebics subscriber", required=True) -@click.option("--ebics_host_id", help="host ID of the Ebics subscriber", required=True) -@click.option("--ebics_partner_id", help="partner ID of the Ebics subscriber", required=True) +@click.option("--ebics-user-id", help="user ID of the Ebics subscriber", required=True) +@click.option("--ebics-host-id", help="host ID of the Ebics subscriber", required=True) +@click.option("--ebics-partner-id", help="partner ID of the Ebics subscriber", required=True) @click.argument("sandbox-base-url") +@click.pass_obj def associate_bank_account(obj, iban, bic, person_name, account_name, ebics_user_id, ebics_host_id, ebics_partner_id, sandbox_base_url): url = urljoin(sandbox_base_url, "/admin/ebics/bank-accounts") @@ -226,8 +235,9 @@ def associate_bank_account(obj, iban, bic, person_name, account_name, @click.option("--debtor-name", help="name of the person who is sending the payment") @click.option("--amount", help="amount, no currency") @click.option("--currency", help="currency") -@click.option("--subject", help="Payment subject") +@click.option("--subject", help="payment subject") @click.argument("sandbox-base-url") +@click.pass_obj def book_payment(obj, creditor_iban, creditor_bic, creditor_name, debtor_iban, debtor_bic, debtor_name, amount, currency, subject, sandbox_base_url): diff --git a/cli/setup-template.sh b/cli/setup-template.sh @@ -0,0 +1,104 @@ +#!/bin/bash + +# Such template sets an env up using the Python CLI. + +# set -eu +set -u + +EBICS_HOST_ID=ebicshost +EBICS_PARTNER_ID=ebicspartner +EBICS_USER_ID=ebicsuser +EBICS_BASE_URL="$SANDBOX_URL/ebicsweb" + +IBAN=x +BIC=y +PERSON_NAME=z +ACCOUNT_NAME=a + +NEXUS_USER=u +NEXUS_PASSWORD=p +NEXUS_BANK_CONNECTION_NAME=b + +########## setup sandbox ############# + +# make ebics host as sandbox +echo Making a ebics host at the sandbox +sleep 3 +./libeufin-cli-new \ + sandbox \ + make-ebics-host \ + --host-id=$EBICS_HOST_ID \ + $SANDBOX_URL + +# activate a ebics subscriber on that host +echo Activating the ebics subscriber at the sandbox +sleep 3 +./libeufin-cli-new \ + sandbox \ + activate-ebics-subscriber \ + --host-id=$EBICS_HOST_ID \ + --partner-id=$EBICS_PARTNER_ID \ + --user-id=$EBICS_USER_ID \ + $SANDBOX_URL + +# give a bank account to such user +echo Giving a bank account to such subscriber +./libeufin-cli-new \ + sandbox \ + associate-bank-account \ + --iban=$IBAN \ + --bic=$BIC \ + --person-name=$PERSON_NAME \ + --account-name=$ACCOUNT_NAME \ + --ebics-user-id=$EBICS_USER_ID \ + --ebics-host-id=$EBICS_HOST_ID \ + --ebics-partner-id=$EBICS_PARTNER_ID \ + $SANDBOX_URL +sleep 3 + +########## setup nexus ############# + +# create a user +echo Creating a nexus user +nexus superuser --password $NEXUS_PASSWORD $NEXUS_USER +sleep 3 + +# create a bank connection +echo Creating a bank connection for such user +./libeufin-cli-new \ + bank-connection \ + new-ebics-connection \ + --connection-name $NEXUS_BANK_CONNECTION_NAME \ + --ebics-url $EBICS_BASE_URL \ + --host-id $EBICS_HOST_ID \ + --partner-id $EBICS_PARTNER_ID \ + --ebics-user-id $EBICS_USER_ID \ + --nexus-user-id $NEXUS_USER \ + --nexus-password $NEXUS_PASSWORD \ + $NEXUS_URL +sleep 3 + +# Bootstrapping such connection +echo Bootstrapping the bank connection +./libeufin-cli-new \ + bank-connection \ + bootstrap-bank-connection \ + --connection-name $NEXUS_BANK_CONNECTION_NAME \ + --nexus-user-id $NEXUS_USER \ + --nexus-password $NEXUS_PASSWORD \ + $NEXUS_URL +sleep 3 + +# Fetching the bank accounts +echo Fetching the bank accounts +./libeufin-cli-new \ + bank-connection \ + import-bank-accounts \ + --connection-name $NEXUS_BANK_CONNECTION_NAME \ + --nexus-user-id $NEXUS_USER \ + --nexus-password $NEXUS_PASSWORD \ + $NEXUS_URL +sleep 3 + +echo User is setup, history can be requested, and \ + new payments can be prepared and submitted.