Current File : //root/panel/modules/migration/code/controller.ext.php |
<?php
/**
* @copyright 2014-2015 Sentora Project (http://www.sentora.org/)
* Sentora is a GPL fork of the ZPanel Project whose original header follows:
*
* ZPanel - A Cross-Platform Open-Source Web Hosting Control panel.
*
* @package ZPanel
* @version $Id$
* @author Bobby Allen - ballen@bobbyallen.me
* @copyright (c) 2008-2014 ZPanel Group - http://www.zpanelcp.com/
* @license http://opensource.org/licenses/gpl-3.0.html GNU Public License v3
*
* This program (ZPanel) 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 3 of the License, or
* (at your option) any later version.
*
* This program 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/>.
*
*/
class module_controller extends ctrl_module
{
static $ok;
static $cpanel_ip_blank;
static $cpanel_username_blank;
static $cpanel_password_blank;
static $cpanel_Port_Number_blank;
static $cpanel_invalid;
static $server_busy;
static $backup_not_found;
static $auth_fail;
static $fail_output;
static $backup_file_name;
static function get_client_ip()
{
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
static function gethelpicon()
{
global $zdbh;
global $controller;
$temp=$controller->GetControllerRequest('URL','module') ;
$val = '/assets/one.txt';
$val1 = '/modules/';
$name=file_get_contents("modules/$temp/assets/helpicon.txt");
return $name;
}
static function dodownloadmigrate()
{
global $controller;
// runtime_csfr::Protect();
// $currentuser = ctrl_users::GetUserDetail();
$formvars = $controller->GetAllControllerRequests('FORM');
$cpanel_ip_address=trim($formvars['cpanel_ip_address']);
$cpanel_username=trim($formvars['cpanel_username']);
$cpanel_password=trim($formvars['cpanel_password']);
$cpanel_Port_Number=trim($formvars['cpanel_Port_Number']);
$cpanel_flag="";
if(isset($formvars['cpanel_download']))
$cpanel_flag="download";
else if(isset($formvars['cpanel_migrate']))
$cpanel_flag="migrate";
if (self::ExecuteMigration($cpanel_ip_address,$cpanel_Port_Number,$cpanel_username,$cpanel_password,$cpanel_flag))
{
self::$ok = true;
}
else
{}
return true;
}
static function ExecuteMigration($cpanel_ip_address, $cpanel_Port_Number, $cpanel_username, $cpanel_password,$module_flag)
{
global $zdbh;
global $controller;
$currentuser = ctrl_users::GetUserDetail($uid);
$uid = $currentuser['userid'];
$username = $currentuser['username'];
$email=$currentuser['email'];
if(self::CheckCreateForErrors($cpanel_ip_address, $cpanel_Port_Number, $cpanel_username, $cpanel_password))
{
/* $ip_create_by =self::get_client_ip();
if($cpanel_flag == "download")
$in="command cpanel_download $cpanel_ip_address $cpanel_username $cpanel_password $ip_create_by $uid $username $email";
else if($cpanel_flag == "migrate")
$in="command cpanel_migrate $cpanel_ip_address $cpanel_username $cpanel_password $ip_create_by $uid $username $email";
$service_port = 4444 ;
$address = gethostbyname('localhost');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
return false;
}
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
return false;
}
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 2000, "usec" =>0));
$out = '';
socket_write($socket, $in, strlen($in));
socket_close($socket);
$cpanel_ip_address = $arr[2];
$cpanel_username = $arr[3];
$cpanel_password = $arr[4];
$ip_create_by = $arr[5];
$uid=$arr[6];
$username=$arr[7];
$email=$arr[8]; */
$Current_IP_Addr = ctrl_options::GetSystemOption('server_ip');
$ftp_username=$cpanel_username."_".time();
$letters = 'abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
$ftp_passwd=substr(str_shuffle($letters), 0, 16);
$homedir=ctrl_options::GetSystemOption('hosted_dir').$username."/backups/";
/////////////////// Create FTP user process starting ///////////////////
include('/etc/sentora/panel/cnf/db.php');
$z_db_user = $user;
$z_db_pass = $pass;
$ftp_db_name=ctrl_options::GetSystemOption('ftp_db');
try {
$ftp_db = new db_driver("mysql:host=" . $host . ";dbname=$ftp_db_name", $z_db_user, $z_db_pass);
} catch (PDOException $e) {
}
$sql = $ftp_db->prepare("INSERT INTO ftpquotalimits (name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail) VALUES (:username, 'user', 'true', 'hard', 0, 0, 0, 0, 0, 0);");
$sql->bindParam(':username', $ftp_username);
$sql->execute();
$sql = $ftp_db->prepare("INSERT INTO ftpuser (id, userid, passwd, homedir, shell, count, accessed, modified) VALUES ('', :username, :password, :homedir, '/sbin/nologin', 0, '', '');");
$sql->bindParam(':username', $ftp_username);
$sql->bindParam(':password', $ftp_passwd);
$sql->bindParam(':homedir', $homedir);
$sql->execute();
$source_server_ip=$cpanel_ip_address;
$cpanel_account=$cpanel_username;
$cpanel_password=$cpanel_password;
$server_ip_address=$Current_IP_Addr;
$ftp_username=$ftp_username;
$ftp_password=$ftp_passwd;
include "/etc/sentora/panel/modules/migration/code/xmlapi.php";
$xmlapi = new xmlapi($source_server_ip);
// Credentials for FTP to Backup Box
$ftp_server_ip = $server_ip_address;
$ftpacct = $ftp_username; // FTP account
$ftppass = $ftp_password; // FTP password
$email_notify =$email; // Email address for backup notification
$xmlapi->password_auth($cpanel_account,$cpanel_password);
$xmlapi->set_port($cpanel_Port_Number);
$xmlapi->set_debug(1);
// nandhini only bz this line migration module show blank page
try
{
$report_diskusage = $xmlapi->api2_query(
$cpanel_account, 'DiskUsage', 'fetchdiskusage'
);
}
catch(Exception $e)
{
self::$auth_fail='CPANEL_AUTH_FAILED';
self::removeFTPUser($ftpacct);
return false;
}
// nandhini
$report_disk = json_decode($report_diskusage);
$result = $report_disk->cpanelresult->event->result;
if($result == 1)
{
$api_args = array(
'ftp',
$ftp_server_ip,
$ftpacct,
$ftppass,
$email_notify,
'21',
$homedir
);
$xmlapi->set_output('json');
$xml_result = $xmlapi->api1_query($cpanel_account,'Fileman','fullbackup',$api_args);
$xml_result = json_decode($xml_result);
$api_result = $xml_result->event->result;
if($api_result == 1)
{
$backup_filename = self::getBackupFileName($cpanel_account, $xmlapi);
self::$backup_file_name=$backup_filename;
if($backup_filename && $backup_filename != 'No')
{
$ssl_conf_query="INSERT INTO vps_migration_process(flag,username,password,user_registered_email_id,ip_address,backup_file_name,ftp_user,ftp_pass,backup_status,create_user)VALUES('".$module_flag."','".$cpanel_account."','".$cpanel_password."','".$email_notify."','".$source_server_ip."','".$backup_filename."','".$ftpacct."','".$ftppass."','0','".$username."')";
$ssl_conf = $zdbh->prepare($ssl_conf_query);
$ssl_conf->execute();
self::$ok=TRUE;
return true;
}
else
{
self::$backup_not_found=TRUE;
self::removeFTPUser($ftpacct);
return false;
}
}
else
{
$api_result_error = $xml_result->data->result;
self::$fail_output='CPANEL_BACKUP_INITIATE_FAILED'." ".$api_result_error;
self::removeFTPUser($ftpacct);
return false;
}
}
else
{
//return CPANEL_AUTH_FAILED;
self::$auth_fail='CPANEL_AUTH_FAILED';
self::removeFTPUser($ftpacct);
return false;
}
}
return true;
}
static function getBackupFileName($cpanel_account, $xmlapi)
{
$list_backups = $xmlapi->api1_query($cpanel_account ,'Fileman', 'listfullbackups');
$backup_list = json_decode($list_backups);
$backup_lists = trim($backup_list->data->result);
$backup_list_arr= array_filter(explode('</div>', $backup_lists));
$backup_filename="";
foreach($backup_list_arr as $backup)
{
$backup = trim(strip_tags($backup));
if(stristr($backup, "in progress"))
{
$backup_file = explode(' ', $backup);
$backup_file = $backup_file[0];
if($backup_file != null)
{
$backup_filename=$backup_file;
}
else
{
$backup_filename=null;
}
}
}
if($backup_filename == null)
{
$backup_filename = self::getBackupFileName($cpanel_account);
}
return $backup_filename;
}
static function is_valid_domain_name($cpanel_ip_address)
{
/* return (preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) //valid chars check
&& preg_match("/^.{1,253}$/", $domain_name) //overall length check
&& preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name) );
//length of each label */
return(preg_match("/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}(\.[a-zA-Z]{2,})$/i",$cpanel_ip_address) || preg_match("/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/i",$cpanel_ip_address) );
}
static function CheckCreateForErrors($cpanel_ip_address, $cpanel_Port_Number, $cpanel_username, $cpanel_password)
{
if (trim($cpanel_ip_address) == '')
{
self::$cpanel_ip_blank = TRUE;
return FALSE;
}
if (trim($cpanel_username) == '')
{
self::$cpanel_username_blank = TRUE;
return FALSE;
}
if (trim($cpanel_password) == '')
{
self::$cpanel_password_blank = TRUE;
return FALSE;
}
if (trim($cpanel_Port_Number) == '')
{
self::$cpanel_Port_Number_blank = TRUE;
return FALSE;
}
if(!(self::is_valid_domain_name($cpanel_ip_address)) && $cpanel_ip_address != ''){
if(!filter_var($cpanel_ip_address, FILTER_VALIDATE_IP))
{
self::$cpanel_invalid = TRUE;
return FALSE;
}
}
return TRUE;
}
static function removeFTPUser($F_username)
{
include('/etc/sentora/panel/cnf/db.php');
$z_db_user = $user;
$z_db_pass = $pass;
$ftp_db_name=ctrl_options::GetSystemOption('ftp_db');
try {
$ftp_db = new db_driver("mysql:host=" . $host . ";dbname=$ftp_db_name", $z_db_user, $z_db_pass);
} catch (PDOException $e) {
}
$sql = $ftp_db->prepare("DELETE FROM ftpquotalimits where name='".$F_username."'");
$sql->execute();
$sql = $ftp_db->prepare("DELETE FROM ftpuser where userid='".$F_username."'");
$sql->execute();
}
static function ListMigration($username)
{
global $zdbh;
$sql = "SELECT * FROM vps_migration_process where create_user='$username'";
$numrows = $zdbh->prepare($sql);
$numrows->execute();
if ($numrows->fetchColumn() <> 0) {
$sql = $zdbh->prepare($sql);
$res = array();
$sql->execute();
while ($rowdomains = $sql->fetch()) {
$backup_status="";
$restore_status="";
if($rowdomains['flag']=="download")
{
if($rowdomains['backup_status']==0)
$backup_status="In-Progress";
else
$backup_status="Status-Completed";
$restore_status="N/A";
}else
{
if($rowdomains['backup_status']==0)
{
$backup_status="In-Progress";
$restore_status="Not yet started";
}
else
{
$backup_status="Status-Completed";
if($rowdomains['restore_status']=="-1")
$restore_status="Process Going On";
if($rowdomains['restore_status']=="1")
$restore_status="Status-Completed";
if($rowdomains['restore_status']=="0")
$restore_status="Need to start";
}
}
array_push($res, array(
'flag' => $rowdomains['flag'],
'backup_file_name' => $rowdomains['backup_file_name'],
'backup_status' => $backup_status,
'restore_status' => $restore_status,
));
}
return $res;
} else {
return false;
}
}
static function getMigrationList()
{
global $controller;
$currentuser = ctrl_users::GetUserDetail();
$res = array();
$domains = self::ListMigration($currentuser['username']);
if (!fs_director::CheckForEmptyValue($domains)) {
foreach ($domains as $row) {
// $status = self::getDomainStatusHTML($row['active'], $row['id']);
$res[] = array('flag' => $row['flag'],
'backup_file_name' => $row['backup_file_name'],
'backup_status' => $row['backup_status'],
'restore_status' => $row['restore_status']);
}
return $res;
} else {
return false;
}
}
static function getResult()
{
if (!fs_director::CheckForEmptyValue(self::$cpanel_ip_blank)) {
return ui_sysmessage::shout(ui_language::translate("Your IP Address/Domain Name can't be empty. Please enter a valid IP Address/Domain Name."), "Error");
}
if (!fs_director::CheckForEmptyValue(self::$cpanel_invalid)) {
return ui_sysmessage::shout(ui_language::translate(" Please enter a valid Domaina name or IP address: i.e. '12.345.678.001'"), "Error");
}
if (!fs_director::CheckForEmptyValue(self::$cpanel_username_blank)) {
return ui_sysmessage::shout(ui_language::translate("Please enter the cpanel username"), "Error");
}
if (!fs_director::CheckForEmptyValue(self::$cpanel_Port_Number_blank)) {
return ui_sysmessage::shout(ui_language::translate("Please enter the cpanel port number"), "Error");
}
if (!fs_director::CheckForEmptyValue(self::$cpanel_password_blank)) {
return ui_sysmessage::shout(ui_language::translate("Please enter the cpanel password"), "Error");
}
if (!fs_director::CheckForEmptyValue(self::$server_busy)) {
return ui_sysmessage::shout(ui_language::translate("Server is busy. Kindly check after 5 minutes"), "Error");
}
if (!fs_director::CheckForEmptyValue(self::$ok)) {
return ui_sysmessage::shout(ui_language::translate("Process was stared. Kindly wait for sometimes"), "Success");
}
if (!fs_director::CheckForEmptyValue(self::$auth_fail)) {
return ui_sysmessage::shout(ui_language::translate("Cpanel Authentication Failed. Kindly check it."), "Error");
}
if (!fs_director::CheckForEmptyValue(self::$backup_not_found)) {
return ui_sysmessage::shout(ui_language::translate("Backup File not found"), "Error");
}
if (!fs_director::CheckForEmptyValue(self::$fail_output)) {
return ui_sysmessage::shout(ui_language::translate("Cpanel Failed - ".self::$fail_output), "Error");
}
return "";
}
}