summaryrefslogtreecommitdiff
path: root/netzbon/config_libeufin_bank.sh
blob: 2888e93ac9cad2ffe659c47917fb46d2e65a13a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/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 <<EOF > /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"