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


set -eu

source functions.sh
{ source <(./config.py 3>&1 >&4 4>&-); } 4>&1
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

if test ${DO_CONVERSION} == y; then
  say "Configuring libeufin-nexus with ${FIAT_CURRENCY}..."

  taler-config -s nexus-ebics -o CURRENCY \
    -V "$FIAT_CURRENCY" -c /etc/libeufin/libeufin-nexus.conf
  taler-config -s nexus-ebics -o IBAN \
    -V "$FIAT_ACCOUNT_IBAN" -c /etc/libeufin/libeufin-nexus.conf
  taler-config -s nexus-ebics -o BIC \
    -V "$FIAT_ACCOUNT_BIC" -c /etc/libeufin/libeufin-nexus.conf
  taler-config -s nexus-ebics -o NAME \
    -V "$FIAT_ACCOUNT_NAME" -c /etc/libeufin/libeufin-nexus.conf
fi


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

cat >/etc/libeufin/libeufin-bank.conf <<EOF
[libeufin-bank]
CURRENCY=${CURRENCY}
NAME="${BANK_NAME}"
BASE_URL=bank.${DOMAIN_NAME}
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}
EOF

if test ${DO_CONVERSION} == y; then
  cat >>/etc/libeufin/libeufin-bank.conf <<EOF 
ALLOW_CONVERSION=yes
FIAT_CURRENCY=${FIAT_CURRENCY}
ALLOW_EDIT_CASHOUT_PAYTO_URI=yes
EOF
fi

if test -n "${TELESIGN_AUTH_TOKEN:-}"; then
  cat >>/etc/libeufin/libeufin-bank.conf <<EOF 
TAN_SMS=libeufin-tan-sms.sh
TAN_SMS_ENV={"AUTH_TOKEN":"$TELESIGN_AUTH_TOKEN"}
EOF
fi

say "Setting up libeufin database..."

libeufin-dbconfig &>> setup.log

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}" &>> setup.log

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 &>> setup.log

say "Setting up SPA configuration..."
echo "settings = { bankName: \"${BANK_NAME}\" }" >/etc/libeufin/settings.js

say "Create exchange account..."
if test -z "${EXCHANGE_PAYTO:-}"; then
  # FIXME create-account should have a way to update the password if the account already exists
  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 2>> setup.log)?receiver-name=Exchange"
  echo "EXCHANGE_PAYTO=\"${EXCHANGE_PAYTO_NEW}\"" >> config/user.conf
fi


say "Start the bank..."
systemctl enable libeufin-bank &>> setup.log
systemctl restart libeufin-bank &>> setup.log

say "Waiting for the bank (/config)..."
curl -sS --max-time 2 \
  --retry-all-errors \
  --retry-delay 2 \
  --retry 10 \
  ${PROTO}://bank.${DOMAIN_NAME}/config &>> setup.log

if test ${DO_CONVERSION} == y; then
say "Setting conversion rates to 1:1 ..."
# TODO only set conversion rates if known have been set
curl -sS -u "admin:${BANK_ADMIN_PASSWORD}" \
  -H 'Content-Type: application/json; charset=utf-8' \
  ${PROTO}://bank.${DOMAIN_NAME}/conversion-info/conversion-rate \
--data-binary @- &>> setup.log << 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
fi

say "LibEuFin setup finished"