#!/bin/bash # This file is in the public domain. # # This script configure and launches libeufin-bank. # The setup provides the admin account at the bank, and # another account for the exchange at the bank. # # The environment must provide the following variables: # - BANK_ADMIN_PASSWORD: password of the Netzbon administrator. # - BANK_EXCHANGE_PASSWORD: password of the exchange # bank account hosted at Sandbox. The related # username is: exchange-at-sandbox # - BANK_NAME: human-readable name for the bank # - DOMAIN_NAME: DNS domain name to use for the setup # - ENABLE_TLS (http or https?) # # OUTPUTS: # # EXCHANGE_PAYTO -- payto-URI of the exchange # EXCHANGE_WIRE_GATEWAY_URL -- URL of the wire gateway for the exchange set -eu source functions.sh source config/user.conf source config/internal.conf if test -z "${BANK_NAME:-}"; then say "Error: config/user.conf does not specify BANK_NAME" exit 1 fi if test -z "${DOMAIN_NAME:-}"; then say "Error: config/user.conf does not specify DOMAIN_NAME" exit 1 fi if test -z "${BANK_ADMIN_PASSWORD:-}"; then say "Error: config/user.conf does not specify BANK_ADMIN_PASSWORD" exit 1 fi if test -z "${BANK_EXCHANGE_PASSWORD:-}"; then say "Error: config/user.conf does not specify BANK_EXCHANGE_PASSWORD" exit 1 fi say "Configure the bank with ${CURRENCY}..." cat < /etc/libeufin/libeufin-bank.conf [libeufin-bank] CURRENCY=${CURRENCY} DEFAULT_EXCHANGE=${PROTO}://exchange.${DOMAIN_NAME} DEFAULT_ADMIN_DEBT_LIMIT=${CURRENCY}:20000000 DEFAULT_CUSTOMER_DEBT_LIMIT=${CURRENCY}:0 SERVE=tcp PORT=${BANK_PORT} ALLOW_CONVERSION=yes FIAT_CURRENCY=${FIAT_CURRENCY} TAN_SMS=libeufin-tan-sms.sh TAN_EMAIL=libeufin-tan-email.sh [CURRENCY-NETZBON] enabled=yes name=NetzBon code=NETZBON fractional_input_digits=2 fractional_normal_digits=2 fractional_trailing_zero_digits=2 alt_unit_names={"0":"NETZBON"} EOF # FIXME: include this in the bank _and_ make sure it gets loaded say "Setting up libeufin-bank admin account..." sudo -u libeufin-bank \ libeufin-bank passwd \ -c /etc/libeufin/libeufin-bank.conf \ admin "${BANK_ADMIN_PASSWORD}" say "Setting up admin's debt limit..." sudo -u libeufin-bank \ libeufin-bank edit-account \ -c /etc/libeufin/libeufin-bank.conf \ --debit_threshold=${CURRENCY}:200000000 admin say "Setting up SPA configuration..." echo "settings = { bankName: \"${BANK_NAME}\" }" >/etc/libeufin/settings.js say "Create exchange account..." if test -z "${EXCHANGE_PAYTO:-}"; then EXCHANGE_PAYTO_NEW="$(sudo -u libeufin-bank libeufin-bank create-account -c /etc/libeufin/libeufin-bank.conf '{"username":"exchange","password":"'${BANK_EXCHANGE_PASSWORD}'","name":"Exchange","is_taler_exchange":true}')?receiver-name=Exchange" echo "EXCHANGE_PAYTO=\"${EXCHANGE_PAYTO_NEW}\"" >> config/internal.conf fi if test -z "${EXCHANGE_WIRE_GATEWAY_URL:-}"; then EXCHANGE_WIRE_GATEWAY_URL_NEW="${PROTO}://bank.$DOMAIN_NAME/accounts/exchange/taler-wire-gateway/" echo "EXCHANGE_WIRE_GATEWAY_URL=\"${EXCHANGE_WIRE_GATEWAY_URL_NEW}\"" >> config/internal.conf fi say "Create merchant account..." if test -z "${MERCHANT_PAYTO:-}"; then MERCHANT_PAYTO_NEW="$(sudo -u libeufin-bank libeufin-bank create-account '{"username":"merchant","password":"'${BANK_MERCHANT_PASSWORD}'","name":"Merchant","is_taler_exchange":false}')?receiver-name=Merchant" echo "MERCHANT_PAYTO=\"${MERCHANT_PAYTO_NEW}\"" >> config/internal.conf fi say "Start the bank..." systemctl enable --now libeufin-bank say "Waiting for the bank (/config)..." curl --max-time 2 \ --retry-all-errors \ --retry-delay 4 \ --retry 10 \ ${PROTO}://bank.${DOMAIN_NAME}/config say "DONE" say "Setting conversion figures..." curl -u "admin:${BANK_ADMIN_PASSWORD}" \ -H 'Content-Type: application/json; charset=utf-8' \ ${PROTO}://bank.${DOMAIN_NAME}/conversion-info/conversion-rate \ --data-binary @- << EOF { "cashin_ratio": "1", "cashin_fee": "${CURRENCY}:0", "cashin_tiny_amount": "${CURRENCY}:01", "cashin_rounding_mode": "nearest", "cashin_min_amount": "${FIAT_CURRENCY}:1", "cashout_ratio": "1", "cashout_fee": "${FIAT_CURRENCY}:0", "cashout_tiny_amount": "${FIAT_CURRENCY}:0", "cashout_rounding_mode": "zero", "cashout_min_amount": "${CURRENCY}:1" } EOF say "DONE"