<?php

//////////////////////////////////////////////////////////////
//===========================================================
// clone.php
//===========================================================
// SOFTACULOUS 
// Version : 4.2.8
// Inspired by the DESIRE to be the BEST OF ALL
// ----------------------------------------------------------
// Started by: Alons
// Date:       10th Jan 2009
// Time:       21:00 hrs
// Site:       http://www.softaculous.com/ (SOFTACULOUS)
// ----------------------------------------------------------
// Please Read the Terms of use at http://www.softaculous.com
// ----------------------------------------------------------
//===========================================================
// (c)Softaculous Inc.
//===========================================================
//////////////////////////////////////////////////////////////

if(!defined('SOFTACULOUS')){

	die('Hacking Attempt');

}

//The Install process
function __clone(){

global $__settings, $error, $software, $globals, $replace_data, $source_data;
	
	//Do we meet the Minimum software requirements
	__requirements();
	
	if(!empty($error)){
		return false;
	}
	
	$temp = parse_url($source_data['softurl']);
	$source_data['relativeurl'] = $temp['path'];
	$source_data['domhost'] = $temp['host'];
	
	$temp = parse_url($__settings['softurl']);
	$__settings['relativeurl'] = $temp['path'];
	$__settings['domhost'] = $temp['host'];
	
	if($__settings['ver'] < '6.0.0.0'){
	
		//Safeguard clear_cache.sh file
		$randstr = srandstr(4);
		smkdir($__settings['softpath'].'/soft_'.$randstr.'/', $globals['odc']);
		
		@scopy($__settings['softpath'].'/var/cache/clear_cache.sh', $__settings['softpath'].'/soft_'.$randstr.'/clear_cache.sh');
			
		sclone_replace($replace_data, $__settings['softpath'].'/config.php', true);
		
		$__settings['ser_esdKey'] = serialize(strtolower(__generateUniqueId(33)));
		$update = "UPDATE s_core_config_values SET value='".$__settings['ser_esdKey']."' WHERE id=3;";	
		sdb_query($update, $__settings['softdbhost'], $__settings['softdbuser'], $__settings['softdbpass'], $__settings['softdb']);
		
		$__settings['ser_uniqueid'] = serialize(strtolower(__generateUniqueId(32)));
		$update1 = "UPDATE s_core_config_values SET value='".$__settings['ser_uniqueid']."' WHERE id=4;";	
		sdb_query($update1, $__settings['softdbhost'], $__settings['softdbuser'], $__settings['softdbpass'], $__settings['softdb']);
		
		//For install.lock file
		$file = sfile($__settings['softpath'].'/recovery/install/data/install.lock');
		
		if(empty($file)){
			$error[] = 'Could not read the install.lock file.';
			return false;
		}
		
		$lock_date = trim($file);
		$__settings['lock_date'] = date('YmdHi');
		$replace_data[$lock_date] = $__settings['lock_date'];
		
		sclone_replace($replace_data, $__settings['softpath'].'/recovery/install/data/install.lock', true);
		
		// We need the uniqueid
		$file = sfile($__settings['softpath'].'/recovery/install/data/uniqueid.txt');
		
		if(empty($file)){
			$error[] = 'Could not read the file to get the uniqueid.';
			return false;
		}
		
		$unique_id = trim($file);
		$replace_data[$unique_id] = unserialize($__settings['ser_uniqueid']);
		sclone_replace($replace_data, $__settings['softpath'].'/recovery/install/data/uniqueid.txt', true);
		
		$update2 = "UPDATE s_core_shops SET host='".$__settings['domhost']."', hosts='".$__settings['domhost']."', base_path='".$__settings['relativeurl']."' WHERE id=1;";	
		sdb_query($update2, $__settings['softdbhost'], $__settings['softdbuser'], $__settings['softdbpass'], $__settings['softdb']);
		
	}else{
		
		############### GET ALL THE KEYS #################
		@scopy($software['path'].'/update_appkey.php', $__settings['softpath'].'/update_appkey.php');
	
		$resp = swget($__settings['softurl'].'/update_appkey.php');
		
		//Retrieve APP_SECRET to store in .env file
		if(preg_match('/<appsecret>(.*?)<\/appsecret>/is', $resp, $matches)){
			$__settings['APP_SECRET'] = $matches[1];
		}
		
		//Retrieve public and private key pair and store them in .pem files
		if(preg_match('/<publickey>(.*?)<\/publickey>/is', $resp, $matches1)){
			$__settings['public_key'] = $matches1[1];
		}
		
		if(preg_match('/<privatekey>(.*?)<\/privatekey>/is', $resp, $matches1)){
			$__settings['private_key'] = $matches1[1];
		}
	
		sunlink($__settings['softpath'].'/update_appkey.php');
		####################################################
		
		//For .uniqueid.txt file
		$file = sfile($__settings['softpath'].'/.uniqueid.txt');
		
		if(empty($file)){
			$error[] = 'Could not read the .uniqueid.txt file.';
			return false;
		}
		
		$uniqueid = trim($file);
		$__settings['uniqueid'] = __generateUniqueId(32);
		$replace_data[$uniqueid] = $__settings['uniqueid'];
		
		sclone_replace($replace_data, $__settings['softpath'].'/.uniqueid.txt', true);
		####################
		
		//For .env file
		$file = sfile($__settings['softpath'].'/.env');
		
		if(empty($file)){
			$error[] = 'Could not read the .env file.';
			return false;
		}
		
		soft_preg_replace('/APP_SECRET=("|\')(.*?)("|\')\n/is', $file, $APP_SECRET, 2);
		$replace_data[$APP_SECRET] = $__settings['APP_SECRET'];
		
		soft_preg_replace('/INSTANCE_ID=("|\')(.*?)("|\')\n/is', $file, $INSTANCE_ID, 2);
		$replace_data[$INSTANCE_ID] = $__settings['uniqueid'];
		
		sclone_replace($replace_data, $__settings['softpath'].'/.env', true);
		####################
		
		//For install.lock file
		$file = sfile($__settings['softpath'].'/install.lock');
		
		if(empty($file)){
			$error[] = 'Could not read the install.lock file.';
			return false;
		}
		
		$lock_date = trim($file);
		$__settings['lock_date'] = date('YmdHi');
		$replace_data[$lock_date] = $__settings['lock_date'];
		
		sclone_replace($replace_data, $__settings['softpath'].'/install.lock', true);
		#########################
		
		//For config/jwt/private.pem file
		$file = sfile($__settings['softpath'].'/config/jwt/private.pem');
		
		if(empty($file)){
			$error[] = 'Could not read the private.pem file.';
			return false;
		}
		
		$private_key = trim($file);
		$replace_data[$private_key] = $__settings['private_key'];
		
		sclone_replace($replace_data, $__settings['softpath'].'/config/jwt/private.pem', true);
		####################
		
		//For config/jwt/public_key file
		$file = sfile($__settings['softpath'].'/config/jwt/public.pem');
		
		if(empty($file)){
			$error[] = 'Could not read the public_key file.';
			return false;
		}
		
		$public_key = trim($file);
		$replace_data[$public_key] = $__settings['public_key'];
		
		sclone_replace($replace_data, $__settings['softpath'].'/config/jwt/public.pem', true);
		####################
		
		############## SQL CHANGES ###############
		$query = "select `configuration_value` FROM `system_config` WHERE `configuration_key`= 'core.app.shopId';";
		$result = sdb_query($query, $__settings['softdbhost'], $__settings['softdbuser'], $__settings['softdbpass'], $__settings['softdb']);
		
		$value = $result['0']['configuration_value'];
		
		$array = json_decode($value, true);

		$array['_value']['value'] = $__settings['app_shopid'] = srandstr(16);
		$new_value = json_encode($array);
		
		$replace = "UPDATE `system_config` SET `configuration_value`='".$new_value."' WHERE `configuration_key`= 'core.app.shopId';";
		sdb_query($replace, $__settings['softdbhost'], $__settings['softdbuser'], $__settings['softdbpass'], $__settings['softdb']);
	
		$replace_data['RedirectMatch 301 ^'.$source_data['relativeurl'].'/$ '.$source_data['softurl'].'/public'] = 'RedirectMatch 301 ^'.$__settings['relativeurl'].'/$ '.$__settings['softurl'].'/public';

	}
	
	if(sfile_exists($__settings['softpath'].'/.htaccess')){
	
		// If the installation is on root domain we need to change the below relative URL
		if(is_dom_root($source_data['softpath'])){
			//RewriteBase /shopware/
			$replace_data['RewriteBase \'/\''] = 'RewriteBase \''.$__settings['relativeurl'].'\'';
			$replace_data['RewriteBase /'] = 'RewriteBase '.$__settings['relativeurl'];
			$replace_data['RewriteBase /shopware/'] = 'RewriteBase '.$__settings['relativeurl'].'/';
		}elseif(is_dom_root($__settings['softpath'])){
			$replace_data['RewriteBase \''.$source_data['relativeurl'].'\''] = 'RewriteBase \'/\'';
			$replace_data['RewriteBase '.$source_data['relativeurl']] = 'RewriteBase /';
			$replace_data['RewriteBase '.$source_data['relativeurl'].'/'] = 'RewriteBase /shopware/';
		}
		
		sclone_replace($replace_data, $__settings['softpath'].'/.htaccess', true);		
	}
	
	@srm($__settings['softpath'].'/var/cache/');
	@smkdir($__settings['softpath'].'/var/cache/', $globals['odc']);
	@schmod($__settings['softpath'].'/var/', $globals['odc'], 1);
	@schmod($__settings['softpath'].'/media/', $globals['odc'], 1);
	
	@scopy($__settings['softpath'].'/soft_'.$randstr.'/clear_cache.sh', $__settings['softpath'].'/var/cache/clear_cache.sh');
	@scopy($__settings['softpath'].'/var/log/.htaccess', $__settings['softpath'].'/var/cache/.htaccess');
		
	srm($__settings['softpath'].'/soft_'.$randstr.'/');
}

