#!/bin/bash
USER_NAME="korodm"
USER_GROUP="korodm"
WWW_DIR="/home/korodm/Documents/sites/"
USER_REPO="korodm"
PASS_REPO="***"
REPO="bitbucket.org/"
SQL_PASS="***"

###################################################################################################################

# Проверка на права рута
if [ "${UID}" -ne 0 ]
then
    printf "Root:\t\t\t\t\t\033[0;31mнет\033[0m\n\nПриложение необходимо запустить от имени root!\n"
    exit
else
    printf "Root:\t\t\t\t\t\033[0;32mда\033[0m\n"
fi

# Проверка на наличие передаваемых параметров
if ! [ -n "${1}" ]
then
    printf "Параметры:\t\t\t\t\033[0;31mno\033[0m\n\nПриложение необходимо использовать так:\n%s site_name\n" ${0}
    exit
else
    printf "Параметры:\t\t\t\t\033[0;32m%s\033[0m\n" ${1}
    SITE=${1}
fi

# Проверка на существование рабочего каталога
if ! [ -d "${WWW_DIR}" ]
then
    printf "Рабочий каталог:\t\t\t\033[0;31mне существует\033[0m\n\nИзмените конфцигурацию скрипта.\n"
    exit
else
    printf "Рабочий каталог:\t\t\t\033[0;32m%s\033[0m\n" ${WWW_DIR}
fi

# Проверка на существование каталога для сайта в рабочем каталоге
if [ -d "${WWW_DIR}${SITE}" ]
then
    printf "Каталог для сайта:\t\t\t\033[0;31mуже существует\033[0m\n\nИзмените назваение сайта.\n"
    exit
else
    printf "Каталог для сайта:\t\t\t\033[0;32m%s%s\033[0m\n" ${WWW_DIR} ${SITE}
fi

# Проверка существования репозитария
REPO_TRUE=`curl "https://${REPO}${USER_REPO}/${SITE}" 2> /dev/null | grep -c "Bitbucket_404.png"`
if [[ "${REPO_TRUE}" -eq 1 ]]
then
    printf "Репозитарий:\t\t\t\t\033[0;31mне существует\033[0m\n\nСоздайте репозитарий.\n"
    exit
else
    printf "Репозитарий:\t\t\t\t\033[0;32mhttps://%s%s/%s\033[0m\n" ${REPO} ${USER_REPO} ${SITE}
fi

# Клонируем репозиторий
cd ${WWW_DIR}
hg clone "https://${USER_REPO}:${PASS_REPO}@${REPO}${USER_REPO}/${SITE}" > /dev/null
printf "Клонирование репозитария:\t\t\\033[0;32mзавершено\033[0m\n"
mkdir -p ${WWW_DIR}${SITE}/public_html
chown -R ${USER_NAME}:${USER_GROUP} ${WWW_DIR}${SITE}
printf "Локальная папка:\t\t\t\033[0;32m%s%s/public_html\033[0m\n" ${WWW_DIR} ${SITE}

# Создание виртуального хоста
printf "<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName ${SITE}
DocumentRoot ${WWW_DIR}${SITE}/public_html

<Directory />
Options FollowSymLinks
AllowOverride all
</Directory>

<Directory ${WWW_DIR}${SITE}/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory \"/usr/lib/cgi-bin\">
AllowOverride all
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ \"/usr/share/doc/\"

<Directory \"/usr/share/doc/\">
Options Indexes MultiViews FollowSymLinks
AllowOverride all
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>\n" > /etc/apache2/sites-available/${SITE}

printf "Файл конфигурации Apache:\t\t\033[0;32mсоздан\033[0m\n"

# Активация сайта
a2ensite ${SITE} > /dev/nul
printf "Сайт \033[0;32m%s:\t\t\t\tактивирован\033[0m\n" ${SITE}

# Поиск свободного ip адреса
num=1
LIMIT=255

while [ "${num}" -lt "${LIMIT}" ]
do
    if [ `grep -c 127.0.1.${num} /etc/hosts` -ne 1 ]
    then
        echo "127.0.1.${num} ${SITE}" >> /etc/hosts
        break
    fi
    num=$((num+1))
done

printf "Поиск свободного ip адреса:\t\t\033[0;32m127.0.1.%s\033[0m\n" ${num}

# Перезагрузка Apache
/etc/init.d/apache2 reload > /dev/null
printf "Apache:\t\t\t\t\t\033[0;32mперезагружен\033[0m\n"

# Создание index.php
printf "<h1>Сайт %s работает!</h1>
<h2>%s%s/public_html/index.php</h2>
<?php phpinfo(); ?>" ${SITE} ${WWW_DIR} ${SITE} > ${WWW_DIR}${SITE}/public_html/index.php

chown ${USER_NAME}:${USER_GROUP} ${WWW_DIR}${SITE}/public_html/index.php

printf "Индексный файл:\t\t\t\t\033[0;32mhttp://%s/index.php\033[0m\n" ${SITE}

# Создание базы данных
mysql -uroot -p${SQL_PASS} --execute="create database ${SITE};"
mysql -uroot -p${SQL_PASS} --execute="GRANT ALL PRIVILEGES ON ${SITE}.* TO ${SITE}@localhost IDENTIFIED by '${SITE}' WITH GRANT OPTION;"
printf "База данных:\t\t\t\t\033[0;32m%s\033[0m\n" ${SITE}
printf "Имя пользователя:\t\t\t\033[0;32m%s\033[0m\n" ${SITE}
printf "Пароль:\t\t\t\t\t\033[0;32m%s\033[0m\n" ${SITE}

printf "\n\033[0;32mСайт готов!\033[0m\n\n"

exit