#!/usr/bin/php
<?php

/// init
global $ini;
global $node;

global $NOLOG;
$NOLOG = true;

global $ignore_live;
$ignore_live = true;

require(dirname(__FILE__)."/../../include/functions.php");
init();

//count number of servers from ini
$num_servers=count($ini['nodeip']);



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

function createpassword($length=12) {

	//min.length=12
	if ($length<12) { $length=12; }

	$set_lower='abcdefghijkmnopqrstuvwxyz';
	$set_upper='ABCDEFGHJKLMNOPQRSTUVWXYZ';
	$set_num='234567890';
	$set_chr='-.^';

	$set_all=str_shuffle($set_lower.$set_upper.$set_num.$set_chr);
	$set_alnum=str_shuffle($set_lower.$set_upper.$set_num);

	$mid =$set_num[mt_rand(0,strlen($set_num)-1)];
	$mid.=$set_upper[mt_rand(0,strlen($set_upper)-1)];
	$mid.=$set_lower[mt_rand(0,strlen($set_lower)-1)];

	$i = 0;
	while ($i < ($length-5))
	{
		$mid .= $set_all[mt_rand(0,strlen($set_all)-1)];
		$i++;
	}

	$password =$set_alnum[mt_rand(0,strlen($set_alnum)-1)];
	$password.=str_shuffle($mid);
	$password.=$set_alnum[mt_rand(0,strlen($set_alnum)-1)];

	return ($password);
}

function DBmultiquery($query)
{
	global $MYCONN;
	$res=$MYCONN->multi_query($query);
	if ($MYCONN->errno)
	{
		panic("DB error:".$MYCONN->error);
	}
	while ($MYCONN->next_result())
	{
		if (!($MYCONN->more_results()))
		{
			break;
		}
	}
}

function DBcheck($cquery)
{
	$res=DBquery($cquery);
	if ($res->num_rows == 0)
	{
		return false;
	}
	else
	{
		return true;
	}
}

function add_var($key, $def, $allnodes=true)
{
	if ($allnodes==true)
	{
		global $num_servers;
		$ns=$num_servers;
	}
	else
	{
		$ns=1;
	}
	for ($nn=1; $nn<=$ns; $nn++) {
		$res=DBquery("SELECT `key` FROM `var` WHERE `key`='$key' AND `node`='$nn';");
		if ($res->num_rows==0) {
			echo "Adding var: $key\n";
			DBquery("INSERT INTO `var` SET `key`='$key', `node`='$nn', `value`='$def', `lock`=0, `modified`=NOW();");
		}
	}
}

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

echo "Checking sysadmin database...\n";

$dom_parts=explode('.', $ini['global']['domain']);
$first_client=$dom_parts[0];

######################################################################################
# Init table structure
# from mysql dump

if (!(DBcheck("SHOW TABLES LIKE 'var';")))
{
	echo "Initializing sysadmin tables...\n";

	$init_sql_file=dirname(__FILE__)."/sql/sys_admin.sql";
	$init_sql=file_get_contents($init_sql_file);

	DBmultiquery($init_sql);
}

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

# check and add vars
add_var("serial",1,false);
add_var("date","20000101",false);
add_var("bind_update",0,false);

add_var("apache_update",0,true);
add_var("rights_update",0,true);
add_var("ssl_update",0,true);
add_var("deploy",0,true);

add_var("mysql_update",0,true);
add_var("opendkim_update",0,true);


# check and add default values

######################################################################################
# Add first client

