summaryrefslogtreecommitdiff
path: root/regional-currency/setup-libeufin.sh
blob: 26dc03be5956e5a7b329fc8e917f57102939b929 (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
#!/bin/bash
# This file is in the public domain.
#
# This script configure libeufin-bank and libeufin-nexus.


set -eu

source functions.sh
source config/user.conf
source config/internal.conf

say "Beginning LibEuFin setup"

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 libeufin-nexus with ${FIAT_CURRENCY}..."

taler-config -s nexus-ebics -o currency \
  -V $FIAT_CURRENCY -c /etc/libeufin/libeufin-nexus.conf

say "Configure libeufin-bank with ${CURRENCY}..."

cat <<EOF > /etc/libeufin/libeufin-bank.conf
[libeufin-bank]
CURRENCY=${CURRENCY}
WIRE_TYPE=x-taler-bank
X_TALER_BANK_PAYTO_HOSTNAME=bank.${DOMAIN_NAME}
SUGGESTED_WITHDRAWAL_EXCHANGE=${PROTO}://exchange.${DOMAIN_NAME}
SERVE=tcp
PORT=${BANK_PORT}
ALLOW_CONVERSION=yes
FIAT_CURRENCY=${FIAT_CURRENCY} 
TAN_SMS=libeufin-tan-sms.sh
TAN_EMAIL=libeufin-tan-email.sh
ALLOW_EDIT_CASHOUT_PAYTO_URI=yes

[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

say "Setting up libeufin database..."

libeufin-dbconfig

say "Setting up libeufin-bank..."


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 \
  admin --debit_threshold=${CURRENCY}:200000000

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 --exchange)?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 "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}:0.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.01",
    "cashout_rounding_mode": "nearest",
    "cashout_min_amount": "${CURRENCY}:1"
}
EOF
say "DONE"

say "LibEuFin setup finished"