#!/bin/bash
# The scipt automates the proccess of creation of virtual hosts on Apache 2 web server
# NOTE:
# 1. The script requires root previleges
# 2. The script allowes .htaccess override by default
# 3. The v-host directory will be dedecated to user and group www-data
# 4. The .htaccess file will redirect to https

# @author Samuil Banti
# @copyright (C) 2017 - Samuil Banti
# @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html

# Configurations:
web_dir="/var/www/"
sites_available="/etc/apache2/sites-available/"
sites_enabled="/etc/apache2/sites-enabled"

# Request v-host name
echo "Enter the new virtual host name: "
read virtual_domain_name

# Validate the v-host name
if [ -d "${web_dir}${virtual_domain_name}" ]; then
	echo "Directory '${web_dir}${virtual_domain_name already}' exists!"
	exit
fi
if [ -f "${sites_available}${virtual_domain_name}.conf" ]; then
	echo "File '${sites_available}${virtual_domain_name}' already exists!"
	exit
fi

#Create v-host config file
echo "<VirtualHost *:80>" >> "${sites_available}${virtual_domain_name}.conf"
echo "DocumentRoot ${web_dir}${virtual_domain_name}/public" >> "${sites_available}${virtual_domain_name}.conf"
echo "ServerName ${virtual_domain_name}" >> "${sites_available}${virtual_domain_name}.conf"
echo "ServerAlias ${virtual_domain_name}" >> "${sites_available}${virtual_domain_name}.conf"
echo "    <Directory />" >> "${sites_available}${virtual_domain_name}.conf"
echo "        Options FollowSymLinks" >> "${sites_available}${virtual_domain_name}.conf"
echo "        AllowOverride All" >> "${sites_available}${virtual_domain_name}.conf"
echo "    </Directory>" >> "${sites_available}${virtual_domain_name}.conf"
echo "    <Directory ${web_dir}>" >> "${sites_available}${virtual_domain_name}.conf"
echo "        Options Indexes FollowSymLinks MultiViews" >> "${sites_available}${virtual_domain_name}.conf"
echo "        AllowOverride All" >> "${sites_available}${virtual_domain_name}.conf"
echo "        Order allow,deny" >> "${sites_available}${virtual_domain_name}.conf"
echo "        allow from all" >> "${sites_available}${virtual_domain_name}.conf"
echo "    </Directory>" >> "${sites_available}${virtual_domain_name}.conf"
echo "    LogLevel warn" >> "${sites_available}${virtual_domain_name}.conf"
echo "    CustomLog /var/log/apache2/${virtual_domain_name}_access.log combined" >> "${sites_available}${virtual_domain_name}.conf"
echo "    ErrorLog /var/log/apache2/${virtual_domain_name}_error.log" >> "${sites_available}${virtual_domain_name}.conf"
echo "</VirtualHost>" >> "${sites_available}${virtual_domain_name}.conf"

ln -s "${sites_available}${virtual_domain_name}.conf" "${sites_enabled}${virtual_domain_name}.conf"

# Create the root directory:
mkdir -m 777 "${web_dir}${virtual_domain_name}"
mkdir -m 777 "${web_dir}${virtual_domain_name}/public"
echo "Hello world" > "${web_dir}${virtual_domain_name}/public/index.php"

# Create .htaccess file
echo "RewriteEngine on" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "RewriteBase /" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "php_flag display_errors on" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "php_value error_reporting 7" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "#if the request is not secure" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "RewriteCond %{HTTPS} off" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "#redirect to the secure version" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "RewriteRule ^(.*)$ https://%1/$1 [R=301,L]" >> "${web_dir}${virtual_domain_name}/public/.htaccess"

# Enable th virtual host
a2ensite $virtual_domain_name

/etc/init.d/apache2 restart

echo "The script was executed. You may use to get a certificate (sudo certbot --apache)"
exit