if (!(DBcheck("SELECT `id` FROM `client`;")))
{
	echo "Adding first client ($first_client)\n";
	$first_client_pass=createpassword(16);
	DBquery("INSERT INTO `client` SET
		`name`='".$first_client."',
		`password`='".$first_client_pass."',
		`old_password`=NULL,
		`email`='".$ini['global']['email']."',
		`category`=5,
		`node`=1,
		`quota`=20000,
		`mailquota`=100000,
		`active`=1,
		`suspend`=0,
		`migrate`=0
		;");
	unset($first_client_pass);
}

######################################################################################
# Add first domain

if (!(DBcheck("SELECT `id` FROM `domain`;")))
{
	echo "Adding first domain (".$ini['global']['domain'].")\n";
	DBquery("INSERT INTO `domain` SET
		`clientid`=1,
		`name`='".$ini['global']['domain']."',
		`dns`=1,
		`transport`=NULL,
		`ip`=NULL,
		`mx`=NULL,
		`spf`=NULL,
		`active`=1
		;");
}

######################################################################################
# Add null domain (technical domain for /dev/null)

if (!(DBcheck("SELECT `id` FROM `domain` WHERE `name`='null.null';")))
{
	echo "Adding /dev/null technical domain (null.null)\n";
	DBquery("INSERT INTO `domain` SET
		`clientid`=1,
		`name`='null.null',
		`dns`=0,
		`transport`='nulltransport',
		`ip`=NULL,
		`mx`=NULL,
		`spf`=NULL,
		`active`=1
		;");
}


######################################################################################
# Add first mysql database

if (!(DBcheck("SELECT `id` FROM `mysql`;")))
{
	echo "Adding first mysql database (0001_test)\n";
	$first_sql_pass=createpassword(16);
	DBquery("INSERT INTO `mysql` SET
		`clientid`=1,
		`name`='test',
		`password`='".$first_sql_pass."',
		`active`=1
		;");
	unset($first_sql_pass);
}
######################################################################################
# Add technical mail aliases

if (!(DBcheck("SELECT `alias` FROM `mail_aliases` WHERE `alias`='root' AND `domainid` IS NULL AND `hostid` IS NULL;")))
{
	echo "Adding mail alias root@* -> admin@3gteam.hu\n";
	DBquery("INSERT INTO `mail_aliases` SET
		`domainid`=NULL,
		`hostid`=NULL,
		`alias`='root',
		`goto`='admin@3gteam.hu',
		`active`=1
		;");
}

if (!(DBcheck("SELECT `alias` FROM `mail_aliases` WHERE `alias`='noreply' AND `domainid` IS NULL AND `hostid` IS NULL;")))
{
	echo "Adding mail alias noreply@* -> null@null.null\n";
	DBquery("INSERT INTO `mail_aliases` SET
		`domainid`=NULL,
		`hostid`=NULL,
		`alias`='noreply',
		`goto`='null@null.null',
		`active`=1
		;");
}

if (!(DBcheck("SELECT `alias` FROM `mail_aliases` WHERE `alias`='postmaster' AND `domainid` IS NULL AND `hostid` IS NULL;")))
{
	echo "Adding mail alias postmaster@* -> root@".$ini['global']['domain']."\n";
	DBquery("INSERT INTO `mail_aliases` SET
		`domainid`=NULL,
		`hostid`=NULL,
		`alias`='postmaster',
		`goto`='root@".$ini['global']['domain']."',
		`active`=1
		;");
}


######################################################################################
# Add technical mail aliases for services

if (!(DBcheck("SELECT `alias` FROM `mail_aliases` WHERE `alias`='git' AND `domainid`=1;")))
{
	echo "Adding mail alias git@".$ini['global']['domain']."* -> root@".$ini['global']['domain']."\n";
	DBquery("INSERT INTO `mail_aliases` SET
		`domainid`=1,
		`hostid`=NULL,
		`alias`='git',
		`goto`='root@".$ini['global']['domain']."',
		`active`=1
		;");
}

if (!(DBcheck("SELECT `alias` FROM `mail_aliases` WHERE `alias`='sysadmin' AND `domainid`=1;")))
{
	echo "Adding mail alias sysadmin@".$ini['global']['domain']."* -> root@".$ini['global']['domain']."\n";
	DBquery("INSERT INTO `mail_aliases` SET
		`domainid`=1,
		`hostid`=NULL,
		`alias`='sysadmin',
		`goto`='root@".$ini['global']['domain']."',
		`active`=1
		;");
}

######################################################################################
# Add admins

# For now, we don't add admin user for the server owner

######################################################################################
# Add admin email

if (!(DBcheck("SELECT `id` FROM `mail_users` WHERE `name`='admin' AND `domainid`=1;")))
{
	echo "Adding admin e-mail (admin@".$ini['global']['domain'].")\n";
	$mail_a_pass=createpassword(16);
	DBquery("INSERT INTO `mail_users` SET
		`name`='admin',
		`domainid`=1,
		`hostid`=NULL,
		`password`='".$mail_a_pass."',
		`quota`=2048,
		`active`=1
		;");
	unset($mail_a_pass);
}

echo "Done.\n";
