#!/bin/sh

IP_HOSTNAME="calm"
IP_INTERFACE=""

# Internet123
ADMIN_PASSWORD="f8f0122a2be339e334e0250b3ae0b835699f3c8cd96f1b16474e6c0593b32648"
PASSWORD_SECRET=""

if [[ -f /etc/calm/.server_settings ]]
then
	. /etc/calm/.server_settings
fi

INTERFACES=($(ls -1 /sys/class/net | grep -v 'lo'))
if [[ -z "${IP_INTERFACE}" ]]
then
	IP_INTERFACE=${INTERFACES[0]}
fi

IP_DNS="$(cat /etc/resolv.conf | grep '^nameserver' | awk '{print $2}' | tr '\n' ' ')"
if [[ -z "${IP_DNS}" ]]
then
	IP_DNS="8.8.8.8"
fi

# Default to the current IP on the interface if there is one
CONFIRM=""
while [[ "${CONFIRM}" != "y" ]]
do
	read -e -i "${IP_HOSTNAME}" -p "Hostname [${IP_HOSTNAME}]: " IP_HOSTNAME

	read -e -i "${IP_INTERFACE}" -p "Network Interface [${IP_INTERFACE}] (${INTERFACES[*]}): " IP_INTERFACE

	IP_PREFIX=$(ip a show dev ${IP_INTERFACE} | grep 'inet ' | awk '{print $2}')
	IP_ADDRESS=$(echo ${IP_PREFIX} | cut -d '/' -f 1)
	IP_NETMASK=$(ipcalc -m ${IP_PREFIX} | sed -e 's|NETMASK=||g')
	IP_GATEWAY=$(ip r s | grep default | awk '{print $3}')

	if [[ -z "${IP_NETMASK}" ]]
	then
		IP_NETMASK="255.255.255.0"
	fi

	read -e -i "${IP_ADDRESS}" -p "IP Address [${IP_ADDRESS}]: " IP_ADDRESS

	read -e -i "${IP_NETMASK}" -p "IP Netmask [${IP_NETMASK}]: " IP_NETMASK

	read -e -i "${IP_GATEWAY}" -p "IP Gateway [${IP_GATEWAY}]: " IP_GATEWAY

	read -e -i "${IP_DNS}" -p "DNS Servers (space-separate for multiple) [${IP_DNS}]: " IP_DNS

	echo -e ""
	echo -e "Setup Information Summary: "
	echo -e ""
	echo -e "Hostname         :   \\e[01;36m$IP_HOSTNAME \\e[00m"
	echo -e "Network Interface:   \\e[01;36m$IP_INTERFACE \\e[00m"
	echo -e "        IP       :   \\e[01;36m$IP_ADDRESS \\e[00m"
	echo -e "        Netmask  :   \\e[01;36m$IP_NETMASK \\e[00m"
	echo -e "        Gateway  :   \\e[01;36m$IP_GATEWAY \\e[00m"
	echo -e "        DNS      :   \\e[01;36m$IP_DNS \\e[00m"
	echo -e ""
	echo -n "Is the above configuration correct? (y/n): "
	read CONFIRM
done

if [[ -z "${PASSWORD_SECRET}" ]]
then
	PASSWORD_SECRET=$(pwgen -N 1 -s 96)
fi

echo -n "Would you like to set/change the root/admin password? (y/n): "
read CONFIRM
while [[ "${CONFIRM}" == "y" ]]
do
	echo -n "Password: "
	read -s PASS_1

	echo ""

	echo -n "Confirm: "
	read -s PASS_2

	if [[ "${PASS_1}" != "${PASS_2}" ]]
	then
		echo "Passwords dont match"
	else
		echo -n "${PASS_1}" | passwd root --stdin
		ADMIN_PASSWORD=$(echo -n "${PASS_1}" | shasum -a 256 | awk '{print $1}')
		CONFIRM=n
		echo "Password changed successfully"
	fi
done

#echo -n "Would you like to initialise dedicated storage? (y/n): "
#read CONFIRM
#if [[ "${CONFIRM}" == "y" ]]
#then
#	echo "Please enter the main storage device (eg /dev/sdb): "
#	read -e -i "${SLOW_DISK}" SLOW_DISK
#
#	echo "Do you have an SSD disk to act as a cache? (y/n): "
#	read CONFIRM
#
#	if [[ "${CONFIRM}" == "y" ]]
#	then
#		echo "Please enter the SSD storage device (eg /dev/sdc): "
#		read -e -i "${SSD_DISK}" SSD_DISK
#	fi
#fi

BASE_URL="http://${IP_ADDRESS}:80"

sed -i -e "s|#*\(password_secret =\).*$|\1 ${PASSWORD_SECRET}|" /etc/calm/server/server.conf
sed -i -e "s|#*\(root_password_sha2 =\).*$|\1 ${ADMIN_PASSWORD}|" /etc/calm/server/server.conf
sed -i -e "s|#*\(rest_listen_uri =\).*$|\1 ${BASE_URL}\/api\/|" /etc/calm/server/server.conf
sed -i -e "s|#*\(rest_transport_uri =\).*$|\1 ${BASE_URL}\/api\/|" /etc/calm/server/server.conf
sed -i -e "s|#*\(web_listen_uri =\).*$|\1 ${BASE_URL}\/|" /etc/calm/server/server.conf

# Preserve UUID
UUID_LINE=$(cat /etc/sysconfig/network-scripts/ifcfg-${IP_INTERFACE} 2>/dev/null | grep UUID 2>/dev/null)

if [[ -z "${UUID_LINE}" ]]
then
	UUID_LINE=$(echo "UUID=$(uuidgen)")
fi

for iface in ${INTERFACES[@]}
do
	if [[ -f /etc/sysconfig/network-scripts/ifcfg-${iface} ]]
	then
		mv /etc/sysconfig/network-scripts/ifcfg-${iface} /etc/sysconfig/network-scripts/ifcfg-${iface}.old
	fi
done

cat <<EOF>/etc/sysconfig/network-scripts/ifcfg-${IP_INTERFACE}
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=${IP_INTERFACE}
${UUID_LINE}
DEVICE=${IP_INTERFACE}
ONBOOT=yes
IPADDR=${IP_ADDRESS}
NETMASK=${IP_NETMASK}
GATEWAY=${IP_GATEWAY}
EOF

COUNT=1
for ADDR in ${IP_DNS}
do
	echo "DNS${COUNT}=${ADDR}" >> /etc/sysconfig/network-scripts/ifcfg-${IP_INTERFACE}
	COUNT=$((COUNT+1))
done

hostnamectl set-hostname ${IP_HOSTNAME}

# Save the settings for future reference

for var in IP_HOSTNAME IP_INTERFACE IP_ADDRESS IP_NETMASK IP_GATEWAY IP_DNS PASSWORD_SECRET ADMIN_PASSWORD
do
	echo "${var}=\"$(eval echo \$${var})\""
done > /etc/calm/.server_settings

systemctl daemon-reload

echo -n 'Restarting Services... '
systemctl restart network
systemctl restart mongod
systemctl restart elasticsearch
systemctl stop firewalld
systemctl restart calm-server
sleep 1
tail -f /var/log/calm-server/server.log  | grep -m 1 "Started Web Interface at" > /dev/null
echo 'Done!'

echo ""
echo "Setup is now complete"
echo "You can access the user interface by browsing to http://${IP_ADDRESS}/"