//Check whether the Minimum Software configuration matches
function __requirements(){

global $__settings, $error, $software;
	
	return true;

}

function __generateUniqueId($length = 32, $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
    {
        $str = '';
        $max = mb_strlen($keyspace, '8bit') - 1;
        for ($i = 0; $i < $length; ++$i) {
            $str .= $keyspace[rand(0, $max)];
        }

        return $str;
    }
	
function __post_unzip(){
	global $source_data, $replace_data, $__settings;
	
	if(preg_match('/^http:\/\//is', $source_data['softurl'])){
		$source_url =  preg_replace('/^http:\/\//is', '', $source_data['softurl']);
	}elseif(preg_match('/^http:\/\/www\./is', $source_data['softurl'])){
		$source_url =  preg_replace('/^http:\/\/www\./is', '', $source_data['softurl']);
	}elseif(preg_match('/^https:\/\//is', $source_data['softurl'])){
		$source_url =  preg_replace('/^https:\/\//is', '', $source_data['softurl']);
	}elseif(preg_match('/^https:\/\/www\./is', $source_data['softurl'])){
		$source_url =  preg_replace('/^https:\/\/www\./is', '', $source_data['softurl']);
	}
	
	if(preg_match('/^http:\/\//is', $__settings['softurl'])){
		$dest_url =  preg_replace('/^http:\/\//is', '', $__settings['softurl']);
	}elseif(preg_match('/^http:\/\/www\./is', $__settings['softurl'])){
		$dest_url =  preg_replace('/^http:\/\/www\./is', '', $__settings['softurl']);
	}elseif(preg_match('/^https:\/\//is', $__settings['softurl'])){
		$dest_url =  preg_replace('/^https:\/\//is', '', $__settings['softurl']);
	}elseif(preg_match('/^https:\/\/www\./is', $__settings['softurl'])){
		$dest_url =  preg_replace('/^https:\/\/www\./is', '', $__settings['softurl']);
	}
	
	$replace_data['http://'.$source_url] = 'http://'.$dest_url;
	$replace_data['http://www.'.$source_url] = 'http://www.'.$dest_url;
	$replace_data['https://'.$source_url] = 'https://'.$dest_url;
	$replace_data['https://www.'.$source_url] = 'https://www.'.$dest_url;
}

?>