#!/bin/bash
set -e

#
# #############################################################################
# ## Alladdin, the all-add-in web server                                     ##
# #############################################################################
#
# @author Laurent GAERTNER <garthh@bagsbug.net>
# @version $Revision$
# @modifiedby $Author$
# @lastmodified $Date$
#
# #############################################################################
# ## Post installation script                                                ##
# #############################################################################
#
# LICENSE:
# Alladdin is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# Alladdin is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

. /usr/share/debconf/confmodule

case $1 in

"configure")

## Informations basiques sur le serveur

db_get alladdin-base/server_uri
serverName="$RET"

db_get alladdin-base/server_admin
webmasterEmail="$RET"

## Demander le mot de passe root MySQL

db_input critical alladdin-base/mysql_root_passwd || true
db_go || true

db_get alladdin-base/mysql_root_passwd
passRootDB="$RET"

db_unregister alladdin-base/mysql_root_passwd

## Générer le mot de passe pour l'utilisateur Alladdin

alladdinPasswd=$(randomstring -l 12 -c dlu)

## Commande de connexion à MySQL en root
rootmySQL="mysql -u root -p$passRootDB -h localhost -P3306"

prevInstall=$($rootmySQL mysql -e "SELECT User FROM user WHERE User='alladdin';" -s -N | tail -1 )

if [ -z $prevInstall ] ; then
        prevInstall="rien"
fi

if [ $prevInstall = "alladdin" ] ; then
	## Mise à jour du mot de passe alladdin dans la base de données
	$rootmySQL -e "GRANT ALL PRIVILEGES ON *.* TO 'alladdin'@'localhost' IDENTIFIED BY '$alladdinPasswd' WITH GRANT OPTION"
	$rootmySQL -e "FLUSH PRIVILEGES" 
	## Eventuellement, si la version le nécessite, mise à jour de la base précédente
else
	## Création de la base Alladdin et de son utilisateur
	$rootmySQL -e "CREATE DATABASE alladdin DEFAULT CHARSET utf8"
	$rootmySQL -e "CREATE USER 'alladdin'@'localhost'"
	$rootmySQL -e "GRANT ALL PRIVILEGES ON *.* TO 'alladdin'@'localhost' IDENTIFIED BY '$alladdinPasswd' WITH GRANT OPTION"
	$rootmySQL -e "FLUSH PRIVILEGES"
	mysql -u alladdin -p$alladdinPasswd alladdin < /usr/share/alladdin/skel/base-ws.sql
fi

## Modification des fichiers de configuration de base

webPort="80"
webdavPort="443"

## Configuration de Alladdin (/etc/alladdin/alladin.conf)
sed -i "s/{{SERVER_NAME}}/$serverName/" /etc/alladdin/alladdin.conf
sed -i "s/{{SQL_PASS}}/$alladdinPasswd/" /etc/alladdin/alladdin.conf
sed -i "s/{{WEB_PORT}}/$webPort/" /etc/alladdin/alladdin.conf
sed -i "s/{{WEBDAV_PORT}}/$webdavPort/" /etc/alladdin/alladdin.conf

## Configuration du serveur (/etc/alladdin/sites/00-default)
sed -i "s/{{SERVER_NAME}}/$serverName/" /etc/alladdin/server/host
sed -i "s/{{WEBMASTER_EMAIL}}/$webmasterEmail/" /etc/alladdin/server/host
sed -i "s/{{WEB_PORT}}/$webPort/" /etc/alladdin/server/host
sed -i "s/{{WEBDAV_PORT}}/$webdavPort/" /etc/alladdin/server/host

## Configuration mod_auth_mysql (/etc/apache2/mods-available/auth_mysql.conf)
sed -i "s/{{SQL_PASS}}/$alladdinPasswd/" /etc/apache2/mods-available/auth_mysql.conf

## Configuration de l'accueil du serveur
echo "ScriptAlias / /usr/share/alladdin/cgi-bin/index" > /etc/alladdin/server/home

if [ $webdavPort = "443" ] ; then
	## Création d'un lien symbolique vers la config SSL
	ln -sf /etc/alladdin/server/ssl-alladdin /etc/alladdin/server/ssl
	
	## Création d'un certificat autosigné pour le serveur ?
		if [ ! -f /etc/alladdin/alladdin.crt ] ; then
		
        	# Détection du pays de l'utilisateur
        	pays=$(echo $LANG | sed 's/\(.*\)_\(.\{2\}\).\(.*\)/\2/')
        	if [ -z $pays ] ; then
           		pays=$(echo $LANG | sed 's/\(.\{2\}\).\(.*\)/\2/')
        	fi
        	
			echo -e "$pays\n.\n.\n.\n$serverName\n$webmasterEmail\n" | openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/alladdin/alladdin.crt -keyout /etc/alladdin/alladdin.key

		fi
fi

## Activation des modules apaches
ln -sf /etc/apache2/mods-available/auth_basic.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/auth_pam.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/auth_mysql.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/auth_sys_group.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/dav.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/dav_fs.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/cgi.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/mime.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/mime_magic.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/mod_chroot.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/php5.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/rewrite.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/ssl.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/headers.* /etc/apache2/mods-enabled
ln -sf /etc/apache2/mods-available/deflate.* /etc/apache2/mods-enabled

cp -R /usr/share/alladdin/skel/var/* /var
chown -R www-data:www-data /var/alladdin/www

## Arrêt des services Web

if [ -f /etc/init.d/apache2 ]
then
	invoke-rc.d apache2 stop
fi

## Archivage des fichiers de configuration avant installation d'Alladdin
## Uniquement si Alladdin n'a jamais été installé !

fichConf=/etc/apache2/apache2.conf

if [ -f $fichConf ]
then
	if [ ! -f $fichConf.alladdin-backup ]
	then
		cp $fichConf $fichConf.alladdin-backup
		echo "Fichier $fichConf (apache2.2-common) archivé..."
	fi
fi

fichConf=/etc/php5/apache2/php.ini

if [ -f $fichConf ]
then
	if [ ! -f $fichConf.alladdin-backup ]
	then
		cp $fichConf $fichConf.alladdin-backup
		echo "Fichier $fichConf (php) archivé..."
	fi
fi

fichConf=/etc/mysql/my.cnf

if [ -f $fichConf ]
then
	if [ ! -f $fichConf.alladdin-backup ]
	then
		cp $fichConf $fichConf.alladdin-backup
		echo "Fichier $fichConf (mysql) archivé..."
	fi
fi

## Application des nouveaux fichiers de configuration

rm -vf /etc/apache2/apache2.conf
mv -v /etc/apache2/apache2.conf.replace /etc/apache2/apache2.conf
rm -vf /etc/php5/apache2/php.ini
mv -v /etc/php5/apache2/php.ini.replace /etc/php5/apache2/php.ini
rm -rf /etc/mysql/my.cnf
mv -v /etc/mysql/my.cnf.replace /etc/mysql/my.cnf

## Démarrage des tâches programmées

cat /usr/share/alladdin/skel/head-cron > /tmp/crontab-alladdin
cat /usr/share/alladdin/skel/cron/* >> /tmp/crontab-alladdin
crontab /tmp/crontab-alladdin
rm /tmp/crontab-alladdin

## Décollage ! Vers l'infini et au delà !
## Fulguropoings !

invoke-rc.d apache2 start
invoke-rc.d mysql restart

db_stop
exit 0
;;

*)
db_stop
exit 0
;;

esac
exit 0;
