summaryrefslogtreecommitdiff
path: root/netzbon/main.sh
blob: 7776e8e2721c01f8925266f1a013e596b29632c4 (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
#!/bin/bash
# This file is in the public domain.

# main.sh is the main script that asks the questions and
# puts the answers into environment variables located at  "config/taler-internal.conf or config/taler.conf" files
# Nginx configuration - Reads values directly from these "config files".

set -eu

# include functions source file

source functions.sh

# include variables from configuration
mkdir -p config/
touch config/user.conf config/internal.conf
# Values supplied by user
source config/user.conf
# Values we generated
source config/internal.conf

# Ask questions to user
# START USER INTERACTION
say "Welcome to the GNU Taler Debian setup!"
say ""
say "All configuration values asked during the setup script"
say "can be changed in config/user.conf"

if test -z "${CURRENCY:-}"; then
  read -r -p "Enter the name of the currency (e.g. 'EUR'): " CURRENCY
  # convert to all-caps
  CURRENCY=$(echo "${CURRENCY}" | tr a-z A-Z)
  # libeufin currenly doesn't like currency names less than 3 letters.
  if [[ ${#CURRENCY} -lt 3 || ${#CURRENCY} -gt 11 ]]; then
    say "Currency name must be between 3 and 10 letters"
    exit 1
  fi
  echo "CURRENCY=${CURRENCY}" >>config/user.conf
fi
if test -z "${BANK_NAME:-}"; then
  read -r -p "Enter the human-readable name of the bank (e.g. 'Taler Bank'): " BANK_NAME
  echo "BANK_NAME=\"${BANK_NAME}\"" >>config/user.conf
fi
if test -z "${ENABLE_TLS:-}"; then
  read -r -p "Use TLS? (y/n): " ENABLE_TLS
  echo "ENABLE_TLS=${ENABLE_TLS}" >>config/user.conf
fi
if test -z "${DO_OFFLINE:-}"; then
  read -r -p "Run taler-exchange-offline? (y/n): " DO_OFFLINE
  echo "DO_OFFLINE=${DO_OFFLINE}" >>config/user.conf
fi
if test -z "${MASTER_PUBLIC_KEY:-}"; then
  if test "${DO_OFFLINE:-y}" == n; then
    read -r -p "Enter the exchange-offline master public key: " MASTER_PUBLIC_KEY
    echo "MASTER_PUBLIC_KEY=${MASTER_PUBLIC_KEY}" >>config/user.conf
  fi
fi
if test -z "${BANK_ADMIN_PASSWORD:-}"; then
  read -r -s -p "Enter the admin password for the bank: " BANK_ADMIN_PASSWORD
  echo "BANK_ADMIN_PASSWORD=$(printf '%q' "${BANK_ADMIN_PASSWORD}")" >>config/user.conf
  echo "" # force new line
fi
if test -z "${DOMAIN_NAME:-}"; then
  read -r -p "Enter the domain name: " DOMAIN_NAME
  # convert to lower-case
  DOMAIN_NAME=$(echo "${DOMAIN_NAME}" | tr A-Z a-z)
  echo "DOMAIN_NAME=${DOMAIN_NAME}" >>config/user.conf
fi
# END USER INTERACTION

# Check DNS settings
if ! ping -c1 "exchange.${DOMAIN_NAME}" &>/dev/null; then
  say "Could not ping exchange.${DOMAIN_NAME}."
  say "Please make sure your DNS/network are working."
  exit 1
fi
if ! ping -c1 "bank.${DOMAIN_NAME}" &>/dev/null; then
  say "Could not ping bank.${DOMAIN_NAME}."
  say "Please make sure your DNS/network are working."
  exit 1
fi

# Check if the user is root, otherwise EXIT.
check_user

# Installation of deb packages required
. install_packages.sh

if test -z "${BANK_EXCHANGE_PASSWORD:-}"; then
  BANK_EXCHANGE_PASSWORD=$(uuidgen)
  echo "BANK_EXCHANGE_PASSWORD=\"${BANK_EXCHANGE_PASSWORD}\"" >>config/internal.conf
fi

# TODO With port should be use ? ask user ?
echo "BANK_PORT=9090" >>config/user.conf
if test "${ENABLE_TLS:-}" == "y"; then
  PROTO="https"
else
  PROTO="http"
fi
echo "PROTO=$PROTO">>config/internal.conf

./config_libeufin_bank.sh
./config_libeufin_nexus.sh
./config_nginx.sh
./setup-exchange.sh
./setup-merchant.sh

# Final message to the user
say "Congratulations, you have successfully installed GNU Taler"
say "Your bank is at ${PROTO}://bank.${DOMAIN_NAME}/"
say "A merchant is at ${PROTO}://backend.${DOMAIN_NAME}/"
say "You should set credentials for the merchant soon."

exit 0
# END INSTALLATION