#!/bin/bash
set -e
clear

wait () {
	secs=${1}
	while [ $secs -gt 0 ]; do
		echo -ne "$secs\033[0K\r"
		sleep 1
		: $((secs--))
	done
}

echo "By default, all services except OPENSEARCH are public!"
echo "The configuration file access.ips is used to limit access to the services only to the configured IP ranges."
echo "Do you want to modify/edit this file now?"
read -p "(yes|no) [no] : " MODIFY
MODIFY=${MODIFY:-no}
case $MODIFY in
	yes|Yes|YES )
		echo modify
		echo "Please enter which editor (command) you want to use for editing this file"
		read -p "[vi] : " EDITOR
		EDITOR=${EDITOR:-vi}
		if [[ ( $EDITOR = "vi" ) || $EDITOR = "vim" ]]; then
			if `which $EDITOR > /dev/null 2>&1`; then
				echo "Instruction: "
				echo -e "\t 1. press i to edit file"
				echo -e "\t 2. modify file based on your needs"
				echo -e "\t 3. to save changes use following sequence: 'Esc : wq' and press enter"
				echo "to discard changes, use: 'Esc : q!' and press enter"
				read -p "press enter to continue ..." CONTINUE
				$EDITOR access.ips
			else
				echo "$EDITOR not found. install it and start over"
				exit 1
			fi
		else
			if `which $EDITOR > /dev/null 2>&1`; then
				$EDITOR access.ips
			else
				echo "$EDITOR not found. install it and start over"
				exit 1
			fi
		fi
		;;
	no|No|NO )
		echo no
		;;
	* )
		echo "Unknown answer, not modifying access rules!"
		;;
esac

./generate_haproxy_whitelist_files.sh
if [ $? -gt 0 ]; then
	echo "Error occurred, please check access.ips file structure. lines starting with '###' should not be modified"
	exit 1
else
	echo "Access restrictions configured successfully"
	echo ""
fi


if [ -f group_vars/all/variables.yml ]; then 
	echo "Variables file (group_vars/all/variables.yml) is already configured manually. Please take a look if everything is correct and move to the next step"
	echo
	echo "group_vars/all/variables.yml:"
	echo "============================================================"
	cat group_vars/all/variables.yml
	echo "============================================================"
else
	echo "Set the FQDN which will be used to access the soctools services (the DNS record should already be in place)"
	read -p "[$(hostname -f)]: " soctoolsproxy
	soctoolsproxy=${soctoolsproxy:-$(hostname -f)}
	echo
	echo "Name of your organization (it will be used as organization name in MISP, The Hive and Cortex)"
	read -p 'organization: ' organization
		if [ -z $organization ]; then
			echo "Error: Empty string for organization! exiting..."
			exit 1
		fi
	echo
	echo
	echo
	echo "Please provide the following parameters for the first SOCTools user, which will be created during the initialization with organization admin privileges (other user accounts can be created later via a web GUI):"
	echo "username  - Username of the user"
	echo "firstname - First name of the user"
	echo "lastname  - Last name of the user"
	echo "email     - Email of the user"
	#echo "DN       - Distinguished Name of the user, for user certificate"
	#echo "CN       - Common Name of the user, for user certificate"
	echo ""
	read -p "username: " username
	if [ -z "$username" ]; then
		echo "Error: Empty username! exiting..."
		exit 1
  fi
	read -p "firstname: " firstname
	read -p "lastname: " lastname
	read -p "email: " email
	#read -p "Enter CN for Certificate [${firstname}${lastname}]: " CN
	#CN=${CN:-${firstname}${lastname}}
	CN="$username"
	DN="CN=${CN}"
	echo
	echo
	echo "Please provide the configuration for sending emails via SMTP (used by user management web GUI to send emails to users)."
	echo "You can leave it empty if you are just testing and don't plan to add more users."
	echo "  host     - Hostname of the SMTP server"
	echo "  sender   - Email address used as the sender (e.g. 'soctools@${soctoolsproxy}')"
	echo "  username - Authenticate using this username (leave empty to send emails without authentication)"
	echo "  password - Authenticate using this password (WARNING: Password is stored in clear in a configuration file)"
	echo
	read -p "host []: " smtp_host
	read -p "sender [soctools@${soctoolsproxy}]: " smtp_sender
	if [ -z "$smtp_sender" ]; then
		smtp_sender=soctools@${soctoolsproxy}
	fi
	read -p "username []: " smtp_username
	read -p "password []: " smtp_password
	echo
	echo
	echo "Please check the gathered variables and type 'yes' if everything is correct:"
	echo "soctoolsproxy:  $soctoolsproxy"
	echo "organization:   $organization"
	echo "user:"
	echo "  firstname:  $firstname"
	echo "  lastname:   $lastname"
	echo "  username:   $username"
	echo "  email:      $email"
	echo "  DN:         $DN"
	echo "  CN:         $CN"
	echo "smtp config:"
	echo "  host:       $smtp_host"
	echo "  sender:     $smtp_sender"
	echo "  username:   $smtp_username"
	echo "  password:   $smtp_password"
	echo
	echo
	read -p "Correct? type 'yes' or 'no': " ANSWER
	if [ "$ANSWER" = "yes" ]; then
		if ! [ -f group_vars/all/variables.template ]; then
			echo "template file(group_vars/all/variables.template) does not exists! exiting ..."
			exit 1
		else
			cp -f group_vars/all/variables.template group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_TO_FQDN/${soctoolsproxy}/g" group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_ORG/${organization}/g" group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_SMTP_HOST/${smtp_host}/g" group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_SMTP_SENDER/${smtp_sender}/g" group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_SMTP_USERNAME/${smtp_username}/g" group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_SMTP_PASSWORD/${smtp_password}/g" group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_FIRST_NAME/${firstname}/" group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_LAST_NAME/${lastname}/" group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_USERNAME/${username}/" group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_EMAIL/${email}/" group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_DN/${DN}/" group_vars/all/variables.yml
			sed -i "s/CHANGE_ME_CN/${CN}/" group_vars/all/variables.yml
			echo
			echo
			echo "variables file generated (group_vars/all/variables.yml)"
			echo "We have configured for you the following config files: access.ips, group_vars/all/variables.yml and we have also generated HAProxy Access Control Lists in the following directory: roles/haproxy/files"
			echo ""
			echo "move to next command to deploy the soctools cluster."
			echo 'Thank You!'
		fi
	else
		echo "Exiting based of user input ..."
		exit 0
	fi
fi