#!/usr/bin/perl

do '../web-lib.pl';

$sendmail="/usr/sbin/sendmail -t";

$|=1;
&init_config();
%access = &get_module_acl();

&ReadParse();
use ovhmlib;

&error ("Le module de gestion des utilisateurs n'est pas utilisable") unless &foreign_check("useradmin");
&foreign_require("useradmin","user-lib.pl");

&error ("Le module de gestion des quotas n'est pas utilisable") unless &foreign_check("quota");
&foreign_require("quota","quota-lib.pl");

&error ("Le module de gestion de mysql n'est pas utilisable") unless &foreign_check("mysql");
&foreign_require("mysql","mysql-lib.pl");

$serveur = &get_system_hostname();

$nom=$in{nom};
$mdp1=$in{mdp1};
$mdp2=$in{mdp2};
$quotas=$in{quotas};
$email=$in{email};
$telnet=$in{telnet};
$mysql=$in{mysql};
$verbeux=$in{verbeux};
$ip=ovhmlib::get_ip();

# les paramètres sont bien la ?
&error ("Tous les champs ne sont pas remplis") if (!$nom and !$mdp1 and !$mdp2 and !$quotas and !$telnet and !$mysql);

# vérification nom de domaine
&error ("Domaine non valide") if ($nom !~ /^[0-9a-zA-Z]+(-[0-9a-zA-Z]+)*(\.[0-9a-zA-Z]+)+$/);

use DB_File;
tie %LIST,'DB_File',"/etc/ovhm.db";

# déjà installé ?
&error ("Ce domaine à déjà été installé") if ($LIST{$nom});

# utilisé comme alias ?
foreach my $key (sort keys %LIST){
	my $val = $LIST{$key};
	if ($val eq "$nom") {
		$temp = $key;
		$temp =~ s/_alias_$nom//;
		&error ("Ce domaine ($val) est utilisé en alias de : $temp");
	}
}

# vérfication mot de passe
&error ("Les 2 mots de passe ne sont pas identiques") if ($mdp1 ne $mdp2);
&error ("Le mot de passe est trop court<br>Minimum 5 caractères") if ($mdp1 !~ /.{5}/);


# vérification quotas
&error ("Quota non valide<br>Veuillez indiquer une valeur en Mo") if ($quotas !~ /^\d+$/);


if ($verbeux eq "oui") {
	&header("", "", "Configuration pour le domaine : $nom ($ip)", 0, 0, undef,"Written by<BR><A HREF=mailto:hardware\@ovh.net>OVH</A><BR><A HREF=http://sd.ovh.fr>http://sd.ovh.fr</A>");
	print "<br>Détermination du login à partir du nom de domaine : ";
}

# Créer un login à partir du domaine
$login = $nom;

# on vire le .com (ou autre extension), les caractères bizarres et on réduit à 8 caractères.
$login =~ s/\..*$//;
$login =~ s/\W//g;
$login =~ s/_//g;
$login =~ s/(.{8}).*/$1/g;

# si le premier caractère est un chiffre, on le remplace par un a
if ($login =~ /^\d/) {
        $login =~ s/^\d/a/;
}

local @list = &foreign_call("useradmin","list_users");
$ok=0;
while(!$ok) {
	$ok=1;
	foreach $truc (@list) {
        	if ($login eq $truc->{'user'}) {
	                $ajouter=`head -c 4 /dev/urandom | mmencode | sed "s/[^A-Za-z0-9]//g" | head -c 1`;
			$login .= $ajouter;
			$ok=0;
			last;
		}
	}
}

print "$login" if ($verbeux eq "oui");

if ($telnet eq "oui") {
	$shell = "/bin/bash";
} else {
	$shell = "/bin/false";
}

# on crée l'utilisateur
# rmq: c'est plus rapide avec adduser qu'avec les fonction de webmin :)

print "<br>Création du login, shell = $shell" if ($verbeux eq "oui");

$salt=`head -c 10 /dev/urandom | mmencode | sed "s/[^A-Za-z0-9]//g" | head -c 2`;
$cpass=crypt($mdp1,$salt);
system("/usr/sbin/adduser -c \"$login\" -m -k /usr/libexec/webmin/ovhm/skel  -s $shell -g users -p $cpass $login\n");

$LIST{$nom}=$login;

print "<br>Changement des quotas : $quotas" if ($verbeux eq "oui");

# on converti les quotas en blocks.
$quotas *= 1000;
# on définit les quotas
&foreign_call("quota","edit_user_quota","$login","/home",0,$quotas,0,0);

# bind
ovhmlib::bind_ajouter($nom, $verbeux);

# apache
print "<br>Configuration du virtual host dans apache : /usr/local/apache/conf/httpd.conf" if ($verbeux eq "oui");

open HTTPDCONF, ">> /usr/local/apache/conf/httpd.conf";
print HTTPDCONF <<EOF;

<VirtualHost $ip>
ServerAdmin webmaster\@$nom
DocumentRoot /home/$login/www
User $login
Group users
ServerName www.$nom
ServerAlias $nom
CustomLog logs/$login-access_log combined
ScriptAlias /cgi-bin/ /home/$login/cgi-bin/
</VirtualHost>

EOF
close HTTPDCONF;

# qmail

$cmd = "/home/vpopmail/bin/vadddomain $nom";
print "<br>Création du compte email : $cmd xxxxxxx" if ($verbeux eq "oui");
system ("$cmd $mdp1");

#fichier

