SQL y expresiones regulares por Pablo Sarria Pérez, Open6Hosting
';
//* Database password shall not be empty
//if($this->dataRecord['database_password'] == '') $app->tform->errorMessage .= $app->tform->wordbook["database_password_error_empty"].'
';
//* Get the database name and database user prefix
$app->uses('getconf,tools_sites');
$global_config = $app->getconf->get_global_config('sites');
$dbuser_prefix = $app->tools_sites->replacePrefix($global_config['dbuser_prefix'], $this->dataRecord);
$ftpuser_prefix = $app->tools_sites->replacePrefix($global_config['ftpuser_prefix'], $this->dataRecord);
$this->dataRecord['username_prefix'] = $ftpuser_prefix;
$this->dataRecord['database_user_prefix'] = $dbuser_prefix;
$valor2 = $this->dataRecord['database_user_prefix'] = $dbuser_prefix;
$this->valor_prefix = $this->dataRecord['database_user_prefix'] = $dbuser_prefix;
$this->valor_prefix_ftp = $this->dataRecord['username_prefix'] = $ftpuser_prefix;
//$this->dataRecord['database_user'] = substr($dbuser_prefix . $this->dataRecord['database_user'], 0, 16);
//$valor1 = $this->dataRecord['database_user'];
if(strlen($dbuser_prefix . $this->dataRecord['database_user']) > 16)
$app->tform->errorMessage .= str_replace('{user}', htmlentities($dbuser_prefix . $this->dataRecord['database_user'], ENT_QUOTES, 'UTF-8'),
$app->tform->wordbook["database_user_error_len"]).'
';
//echo('Tratando ' . '
' . 'Mas ' . $valor2 . '
' .
// $this->valor_prefix_ftp . '
');
//* Check database user against blacklist
$dbuser_blacklist = array($conf['db_user'], 'mysql', 'root');
if(is_array($dbuser_blacklist) && in_array($dbuser_prefix . $this->dataRecord['database_user'], $dbuser_blacklist)) {
$app->tform->errorMessage .= $app->lng('Database user not allowed.').'
';
}
/* restrict the names */
/* crop user names if they are too long -> mysql: user: 16 chars / db: 64 chars */
if ($app->tform->errorMessage == ''){
$this->dataRecord['database_user'] = substr($dbuser_prefix . $this->dataRecord['database_user'], 0, 16);
}
//echo('Ultima variable ' . '
');
$this->dataRecord['server_id'] = 0; // we need this on all servers
/* prepare password for MongoDB */
//$this->dataRecord['database_password_mongo'] = $this->dataRecord['database_user'].":mongo:".$this->dataRecord['database_password'];
//parent::onBeforeInsert();
}
public $dominio;
public $subdominio;
public $es_subdominio = false;
public $subdom_error = false;
public $no_ip = false;
//Campos para PDF
public $usuario_db_txt;
public $nombre_db_txt;
public $pass_db_txt;
public $usuario_ftp_txt;
public $pass_ftp_txt;
public $nombre_user_ftp;
function generaNombreFTP(){
global $app, $conf, $interfaceConf;
//* Database username shall not be empty
//if($this->dataRecord['database_user'] == '') $app->tform->errorMessage .= $app->tform->wordbook["database_user_error_empty"].'
';
//* Database password shall not be empty
//if($this->dataRecord['database_password'] == '') $app->tform->errorMessage .= $app->tform->wordbook["database_password_error_empty"].'
';
//* Get the database name and database user prefix
$app->uses('getconf,tools_sites');
$global_config = $app->getconf->get_global_config('sites');
$dbuser_prefix = $app->tools_sites->replacePrefix($global_config['dbuser_prefix'], $this->dataRecord);
$dbuser_prefix_valor = $app->tpl->setVar("database_name", $app->tools_sites->removePrefix($this->dataRecord['database_name'], $this->dataRecord['database_name_prefix'], $dbname_prefix));
//echo ('El prefix de los cohone ' . $dbuser_prefix);
$this->dataRecord['database_user_prefix'] = $dbuser_prefix_valor;
//echo ('PreFIX ' . '{user}' . str_replace('{user}', htmlentities($dbuser_prefix . $this->dataRecord['database_user'], ENT_QUOTES, 'UTF-8')));
if(strlen($dbuser_prefix . $this->dataRecord['database_user']) > 16)
$app->tform->errorMessage .= str_replace('{user}', htmlentities($dbuser_prefix . $this->dataRecord['database_user'], ENT_QUOTES, 'UTF-8'),
$app->tform->wordbook["database_user_error_len"]).'
';
//* Check database user against blacklist
$dbuser_blacklist = array($conf['db_user'], 'mysql', 'root');
if(is_array($dbuser_blacklist) && in_array($dbuser_prefix . $this->dataRecord['database_user'], $dbuser_blacklist)) {
$app->tform->errorMessage .= $app->lng('Database user not allowed.').'
';
}
/* restrict the names */
/* crop user names if they are too long -> mysql: user: 16 chars / db: 64 chars */
if ($app->tform->errorMessage == ''){
$this->dataRecord['database_user'] = substr($dbuser_prefix . $this->dataRecord['database_user'], 0, 16);
}
$this->dataRecord['server_id'] = 0; // we need this on all servers
$this->tratarVariablesHTML();
//echo ('PreFIX Valor ' . $dbuser_prefix_valor);
//Cadena de caractares para construir las nombre.
$cadena = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ23456789";
//$cadSpeciales = "!@#_";
//Obtengo la longitud de las cadenas
$longitudCadena=strlen($cadena);
//$longSpeciales = strlen($cadSpeciales);
//Variable para la nombre
$nombre = "";
//Longitud para la nombre
$longitudNombre=8;
//Creo la nombre
for($i=1 ; $i<=$longitudNombre ; $i++){
//Número aleatorio entre 0 y la longitud de la cadena de caracteres-1
$pos=rand(0,$longitudCadena-1);
//Formo la nombre en cada iteraccion del bucle, añadiendo a la cadena $nombre
//la letra correspondiente a la posicion $pos en la cadena de caracteres definida.
$nombre .= substr($cadena,$pos,1);
}
return $nombre;//$this->valor_prefix_ftp;
}
function generaPass(){
//Cadena de caractares para construir las password.
$cadena = "abcdefghijklmnopqrstuvwxyz!@#_ABCDEFGHIJKLMNOPQRSTUVWXYZ23456789";
$cadSpeciales = "!@#_";
//Obtengo la longitud de las cadenas
$longitudCadena=strlen($cadena);
$longSpeciales = strlen($cadSpeciales);
//Variable para la password
$pass = "";
//Longitud para la password
$longitudPass=13;
//Creo la password
for($i=1 ; $i<=$longitudPass ; $i++){
//Número aleatorio entre 0 y la longitud de la cadena de caracteres-1
$pos=rand(0,$longitudCadena-1);
//Formo la password en cada iteraccion del bucle, añadiendo a la cadena $pass
//la letra correspondiente a la posicion $pos en la cadena de caracteres definida.
$pass .= substr($cadena,$pos,1);
//Añado algún caracter especial en los últimos cuatro caracteres
for($i2=13;$i2<=$i; $i2++){
$poSpecial=rand(0,$longSpeciales-1);
$pass .= substr($cadSpeciales, $poSpecial, 1);
}
}
return $pass;
}
function generaNombreBD(){
global $app, $conf, $interfaceConf;
//* Database username shall not be empty
//if($this->dataRecord['database_user'] == '') $app->tform->errorMessage .= $app->tform->wordbook["database_user_error_empty"].'
';
//* Database password shall not be empty
//if($this->dataRecord['database_password'] == '') $app->tform->errorMessage .= $app->tform->wordbook["database_password_error_empty"].'
';
//* Get the database name and database user prefix
$app->uses('getconf,tools_sites');
$global_config = $app->getconf->get_global_config('sites');
$dbuser_prefix = $app->tools_sites->replacePrefix($global_config['dbuser_prefix'], $this->dataRecord);
$dbuser_prefix_valor = $app->tpl->setVar("database_name", $app->tools_sites->removePrefix($this->dataRecord['database_name'], $this->dataRecord['database_name_prefix'], $dbname_prefix));
//echo ('El prefix de los cohone ' . $dbuser_prefix);
$this->dataRecord['database_user_prefix'] = $dbuser_prefix_valor;
//echo ('PreFIX ' . '{user}' . str_replace('{user}', htmlentities($dbuser_prefix . $this->dataRecord['database_user'], ENT_QUOTES, 'UTF-8')));
if(strlen($dbuser_prefix . $this->dataRecord['database_user']) > 16)
$app->tform->errorMessage .= str_replace('{user}', htmlentities($dbuser_prefix . $this->dataRecord['database_user'], ENT_QUOTES, 'UTF-8'),
$app->tform->wordbook["database_user_error_len"]).'
';
//* Check database user against blacklist
$dbuser_blacklist = array($conf['db_user'], 'mysql', 'root');
if(is_array($dbuser_blacklist) && in_array($dbuser_prefix . $this->dataRecord['database_user'], $dbuser_blacklist)) {
$app->tform->errorMessage .= $app->lng('Database user not allowed.').'
';
}
/* restrict the names */
/* crop user names if they are too long -> mysql: user: 16 chars / db: 64 chars */
if ($app->tform->errorMessage == ''){
$this->dataRecord['database_user'] = substr($dbuser_prefix . $this->dataRecord['database_user'], 0, 16);
}
$this->dataRecord['server_id'] = 0; // we need this on all servers
$this->tratarVariablesHTML();
//echo ('PreFIX Valor ' . $dbuser_prefix_valor);
//Cadena de caractares para construir las nombre.
$cadena = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ23456789";
//$cadSpeciales = "!@#_";
//Obtengo la longitud de las cadenas
$longitudCadena=strlen($cadena);
//$longSpeciales = strlen($cadSpeciales);
//Variable para la nombre
$nombre = "";
//Longitud para la nombre
$longitudNombre=8;
//Creo la nombre
for($i=1 ; $i<=$longitudNombre ; $i++){
//Número aleatorio entre 0 y la longitud de la cadena de caracteres-1
$pos=rand(0,$longitudCadena-1);
//Formo la nombre en cada iteraccion del bucle, añadiendo a la cadena $nombre
//la letra correspondiente a la posicion $pos en la cadena de caracteres definida.
$nombre .= substr($cadena,$pos,1);
}
return $this->valor_prefix . $nombre;
}
/*function comprobarPass($claveGenerada){
//compruebo que el tamaño del string sea válido.
if (strlen($claveGenerada)<3 || strlen($claveGenerada)>20){
echo $claveGenerada . " no es válida0
";
return false;
}
//compruebo que los caracteres sean los permitidos
$alphachars = "abcdefghijkmnopqrstuvwxyz";
$upperchars = "ABCDEFGHJKLMNPQRSTUVWXYZ";
$numchars = "23456789";
$specialchars = "!@#_";
//$permitidos = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
if (ereg("^[a-zA-Z0-9\-_]{3,20}$", $claveGenerada)) {
echo $claveGenerada . " es válido
";
return true;
} else {
echo $claveGenerada . " NO válido
";
return false;
}
echo $claveGenerada . " es válido
";
return true;
}*/
function crearBaseDatosFtp($remoto){
global $app, $conf;
$fields = $app->tform->encode($this->dataRecord, $app->tform->getCurrentTab(), true);
$app->uses('ini_parser,getconf');
$server_config_array = $app->getconf->get_global_config();
//Tomo el valor mínimo de dígitos que tiene que tener la contraseña
$min_password_length = 10;
//if(isset($server_config_array['misc']['min_password_length'])) {
$min_password_length = $app->functions->intval($server_config_array['misc']['min_password_length']);
//}
//print "Cantidad de digitos: " . $min_password_length;
//print 'La clave ' . $this->generaPass();
$generated_usernameBBDD = $this->generaNombreBD();//$fields['client_id'].substr(sha1(rand()), 0, 10);//client_prefix.substr(sha1(rand()), 0, 8);
//print ""; print_r($generated_usernameBBDD); print "
\n";
$sitio_id = $app->db->queryOneRecord('SELECT domain_id, domain FROM web_domain WHERE domain = "'.$fields['domain'].'"');
//print ""; print_r($camDnsRR); print "
\n";
$camDnsRR = $app->db->queryOneRecord('SELECT server_id, zone FROM dns_rr WHERE name LIKE "'.$this->dominio.'%"');
//print ""; print_r($fields['client_id']); print "
\n";
$clavePass = $this->generaPass();
//*Recupero todos los prefix necesarios
$app->uses('getconf,tools_sites');
$global_config = $app->getconf->get_global_config('sites');
//$dbuser_prefix = $app->tools_sites->replacePrefix($global_config['dbuser_prefix'], $this->dataRecord);
//$dbname_prefix = $app->tools_sites->replacePrefix($global_config['dbname_prefix'], $this->dataRecord);
$ftpuser_prefix = $app->tools_sites->replacePrefix($global_config['ftpuser_prefix'], $this->dataRecord);
// añado database user con su prefix
$db_user_params = array(
'server_id' => $camDnsRR['server_id'],
'sysgroup_id' => $fields['client_group_id'],
'sys_userid' => $fields['client_group_id'],
'database_user' => $generated_usernameBBDD, //$dbuser_prefix3 . $generated_usernameBBDD,
'database_user_prefix' => $this->valor_prefix,
'database_password' => $clavePass//substr(sha1($dbuser_prefix . $generated_usernameBBDD), 0, 16)
//substr(sha1(rand()), 0, 20)
);
$this->usuario_db_txt = $db_user_params['database_user'];
$this->pass_db_txt = $db_user_params['database_password'];
//print ""; print_r($db_user_params); print "
\n";
//print "
". $this->usuario_db_txt;
//print "
". $this->pass_db_txt;
//print ""; print_r($fields); print "
\n";
$db_user_id = $remoto->insert_query('../sites/form/database_user.tform.php', $fields['client_group_id'], $db_user_params, 'sites:web_database_user:on_after_insert');
// add database
$paramsBD = array(
'server_id' => $camDnsRR['server_id'],
'sysgroup_id' => $fields['client_group_id'],
'parent_domain_id' => $sitio_id['domain_id'],
'type' => 'mysql',
'database_quota' => '-1',
'database_name' => $generated_usernameBBDD, //$dbuser_prefix3 . $generated_usernameBBDD,//$db_user_params['database_user'],
'database_name_prefix' => $this->valor_prefix,
'database_user_id' => $db_user_id,
'database_charset' => 'utf8',
'remote_access' => 'n',
'remote_ips' => '-1',
'active' => 'y'
);
//print ""; print_r($paramsBD); print "
\n";
//print ""; print_r($fields); print "
\n";
$this->nombre_db_txt = $paramsBD['database_name'];
$remoto->sites_database_add($fields['client_group_id'], $paramsBD);
// get site data para usarlo en la creación de la cuenta ftp, otra forma de cargar una tupla dandole un id
//$app->uses('remoting_lib');
$app->remoting_lib->loadFormDef('../sites/form/web_vhost_domain.tform.php');
$site_data = $app->remoting_lib->getDataRecord($sitio_id);
$this->nombre_user_ftp = $this->generaNombreFTP();
// add ftp user
$ftp_params = array(
'server_id' => $camDnsRR['server_id'],
'parent_domain_id' => $sitio_id['domain_id'],
'username' => $this->valor_prefix_ftp . $this->nombre_user_ftp, //$ftpuser_prefix . $generated_username,
'username_prefix' => $this->valor_prefix_ftp,
'password' => $clavePass,//substr(sha1(rand()), 0, 10),
'quota_size' => '-1',
'dir' => $site_data['0']['document_root'],
'uid' => $site_data['0']['system_user'],
'gid' => $site_data['0']['system_group'],
'sys_groupid' => $site_data['0']['sys_groupid'],
'quota_files' => '-1',
'ul_ratio' => '-1',
'dl_ratio' => '-1',
'ul_bandwidth' => '-1',
'dl_bandwidth' => '-1',
'active' => 'y',
);
$this->usuario_ftp_txt = $ftp_params['username'];
$this->pass_ftp_txt = $ftp_params['password'];
//print ""; print_r($ftp_params); print "
\n";
//print ""; print_r($site_data); print "
\n";
//echo('El usuario es ' . $fields['client_group_id']);
$remoto->insert_query('../sites/form/ftp_user.tform.php', $fields['client_group_id'], $ftp_params);
echo '
Altas de BBDD y FTP, ¡Correctas!
Usuario BBDD: '. $this->usuario_db_txt .'
Contraseña: ' . $this->pass_db_txt . '
Nombre BBDD: ' . $this->nombre_db_txt . '
Usuario FTP: '. $this->usuario_ftp_txt .'
Contraseña: ' . $this->pass_ftp_txt . '
BBDD
Usuario: '. $this->usuario_db_txt .'
Nombre Base de Datos: ' . $this->nombre_db_txt .'
Clave: ' . $this->pass_db_txt . '
FTP
Usuario: '. $this->usuario_ftp_txt .'
Clave: ' . $this->pass_ftp_txt . '
Nuevo dominio: '. $fields['domain'].'
Documento generado: ' . $hoy . '
';
$eldom = $fields['domain'];
echo '';
echo '';
}
//Expresiones regulares para comprobar si es subdominio
function comprobarSubDominios($subdom) {
global $app, $conf;
$patronSubDominos = "/(.*?)\.(.*)$/";
$patronWWW = "/^w{3}/";
//$patronPunto = '/(\.)/';
/*$patronP1 = '/(^\.)/';
$patronP2 = '/(\.$)/';
$patronP3 = '/(\.\.+)/';
$patronP4 = '/(\.[[:alpha:]]*)$/';*/
//Se comprueba que no tenga 3 w "www" al principio del nombre del dominio o subdomino
$encontradoWWW = preg_match($patronWWW, $subdom, $coincidencias);
if($encontradoWWW){
$app->tform->errorMessage = $app->tform->wordbook['error_dominio_www'];
return;
}
//Si el dominio tiene mas de dos puntos, es incorrecto
if (substr_count($subdom,".") > 2) {
$app->tform->errorMessage = $app->tform->wordbook['error_dominio_mas_puntos'];
return;
} else if(substr_count($subdom,".") == 2){
$this->encontrado = preg_match($patronSubDominos, $subdom, $coincidencias);
//print ""; print_r($coincidencias); print "
\n";
$this->subdominio = $coincidencias[1];
$this->dominio = $coincidencias[2];
//print "Subdomino: " . $this->subdomino . "
El dominio es: " . $this->dominio;
return $this->es_subdominio;
}
//Crear subdominio
function crearSubDominio($remoto, $campoSubDominio){
//para usar variables globales en las funciones hay que declararlas dentro de la funcion.
global $app, $conf;
$fields = $app->tform->encode($this->dataRecord, $app->tform->getCurrentTab(), true);
//print ""; print_r($campoSubDominio); print "
\n";
//Compruebo que el subdominio no existe consultando la tabla web_domain.
$existeSubDominio = $app->db->queryOneRecord('SELECT domain_id, domain FROM web_domain WHERE domain = "'.$campoSubDominio.'"');
//print 'El Sub existe '. $existeSubDominio['domain'];
if($existeSubDominio){
$this->subdom_error = true;
$app->tform->errorMessage = $app->tform->wordbook['error_subdominio_existe'];
$this->onError();
return;
}
//print "El dominio es: " . $this->dominio;
//$camDominio = $app->db->queryOneRecord('SELECT domain_id, domain FROM domain WHERE domain = "'.$this->dominio.'"');
$camDominio = $app->db->queryOneRecord('SELECT origin FROM dns_soa WHERE origin LIKE "'.$this->dominio.'%"');
$camDnsRR = $app->db->queryOneRecord('SELECT server_id, zone FROM dns_rr WHERE name LIKE "'.$this->dominio.'%"');
$camServIP = $app->db->queryOneRecord('SELECT ip_address FROM server_ip WHERE server_id = "'.$camDnsRR['server_id'].'"');
//print_r($camDominio);
//print_r($camDnsRR);
//Si el dominio NO existe mostramos mensaje de error y salimos de la ejecución
if(!$camDominio['origin']){
$this->subdom_error = true;
$app->tform->errorMessage = $app->tform->wordbook['error_no_existe_dominio_padre'];
$this->onError();
//return;
//print 'No existe el dominio';
return $this->subdom_error;
} else {
//Parametros para la creación de subdominios
$paramSubDominios = array(
'server_id' => $camDnsRR['server_id'],
'zone' => $camDnsRR['zone'],
'name' => $this->subdominio,
'type' => 'a',
'data' => $camServIP['ip_address'],
//'aux' => '0',
'ttl' => '3600',
'active' => 'y',
//comento el campo stamp, ya que introducia solo ceros en la bbdd
//'stamp' => time(),
'serial' => '1',
);
//print ""; print_r($paramSubDominios); print "
\n";
//$remote = new remote_actions;
//Inserto en bbdd usando la clase remoto que se la he pasado en parámetros de la función
//$resultado = $remoto->insert_query('../dns/form/dns_a.tform.php', $fields['client_id'], $paramSubDominios);
$resultado = $remoto->insert_query('form/dns_a_webdns.tform.php', $fields['client_group_id'], $paramSubDominios);
echo '
Se ha dado de alta Web y Subdominio, '.$this->subdominio.', ¡Correctamente!
';
//$this->onShow();
}
}
function crearSitioWebSubdominio($remoto){
global $app, $conf;
$fields = $app->tform->encode($this->dataRecord, $app->tform->getCurrentTab(), true);
//Captura del servidor id
if($this->id > 0) {
$server_id = $this->dataRecord["server_id"];
} else {
// Get the first server ID
$tmp = $app->db->queryOneRecord("SELECT server_id FROM server WHERE web_server = 1 ORDER BY server_name LIMIT 0,1");
$server_id = $tmp['server_id'];
//$this->elServidor = $server_id;
}
$dns_ip_servidor_ipv6 = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = ".$fields['client_group_id']." AND ip_type='IPv6'");
//Comprobamos que el resultado para el cliente seleccionado no esta vacío,
//si lo esta tomamos los datos del cliente id 0
if(!$dns_ip_servidor_ipv6){
$dns_ip_servidor = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = 1 AND ip_type='IPv4'");
$dns_ip_servidor_ipv6 = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = 1 AND ip_type='IPv6'");
/*echo '
Valor de la consulta '.$dns_ip_servidor_ipv6[ip_address].' ';
echo '
Valor de la consulta '.$dns_ip_servidor[ip_address].' ';*/
}
$dns_servidor = $app->db->queryOneRecord("SELECT client_id, default_dnsserver, default_webserver FROM client WHERE client_id = ".$app->functions->intval($fields['client_group_id']));
$clienteID = $dns_servidor['client_id'];
$res = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$app->functions->intval($fields['client_group_id']));
$client_group_id = $res['groupid'];
//Captura del servidor id
if($this->id > 0) {
$server_id = $this->dataRecord["server_id"];
} else {
// Get the first server ID
$tmp = $app->db->queryOneRecord("SELECT server_id FROM server WHERE web_server = 1 ORDER BY server_name LIMIT 0,1");
$server_id = $tmp['server_id'];
//$this->elServidor = $server_id;
}
//echo ('El server es: ' . $dns_servidor['default_webserver']);
// add site
$paramsite = array(
'type' => 'vhost',
'domain' => $fields['domain'], //$this->subdominio,
'server_id' => $server_id,//$dns_servidor['default_webserver'],
'ip_address' => '*', //$dns_ip_servidor['ip_address'],
'ipv6_address' => $dns_ip_servidor_ipv6['ip_address'],
'traffic_quota' => '-1',
'hd_quota' => '0',
'cgi' => 'y',
'ssi' => 'y',
'suexec' => 'y',
'ruby' => 'n',
'python' => 'n',
'perl' => 'n',
'errordocs' => '1',
'subdomain' => '',
'php' => 'php-fpm',
'fastcgi_php_version' => '',
'seo_redirect' => '',
'rewrite_to_https' => 'n',
'allow_override' => 'All',
'http_port' => 80,
'https_port' => 443,
'apache_directives' => '',
'nginx_directives' => '',
'php_fpm_use_socket' => 'y',
'pm' => 'ondemand',
'pm_max_children' => 10,
'pm_start_servers' => 1,
'pm_min_spare_servers' => 1,
'pm_max_spare_servers' => 5,
'pm_process_idle_timeout' => 10,
'pm_max_requests' => 0,
'custom_php_ini' => '',
'active' => 'y',
'document_root' => '-',
'system_user' => '-',
'system_group' => '-',
'log_retention' => 30,
'client_group_id' => $client_group_id,
);
//$app->uses('remoting_lib');
//$formulario = $app->remoting_lib->loadFormDef('../sites/form/web_vhost_domain.tform.php');
//$formulario = $app->tform->loadFormDef('../sites/form/web_vhost_domain.tform.php');
//print 'Valores: ' . $dns_ip_servidor_ipv6;
//print " Parametros:"; print_r($paramsite); print "
\n";
/*print ' cliente id ' . $fields['client_id'];
print "";print_r($fields);print "
\n" . $fields['client_id'];*/
//print "Formulario ";print_r($formulario);print "
\n";
//print 'DNS IPV6 ' . $dns_ip_servidor_ipv6['ip_address'];
//$tform_def_file2 = "../sites/form/web_vhost_domain.tform.php";
//$app->tform->loadFormDef($tform_def_file2);
//El último parámetro es para lanzar un evento que llama a la función on_after_insert que prepara los campos document_root, system_user y system_group
$site_id = $remoto->insert_query('../sites/form/web_vhost_domain.tform.php', $fields['client_group_id'], $paramsite, 'sites:web_vhost_domain:on_after_insert');
//print 'ID sitio web del subdominio --> ' . $site_id;
}
function tieneIPs(){
global $app, $conf;
//$fields = $app->tform->encode($this->dataRecord, $app->tform->getCurrentTab(), true);
//Llamada a la tabla server_ip para recuperar la ip4 e ip6
$dns_ip_servidor = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE ip_type='IPv4'");
$dns_ip_servidor_ipv6 = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE ip_type='IPv6'");
/*print "IP4 ";print_r($dns_ip_servidor);print "
\n";
print "IP6 ";print_r($dns_ip_servidor_ipv6);print "
\n";*/
if(!$dns_ip_servidor['ip_address'] || !$dns_ip_servidor_ipv6['ip_address']){
$app->tform->errorMessage = $app->tform->wordbook['error_no_ip'];
$this->onError();
return true;
}
return false;
}
//Comprueba que no exista el dominio y que no tenga sitio web, puede tener sitio web y no tener dns.
function existeDominio($campos){
global $app, $conf;
if($app->db->queryOneRecord('SELECT * FROM dns_soa WHERE origin LIKE "'.$campos['domain'].'%"')) {
$app->tform->errorMessage = $app->tform->wordbook['domain_error_unique'];
}
if($app->db->queryOneRecord('SELECT domain_id, domain FROM web_domain WHERE domain = "'.$campos['domain'].'"')) {
$app->tform->errorMessage = $app->tform->wordbook['error_sitio_web_existe'];
}
if($app->tform->errorMessage)
{
$this->onError();
return true;
}
}
function crearSitioDns($remoto){
global $app, $conf;
//Carga de campos del formulario.
$fields = $app->tform->encode($this->dataRecord, $app->tform->getCurrentTab(), true);
//Captura del servidor id
if($this->id > 0) {
$server_id = $this->dataRecord["server_id"];
} else {
// Get the first server ID
$tmp = $app->db->queryOneRecord("SELECT server_id FROM server WHERE web_server = 1 ORDER BY server_name LIMIT 0,1");
$server_id = $tmp['server_id'];
//$this->elServidor = $server_id;
}
// client prefix and group id
$res = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$app->functions->intval($fields['client_group_id']));
$client_group_id = $res['groupid'];
//$client_prefix = 'c'.$fields['client_id'];
// add domain. Llamada que inserta el dominio en la tabla domain
//$domain_id = $remote->insert_query('../client/form/domain.tform.php', $fields['client_id'], array('domain' => $fields['domain']));
//$this->crearBaseDatosFtp($remote);
//Carga del formulario dns_soa para guardar en base de datos
$tform_def_file = "../dns/form/dns_soa.tform.php";
$app->tform->loadFormDef($tform_def_file);
// Carga y seleccion de dns_template, si no esta creado se informa de que tiene que crearse
$template_record = $app->db->queryOneRecord("SELECT * FROM dns_template WHERE visible = 'Y' AND name = 'webdns'"); /*'open6hosting'");*/
//Llamada a la tabla server_ip para recuperar la ip4 e ip6
//$dns_ip_servidor = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = ".$app->functions->intval($fields['client_id']. " AND ip_type='IPv4'"));
//PROVISIONAL
$dns_ip_servidor = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = 1 AND ip_type='IPv4'");
//$dns_ip_servidor_ipv6 = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = ".$fields['client_id']." AND ip_type='IPv6'");
//PROVISIONAL
$dns_ip_servidor_ipv6 = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = 1 AND ip_type='IPv6'");
//$dns_ip_servidor_ipv6 = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = ".$fields['client_id']." AND ip_type='IPv6'");
//Comprobamos que el resultado para el cliente seleccionado no esta vacío,
//si lo esta tomamos los datos del cliente id 0
if(!$dns_ip_servidor_ipv6){
$dns_ip_servidor = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = 0 AND ip_type='IPv4'");
$dns_ip_servidor_ipv6 = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = 0 AND ip_type='IPv6'");
/*echo '
Valor de la consulta '.$dns_ip_servidor_ipv6[ip_address].' ';
echo '
Valor de la consulta '.$dns_ip_servidor[ip_address].' ';*/
}
$tpl_content = $template_record['template'];
// Reemplazo la variable que nos encontramos en base de datos por el valor que se ha introducido en el formulario
$tpl_content = str_replace('{DOMAIN}', $fields['domain'], $tpl_content);
//Carga de los datos en las variables ns
$tpl_content = str_replace('{IP}', $dns_ip_servidor['ip_address'], $tpl_content);
$tpl_content = str_replace('{IPV6}', $dns_ip_servidor_ipv6['ip_address'], $tpl_content);
/*$tpl_content = str_replace('{NS1}', '.open6servers.com', $tpl_content);
$tpl_content = str_replace('{NS2}', '.open6servers.com', $tpl_content); */
$enable_dnssec = 'N';//(($_POST['dns_dnssec'] == 'Y') ? 'Y' : 'N');
// Parse the template
$tpl_rows = explode("\n", $tpl_content);
$section = '';
$vars = array();
$vars['xfer']='';
$dns_rr = array();
foreach($tpl_rows as $row) {
$row = trim($row);
if(substr($row, 0, 1) == '[') {
if($row == '[ZONE]') {
$section = 'zone';
} elseif($row == '[DNS_RECORDS]') {
$section = 'dns_records';
} else {
die('Unknown section type');
}
} else {
if($row != '') {
// Handle zone section
if($section == 'zone') {
$parts = explode('=', $row);
$key = trim($parts[0]);
$val = trim($parts[1]);
if($key != '') $vars[$key] = $val;
}
// Handle DNS Record rows
if($section == 'dns_records') {
$parts = explode('|', $row);
$dns_rr[] = array(
'name' => $parts[1],
'type' => $parts[0],
'data' => $parts[2],
'aux' => $parts[3],
'ttl' => $parts[4]
);
}
}
}
} // end foreach
//Llamada a la tabla client para recuperar el client_id y su default_dnsserver
$dns_servidor = $app->db->queryOneRecord("SELECT client_id, default_dnsserver, default_webserver FROM client WHERE client_id = ".$app->functions->intval($fields['client_group_id']));
$valor_recuperado1 = $dns_servidor['client_id'];
/*$valor_recuperado2 = $dns_servidor['default_dnsserver'];
$valor_recuperado3 = $dns_servidor['default_webserver'];*/
// Insert the soa record
$sys_userid = $_SESSION['s']['user']['userid'];
$origin = $vars['origin'];
$ns = $vars['ns'];
$mbox = str_replace('@', '.', $vars['mbox']);
$refresh = $vars['refresh'];
$retry = $vars['retry'];
$expire = $vars['expire'];
$minimum = $vars['minimum'];
$ttl = $vars['ttl'];
$xfer = $vars['xfer'];
$also_notify = $vars['also_notify'];
$update_acl = $vars['update_acl'];
$serial = $app->validate_dns->increase_serial(0);
$insert_data = array(
"sys_userid" => $sys_userid,
"sys_groupid" => $client_group_id,
"sys_perm_user" => 'riud',
"sys_perm_group" => 'riud',
"sys_perm_other" => '',
"server_id" => $server_id,//$dns_servidor['default_dnsserver'],
"origin" => $origin,
"ns" => $ns,
"mbox" => $mbox,
"serial" => $serial,
"refresh" => $refresh,
"retry" => $retry,
"expire" => $expire,
"minimum" => $minimum,
"ttl" => $ttl,
"active" => 'Y',
"xfer" => $xfer,
"also_notify" => $also_notify,
"update_acl" => $update_acl,
"dnssec_wanted" => $enable_dnssec
);
$dns_soa_id = $app->db->datalogInsert('dns_soa', $insert_data, 'id');
// Insert the dns_rr records
if(is_array($dns_rr) && $dns_soa_id > 0) {
foreach($dns_rr as $rr) {
$insert_data = array(
"sys_userid" => $sys_userid,
"sys_groupid" => $client_group_id,
"sys_perm_user" => 'riud',
"sys_perm_group" => 'riud',
"sys_perm_other" => '',
"server_id" => $server_id,//$dns_servidor['default_dnsserver'],
"zone" => $dns_soa_id,
"name" => $rr['name'],
"type" => $rr['type'],
"data" => $rr['data'],
"aux" => $rr['aux'],
"ttl" => $rr['ttl'],
"active" => 'Y'
);
$dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id');
}
}
//sites_web_domain_add
$tform_def_file = "../sites/form/web_vhost_domain.tform.php";
$app->tform->loadFormDef($tform_def_file);
// add site
$paramsite = array(
'type' => 'vhost',
'domain' => $fields['domain'],
'server_id' => $server_id,//$dns_servidor['default_webserver'],
'sys_userid' => $sys_userid,
'sys_groupid' => $client_group_id,
'ip_address' => '*', //$dns_ip_servidor['ip_address'],
'ipv6_address' => $dns_ip_servidor_ipv6['ip_address'],
'traffic_quota' => '-1',
'hd_quota' => '0',
'cgi' => 'y',
'ssi' => 'y',
'suexec' => 'y',
'ruby' => 'n',
'python' => 'n',
'perl' => 'n',
'errordocs' => '1',
'subdomain' => 'www',
'php' => 'php-fpm',
'fastcgi_php_version' => '',
'seo_redirect' => '',
'rewrite_to_https' => 'n',
'allow_override' => 'All',
'http_port' => 80,
'https_port' => 443,
'apache_directives' => '',
'nginx_directives' => '',
'php_fpm_use_socket' => 'y',
'pm' => 'ondemand',
'pm_max_children' => 10,
'pm_start_servers' => 1,
'pm_min_spare_servers' => 1,
'pm_max_spare_servers' => 5,
'pm_process_idle_timeout' => 10,
'pm_max_requests' => 0,
'custom_php_ini' => '',
'active' => 'y',
'document_root' => '-',
'system_user' => '-',
'system_group' => '-',
'log_retention' => 30,
'client_group_id' => $client_group_id,
);
//print 'Valores: ' . $dns_ip_servidor_ipv6 . " " . $formulario . " Parametros: " ;
//print ""; print_r($paramsite); print "
\n";
/*print ' cliente id ' . $fields['client_id'];
print "";print_r($fields);print "
\n";*/
//print "Formulario ";print_r($formulario);print "
\n";
//$this->crearBaseDatosFtp($remote);
//print 'DNS IPV6 ' . $dns_ip_servidor_ipv6['ip_address'];
//El último parámetro es para lanzar un evento que llama a la función on_after_insert que prepara los campos document_root, system_user y system_group
$site_id = $remoto->insert_query('../sites/form/web_vhost_domain.tform.php', $fields['client_group_id'], $paramsite, 'sites:web_vhost_domain:on_after_insert');
//print 'Sitio id '. $site_id;
}
function onSubmit() {
global $app, $conf;
//Carga de campos del formulario.
$fields = $app->tform->encode($this->dataRecord, $app->tform->getCurrentTab(), true);
//Creo la clase remote para usar las librerias
$remote = new remote_actions;
if($this->tieneIPs()){
return;
}
if($this->existeDominio($fields)){
return;
}
//Esta variable nos llega por jQuery desde el htm para el control de errores en la vista.
if($_POST['create'] != 1)
{
$app->tform->errorMessage = 'DUMMY';
$app->tpl->setVar($this->dataRecord);
$this->onShow();
return;
}
if($this->comprobarSubDominios($fields['domain'])){
$this->crearSubDominio($remote, $fields['domain']);
if(!$this->subdom_error){
$this->crearSitioWebSubdominio($remote);
$this->crearBaseDatosFtp($remote);
}
} else {
$this->crearSitioDns($remote);
//$variablePHP = "";
//Si todo va bien, el resultado de la web y dns
echo '
Altas Web y DNS del dominio '.$fields['domain'].', ¡Creadas correctamente!
';
//IMPORTANTE, es necesario cargar nuestro formulario para poder ejecutar la función que crea
//la base de datos y el ftp ya que hay datos que tomamos de él antes de ejecutarla.
$app->tform->loadFormDef('form/new_service_webdns.tform.php');
$this->crearBaseDatosFtp($remote);
}
}
}
class remote_actions extends remoting {
public function insert_query($formdef_file, $client_id, $params, $event_identifier = '') {
return $this->insertQuery($formdef_file, $client_id, $params, $event_identifier);
}
public function sites_database_add($client_id, $params){
global $app, $conf;
//$app->remoting_lib->loadFormDef('../sites/form/database.tform.php');
//$app->tform->formDef('../sites/form/database.tform.php');
$sql = $this->insertQueryPrepare('../sites/form/database.tform.php', $client_id, $params);
if($sql !== false) {
$app->uses('sites_database_plugin');
//print_r($sql);
$this->id = 0;
$this->dataRecord = $params;
//$app->uses('sites_database_plugin');
$app->sites_database_plugin->processDatabaseInsert($this);
$retval = $this->insertQueryExecute($sql, $params);
// set correct values for backup_interval and backup_copies
if(isset($params['backup_interval']) || isset($params['backup_copies'])){
$sql_set = array();
if(isset($params['backup_interval'])) $sql_set[] = "backup_interval = '".$app->db->quote($params['backup_interval'])."'";
if(isset($params['backup_copies'])) $sql_set[] = "backup_copies = ".$app->functions->intval($params['backup_copies']);
//$app->db->query("UPDATE web_database SET ".implode(', ', $sql_set)." WHERE database_id = ".$retval);
$this->updateQueryExecute("UPDATE web_database SET ".implode(', ', $sql_set)." WHERE database_id = ".$retval, $retval, $params);
}
return $retval;
}
return false;
}
}
$page = new page_action;
$page->onLoad();
//IMPORTENTE, es necesario estas líneas para que el botón del pdf funcione. Activa el javascript
//echo '';
?>