print "<br>Nettoyage du répertoire /home/$login (chmod 0705)" if ($verbeux eq "oui");

system ("mkdir /home/$login/www/stats");
system ("chmod 705 -R /home/$login");

# mysql
if ($mysql eq "oui") {
	print "<br>Création de la base sql" if ($verbeux eq "oui");

	foreign_call("mysql","execute_sql_logged","mysql", "create database $login");
        foreign_call("mysql","execute_sql_logged","mysql", "GRANT ALL PRIVILEGES ON $login.* to $login\@localhost identified by '$mdp1'");
        foreign_call("mysql","execute_sql_logged","mysql", "GRANT ALL PRIVILEGES ON $login.* to $login\@$serveur identified by '$mdp1'");
	
	# phpmyadmin
	print "<br>Configuration de phpmyadmin" if ($verbeux eq "oui");

	`cd /home/$login/www/; tar xvfz /usr/libexec/webmin/ovhm/phpMyAdmin-2.2.4-php.tar.gz`;
	print `mv -f /home/$login/www/phpMyAdmin-2.2.4 /home/$login/www/phpmyadmin`;
	open CONFIG, "/home/$login/www/phpmyadmin/config.inc.php";
	@config = <CONFIG>;
	close CONFIG;
	open CONFIG, ">/home/$login/www/phpmyadmin/config.inc.php";
	foreach $c (@config) {
		$c =~ s/^(\$cfgServers\[1\]\[\'user\'\]\s+= )'root';/$1'$login\';/g;
		$c =~ s/^(\$cfgServers\[1\]\[\'password\'\]\s+= )'';/$1\'$mdp1\';/g;
		$c =~ s/^(\$cfgServers\[1\]\[\'only_db\'\]\s+= )'';/$1\'$login\';/g;
		print CONFIG $c;
	}
	close CONFIG;
}

print "<br>Mise en place d'un .htacess pour limiter l'accès au répertoire de statistiques /home/$login/www/stats/" if ($verbeux eq "oui");

open HTACCESS, ">/home/$login/www/stats/.htaccess";
print HTACCESS <<EOF;
AuthUserFile /home/$login/www/stats/.htpasswd
AuthGroupFile /dev/null
AuthName "Statistiques"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>
EOF
close HTACCESS;

open HTPASS, ">/home/$login/www/stats/.htpasswd";
print HTPASS "$login:$cpass\n";
close HTPASS;

if ($mysql eq "oui") {
	print "<br>Mise en place d'un .htacess pour limiter l'accès au répertoire de phpmyadmin /home/$login/www/phpmyadmin/" if ($verbeux eq "oui");
	system "cp /home/$login/www/stats/.htpasswd /home/$login/www/phpmyadmin/";
	open HTACCESS, ">/home/$login/www/phpmyadmin/.htaccess";
print HTACCESS <<EOF;
AuthUserFile /home/$login/www/phpmyadmin/.htpasswd
AuthGroupFile /dev/null
AuthName "Statistiques"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>
EOF
	close HTACCESS;
}

system ("chown $login.users -R /home/$login");

# logs
print "<br>Configuration de webalizer pour le domaine : /etc/webalizer.conf.$login" if ($verbeux eq "oui");

open WEBALIZER, "> /etc/webalizer.conf.$login";
print WEBALIZER <<EOF;
LogFile       /usr/local/apache/logs/$login-access_log
OutputDir      /home/$login/www/stats

Incremental     yes

HostName       $nom

PageType        htm*
PageType        cgi
PageType        phtml
PageType        php
PageType        php3
PageType        pl
PageType        shtml


HideURL         *.gif
HideURL         *.GIF
HideURL         *.jpg
HideURL         *.JPG
HideURL         *.png
HideURL         *.PNG
HideURL         *.ra


SearchEngine    yahoo.com       p=
SearchEngine    altavista.com   q=
SearchEngine    google.com      q=
SearchEngine    eureka.com      q=
SearchEngine    lycos.com       query=
SearchEngine    hotbot.com      MT=
SearchEngine    msn.com         MT=
SearchEngine    infoseek.com    qt=
SearchEngine    webcrawler      searchText=
SearchEngine    excite          search=
SearchEngine    netscape.com    search=
SearchEngine    mamma.com       query=
SearchEngine    alltheweb.com   query=
SearchEngine    northernlight.com  qr=

EOF
close WEBALIZER;

print "<br>Configuration de logrotate<p>" if ($verbeux eq "oui");

open LOGROTATE, ">/etc/cron.daily/0logrotate-webalizer";
print LOGROTATE "#!/bin/sh\n\n";
while (($key,$val) = each %LIST) {
	print LOGROTATE "sudo -u $val /usr/local/bin/webalizer -c /etc/webalizer.conf.$val\n";
}
print LOGROTATE "\n/usr/sbin/logrotate /etc/logrotate.conf\n";
close LOGROTATE;
system("chmod +x /etc/cron.daily/0logrotate-webalizer");


if ($email && open (SENDMAIL,"| $sendmail")) 
	{
print SENDMAIL <<SOM;
To: $email
Subject:  [OVHm] $nom Virtual Host créé

Domaine: $nom
Mot de passe: $mdp1
Quota: $quotas
Email: $email
Telnet: $telnet
MySQL: $mysql
SOM
	}

untie(%LIST);

&footer("/ovhm", $text{'index'}) if ($verbeux eq "oui");
&redirect("/ovhm/modifier.cgi?domaine=$nom") if ($verbeux ne "oui");
