Files
resatennis_tyroltenn/IDrive/.config/action.php

1268 lines
42 KiB
PHP
Executable File

<?php
require_once "path.php";
$action = isset($_REQUEST["action"]) ? $_REQUEST["action"] : "";
if(!isset($_SESSION['validUser']) || $_SESSION['validUser'] !== true)
exit(header("Location:../index.php"));
if(isset($_REQUEST['deviceID'])){
$deviceID = rawurldecode($_REQUEST['deviceID']);
$_SESSION['selectedRestoreDeviceID'] = $deviceID;
}
$arr = array();
switch($action) {
case "update_job":
try {
$job = isset($_REQUEST["job"]) ? $_REQUEST["job"] : "";
$data = isset($_REQUEST["data"]) ? $_REQUEST["data"] : "";
$weekday_selection = isset($_REQUEST["weekday_selection"]) ? $_REQUEST["weekday_selection"] : "";
$start_immediately = isset($data['start_immediately'])?$data['start_immediately']:'';
if($start_immediately!=''){
$exp = explode($data["job_type"]."_",$job,2);
$jobname = count($exp)>1?$exp[1]:$exp[0];
$startPidPath = Scheduler::$user_dir.$data["job_type"]."/".$jobname."/$startPid";
if(file_exists($startPidPath)){
$arr["msg"] = "Job is already in progress. Please try again later";
break;
} else if($machine=='twotier'){
$startPidfilePath = Scheduler::$backup_dir."+ManualTask/$startPid";
//if(isJobRunning($startPidfilePath)){
if(file_exists($startPidfilePath)){
$arr["msg"] = "Manual backup is in progress. Please try again later";
break;
}
}
Scheduler::Log('Starting ' . $data["job_type"] . ' Job: ' . $jobname);
$path = Scheduler::$user_dir.$data["job_type"]."/".$jobname."/".ucfirst($data['job_type'])."setDisplayFile.txt";
if(customFileSize($path)>0){
Scheduler::StartJobImmediately($job, $data["job_type"]);
$exp = explode($data['job_type'],$job,2);
if(count($exp)<=1){
$job = $data['job_type'].'_'.$job;
}
$updated_job = Scheduler::UpdateJobData($job, $data, $weekday_selection);
$arr["msg"] = "Job started successfully";
$arr["jobs"] = $updated_job;
Scheduler::Log(ucfirst($data["job_type"]) . 'Job Started Successfully: ' . $jobname);
} else {
$arr["msg"] = "Failed to start <b>".$jobname."</b>. Please add content to ".lcfirst($data['job_type'])." set and try again";
Scheduler::Log('Failed to start ' . $data['job_type'] . ' job: ' . $jobname);
}
} else {
$exp = explode($data['job_type'],$job,2);
if(count($exp)<=1){
$job = $data['job_type'].'_'.$job;
}
$updated_job = Scheduler::UpdateJobData($job, $data, $weekday_selection);
$arr["msg"] = "Job updated successfully.";
$arr["jobs"] = $updated_job;
Scheduler::Log($data['job_type'] . 'Job: ' . $job . ' updated successfully.');
}
} catch (Exception $e) {
$arr["msg"] = "Error in updating job";
}
break;
case "delete_job":
try {
$job = isset($_REQUEST["job"]) ? $_REQUEST["job"] : "";
$updated_job = Scheduler::DeleteJob($job);
$arr["msg"] = "Job deleted successfully.";
$arr["jobs"] = $updated_job;
Scheduler::Log('Job: ' . $job. ' deleted successfully.');
} catch(Exception $e) {
$arr["msg"] = "Error in deleting job";
}
break;
case "cancel_job":
try {
$job = isset($_REQUEST["job"]) ? $_REQUEST["job"] : "";
$cancel_job = Scheduler::CancelJob($job);
$arr["msg"] = "Job cancelled successfully.";
Scheduler::Log('Job: ' . $job. ' cancelled successfully.');
} catch (Exception $e) {
$arr["msg"] = "Error in cancelling job";
}
break;
case "run_job_immediately":
try {
$job = isset($_REQUEST["job"]) ? $_REQUEST["job"] : "";
$job_type = isset($_REQUEST["job_type"]) ? $_REQUEST["job_type"] : "";
Scheduler::StartJobImmediately($job, $job_type);
$arr["msg"] = "Job Run successfully.";
Scheduler::Log('Job: ' . $job. ' Run successfully.');
} catch (Exception $e) {
$arr["msg"] = "Error in running job";
}
break;
case "cront_test":
try {
Scheduler::debug_Log("cront_test");
} catch (Exception $e) {
$arr["msg"] = "Error in cront_test";
}
break;
case "watch_logs":
$updated_logs = Log::WatchLogs();
$arr = $updated_logs;
break;
case "scheduler_list_table":
$jobs = Scheduler::ReadJobs();
$selected_job = isset($_REQUEST["selected_job"]) ? $_REQUEST["selected_job"] : "";
?>
<table width="100%" border="0" cellspacing="0" class="folderBackup jobs_table" cellpadding="6" align="center" >
<?php
foreach($jobs as $k=>$job) {
$job_type = $job["job_type"];
$scheduler_selection = isset($job["scheduler"]["scheduler_selection"]) ? ucfirst($job["scheduler"]["scheduler_selection"]) : "";
if(isset($job["scheduler"]["weekday_selection"])) {
$weekday_selection = json_decode($job["scheduler"]["weekday_selection"], true);
if(($scheduler_selection == "Daily" || $scheduler_selection == "") && count($weekday_selection) < 7 && count($weekday_selection) > 0) {
$scheduler_selection = "Weekly";
}
$weekday_selection = @implode(",", $weekday_selection);
$weekday_selection = " - ".$weekday_selection;
}else {
$weekday_selection = "";
}
if(isset($job["scheduler"]["start_hour"])) {
$time = $job["scheduler"]["start_hour"].":".str_pad($job["scheduler"]["start_minute"], 2, '0', STR_PAD_LEFT)." ".strtoupper($job["scheduler"]["start_meridian"]);
} else {
$time = "";
}
if($scheduler_selection == "Hourly") {
$time = "00:".str_pad($job["scheduler"]["start_minute"], 2, '0', STR_PAD_LEFT);
}
if($scheduler_selection == "Daily") {
$weekday_selection = "";
}
if($scheduler_selection == 'Monthly'){
$weekday_selection = " - ".$job["scheduler"]["day_of_month"].ordinal_suffix($job["scheduler"]["day_of_month"])." day";
}
if(isset($job["scheduler"]["start_immediately"])) {
$scheduler_selection = "";
$time = "";
}
$jobName = substr($k,(strlen($job["job_type"])+1));
$selected_job = $selected_job==''?$k:$selected_job;
?>
<tr id="<?php print $k;?>" <?php if($selected_job == $k) {?> bgcolor="#EFF9FF" <?php }else {?>bgcolor="#FFFFFF" <?php }?>>
<td class="action_jobname" title="<?php echo $jobName;?>" ><?php echo $jobName;?></td>
<td class="action_jobtype" ><?php echo $job["job_type"];?></td>
<td class="action_jobweekly" ><?php echo $scheduler_selection.$weekday_selection;?></td>
<td class="action_jobtime" ><?php echo $time;?></td>
<td class="action_cancel"><span <?php
$jobInProgress = chkJobInProgress($jobName, $job_type);
if($jobInProgress == 'running')
$class="ScheduledCancel_job";
else if($jobInProgress == 'cancelling')
$class="ScheduledCanceling_job";
else
$class="DisableCancelJob";
?> class="<?php echo $class; ?>">Stop Job</span>
</td>
<td class="action_delete"> <span class="shdeuledDelete_job" alt = "<?php echo $class; ?>">Delete Job</span> </td>
</tr>
<?php
} ?>
</table>
<?php
break;
case "log_list_table":
$logs = Log::ReadLogs((isset($_GET['duration']) ? $_GET['duration'] : ''));
$no_logs = $logs["count"] == 0?' style="display:block"' : "";
?>
<script>
IDrive.LogList = <?php echo json_encode($logs["logs"]);?>;
</script>
<div class="nfiles" <?php print $no_logs; ?> ><?php print NO_LOGS;?></div>
<table width="100%" border="0" cellspacing="0" class="folderBackup logs_table" cellpadding="6" align="center" id="logRows">
</table>
<?php
break;
case "rename":
$oldPath = rawurldecode($_REQUEST["oldPath"]);
$newPath = rawurldecode($_REQUEST["newPath"]);
$oldPath = phpRealEscapeString($oldPath);
$newPath = phpRealEscapeString($newPath);
$output = renamePath($oldPath, $newPath);
$arr[] = $output;
break;
case "renameRestoreSetItems":
$oldPath = rawurldecode($_REQUEST["oldPath"]);
$newPath = rawurldecode($_REQUEST["newPath"]);
$oldPath = phpRealEscapeString($oldPath);
$newPath = phpRealEscapeString($newPath);
$output = renameRestoreSetItems($oldPath, $newPath);
$arr['backupLocation'] = renameBackupLocation($oldPath, $newPath);
renameRestoreList($oldPath, $newPath);
$remoteSearchDir = Scheduler::$user_dir."Restore/.+searchList/";
systemCmdExecutionViaPhp("rm -r $remoteSearchDir");
break;
case "share":
$sharedFiles=$_REQUEST['sharedFiles'];
$exp = explode("\n",$sharedFiles);
foreach($exp as $item){
if(trim($item)!=''){
$itemData = explode("/",$item);
$itemName = array_pop($itemData);
if($itemName == '')
$itemName = array_pop($itemData);
$sharedPath = implode("/",$itemData);
$sharefiles .= '<li class="f_name_view"><p>'.$itemName.'</p><div>Home'.$sharedPath.'</div><span></span></li>';
}
}
$sharefiles .= '<input type="hidden" name="itemPath" id="itemPath" value="'.$sharedFiles.'" />';
$arr['sharePath'] = $sharefiles;
break;
case "sendShareEmail":
$mailcontent = rawurldecode($_REQUEST['mailcontent']);
$emailAddress = $_REQUEST['emailAddress'];
$sharedFiles='';
$itemPath = $_REQUEST['itemPath'];
if(!empty($_SESSION['userName'])){
$userName = $_SESSION['userName'];
$password = base64_decode($_SESSION['password']);
$deviceID = isset($_GET['deviceID']) ? urlencode(rawurldecode($_GET['deviceID'])) : '';
$dedupAcc = '';
if($_SESSION['dedup']){
$dedupAcc = "&DEDUP=YES";
if($deviceID)
$deviceID = substr($deviceID, 4, -4);
}
$itemPathArray = explode("\n",$itemPath);
foreach($itemPathArray as $path){
if(trim($path)!=''){
$sharedFiles .= "&PATHS=".urlencode($deviceID.$path);
}
}
$shareURLData = 'USERNAME='.urlencode($userName).'&PASSWORD='.urlencode($password);
$shareURLData .= '&rec_email='.urlencode($emailAddress).'&description='.urlencode($mailcontent);
$shareURLData .= $sharedFiles."&NEW=YES&json=yes".$dedupAcc;
$shareOutputArr = getCurlOutput(getHash("02"), $shareURLData);
if($shareOutputArr['status'] == true){
$shareOutput = json_decode($shareOutputArr['output']);
$result = $shareOutput->res;
if(trim($result)=="SUCCESS")
$arr[] = true;
else
$arr[] = false;
}
else {
$arr[] = false;
Scheduler::Log("Share CGI: "." Output: ".$shareOutputArr['output']. " Error: ".$shareOutputArr['error']);
}
}
else
$arr[] = false;
break;
case "getVersionDetails" :
$trash_Search = 0;
if(isset($_REQUEST['trash']))
$trash_Search = 1;
$itemName = $_REQUEST['itemName'];
$isLocalFile = FALSE;
if(isset($_REQUEST['deviceID'])) {
$isLocalFile = TRUE;
$_SESSION['selectedRestoreDeviceID'] = rawurldecode($_REQUEST['deviceID']);
}
$arr = getVersionInfo($itemName, $isLocalFile);
$arr[] = $itemName;
break;
case "getDetail":
$itemName = $_REQUEST['itemName'];
$page = $_REQUEST["page"];
$devicePath = phpRealEscapeString($_REQUEST["deviceID"]);
$dedupBucket = phpRealEscapeString($_REQUEST["dedupBucket"]);
$itemName = phpRealEscapeString($itemName);
if($page=='Restore')
$arr = getProperties($itemName);
else
$arr = getDirDetail($itemName, $devicePath, $dedupBucket);
$explode = explode("/",$itemName);
$itemName = array_pop($explode);
$arr[] = $itemName;
$arr[] = "Home".implode("/",$explode)."/";
break;
case "createDir";
$newDirName = rawurldecode($_REQUEST['newDirName']);
$newDirPath = rawurldecode($_REQUEST['newDirPath']);
$newDirName = phpRealEscapeString($newDirName);
$newDirPath = phpRealEscapeString($newDirPath);
$out = createDir($newDirName, $newDirPath, $_SESSION['encType']);
$arr[] = $out[0];
if(strpos($out[1],'folder exists'))
$arr[] = 'Folder name already exists';
else if(!$out[0])
$arr[] = 'Could not create folder';
else {
$arr[]= "Folder <b>$newDirName</b> has been created successfully";
Scheduler::Log('Directory ' . $newDirName . ' has been created successfully');
updateNewDirInRestoreList($newDirPath,$newDirName);
$remoteSearchDir = Scheduler::$user_dir."Restore/.+searchList/";
systemCmdExecutionViaPhp("rm -r $remoteSearchDir");
}
$arr[] = date('Y/m/d h:i:s A'); //2014/09/23 05:54:40 PM
break;
case "startLocalSearch":
if(isset($_SESSION['localPatternPath'])){
unset($_SESSION['localPatternPath']);
unset($_SESSION['currentLocalSearchPath']);
}
$searchKeyword = searchKeyword(rawurldecode($_REQUEST['searchKeyword'])); //Constructing keyword
$searchKeyword = phpRealEscapeString($searchKeyword);
$searchKeyword = trim($searchKeyword,'/');
$searchPath = rawurldecode($_REQUEST['searchPath']);
$searchPath = phpRealEscapeString($searchPath);
$localSearchPath = Scheduler::$user_dir."Backup/.+searchList";
if(!is_dir($localSearchPath)){
/* Creating the directory ".+searchList" if not exist */
if(!mkdir($searchDirLocal, $permissionVal))
$arr[] = "Failed to create Directory $searchDirLocal";
@chmod($searchDirLocal, $permissionVal);
}
$searchKeyword = getSearchPattern($searchKeyword);
$localPatternPath = createSearchDir($searchPath.$searchKeyword,$localSearchPath);
if(file_exists($localPatternPath."/page1")){
$_SESSION['localPatternPath'] = $localPatternPath;
$_SESSION['currentLocalSearchPath'] = $localPatternPath."/";
$arr[] = false;
break;
}
createLocalSearchTxt($localPatternPath,$searchKeyword,$searchPath);
if(customFileSize("$localPatternPath/".SEARCH_FILE)>0) {
if(!($handle = fopen("$localPatternPath/".PID_FILE, "w"))){
Scheduler::Log("Failed to create $localPatternPath/" . PID_FILE);
exit;
}
else
@chmod("$localPatternPath/".PID_FILE, $permissionVal);
$exec = phpScriptExecution("localSearch.php","$localPatternPath",0);
pclose(popen("$exec &","r"));
Scheduler::Log("Local search started:$searchKeyword");
$_SESSION['localPatternPath'] = $localPatternPath;
$_SESSION['currentLocalSearchPath'] = $localPatternPath."/";
$arr[] = true;
}
break;
case "getSearchRes":
$trashFlag = $_REQUEST['trash'];
if($trashFlag) $currPage = isset($_REQUEST['page'])?"trash_page".$_REQUEST['page']:"trash_page1";
else $currPage = isset($_REQUEST['page'])?"page".$_REQUEST['page']:"page1";
$type = $_REQUEST['type'];
$Resultcount = $_REQUEST['count'];
$isflag = 0;
if($type=='backup'){
$localPatternPath = $_SESSION['localPatternPath'];
if($_REQUEST['page']==1){
$count = 0;
$isflag = 1;
while(!is_dir($localPatternPath)){
sleep(2);
$count++;
if($count >= 60){
$isflag = 0;
break;
}
}
$path = $localPatternPath."/";
} else {
$path = $_SESSION['currentLocalSearchPath'];
$isflag = 1;
}
if($isflag==1){
$page = $path.$currPage;
$arr = getSearchResult($page,$path.PID_FILE,$Resultcount);
}
} else if($type=='restore'){
if($trashFlag)
$path = $_SESSION['currentRemoteTrashSearchPath'];
else
$path = $_SESSION['currentRemoteSearchPath'];
$page = $path.$currPage;
$arr = getSearchResult($page,$path.PID_FILE,$Resultcount);
}
break;
case "stopSearch":
if($_REQUEST['type'] == 'backup' and !empty($_SESSION['currentLocalSearchPath'])) {
$cmd = phpScriptExecution(JOBTERMINATE, $_SESSION['currentLocalSearchPath'], 0);
pclose(popen("$cmd &","r"));
}
else if($_REQUEST['type']=='restore' and !empty($_SESSION['currentRemoteSearchPath'])){
$cmd = phpScriptExecution(JOBTERMINATE,$_SESSION['currentRemoteSearchPath'],0, FALSE, TRUE);
pclose(popen("$cmd &","r"));
}
else if($_REQUEST['type']=='trash' and !empty($_SESSION['currentRemoteTrashSearchPath'])){
$cmd = phpScriptExecution(JOBTERMINATE,$_SESSION['currentRemoteTrashSearchPath'],0, FALSE, TRUE);
popen("$cmd","r");
}
else if($_REQUEST['type']=='archive'){ //Modified by Sajana for Archive Cleanup job termination...
$_SESSION["progress_stat"] = 1;
$archive_dir = Scheduler::$archiveclean_dir.$_SESSION['manual_backupset']."/";
$cmd = phpScriptExecution(JOBTERMINATE,$archive_dir,0);
pclose(popen("$cmd &","r"));
$resultfile = $archive_dir.ARCHIVERESULT;
$countfile = $archive_dir.ARCHIVECOUNT;
$filesOnly = $archive_dir.FILESONLY;
$cleanupStatusFile = $archive_dir.CLEANUP_STATUS;
$temp = $archive_dir."temp/";
if(is_dir($temp))
removeItems($temp);
@unlink($resultfile);
@unlink($countfile);
@unlink($filesOnly);
@unlink($cleanupStatusFile);
}
else if($_REQUEST['type']=='removeArchivePid'){
$archive_dir = Scheduler::$archiveclean_dir.$_SESSION['manual_backupset']."/";
$archivePid = $archive_dir.PID_FILE;
$resultfile = $archive_dir.ARCHIVERESULT;
$countfile = $archive_dir.ARCHIVECOUNT;
@unlink($archivePid);
@unlink($resultfile);
@unlink($countfile);
$temp = $archive_dir."temp/";
if(is_dir($temp)){
removeItems($temp);
}
}
else
$res = "is not running";
$arr[] = true;
$arr[] = "Execution Terminated";
break;
case "startRemoteSearch":
if(isset($_SESSION['currentRemoteSearchPath']))
unset($_SESSION['currentRemoteSearchPath']);
if(isset($_SESSION['currentRemoteTrashSearchPath']))
unset($_SESSION['currentRemoteTrashSearchPath']);
$trashSearch = 0;
if(isset($_REQUEST['trash']))
$trashSearch = 1;
$searchKeyword = strtolower(rawurldecode($_REQUEST['searchKeyword']));
$searchKeyword = getSearchPattern($searchKeyword);
$searchPath = rawurldecode($_REQUEST['searchPath']);
if($searchKeyword == "*" && $trashSearch == 1){
GLOBAL $searchDirTrashRemote;
GLOBAL $searchDirRemote,$empty_trash;
$trash_Search = 1;
$empty_trash = 0;
$searchDirRemote = $searchDirTrashRemote;
$arr[] = remoteInitialSearch($searchKeyword,$searchPath,$searchDirTrashRemote);
}
else{
GLOBAL $searchDirRemote;
$trash_Search = 0;
$arr[] = remoteSearch($searchKeyword,$searchPath,$trashSearch);
}
break;
case "emptyTrash":
GLOBAL $searchDirTrashRemote,$searchDirRemote,$trash_Search;
$empty_trash = 1;
$trash_Search = 1;
$trashDirExists = true;
//$cmd = perlScriptExecution(JOBTERMINATE,$searchDirTrashRemote,0);
$cmd = phpScriptExecution(JOBTERMINATE,$searchDirTrashRemote,0);
pclose(popen("$cmd &","r"));
$searchDirRemote = $searchDirTrashRemote."/EmptyTrash";
if(!is_dir($searchDirTrashRemote."/EmptyTrash/")){
if(!is_dir($searchDirTrashRemote)){
if(!mkdir($searchDirTrashRemote, $permissionVal)){
$trashDirExists = false;
}
@chmod($searchDirTrashRemote,$permissionVal);
}
if(!is_dir($searchDirTrashRemote."/EmptyTrash/")){
if(!mkdir($searchDirTrashRemote."/EmptyTrash/", $permissionVal)){
$trashDirExists = false;
}
@chmod($searchDirTrashRemote."/EmptyTrash/",$permissionVal);
}
}
if($trashDirExists){
if(isset($_REQUEST['deviceID'])){
$_SESSION['selectedRestoreDeviceID'] = rawurldecode($_REQUEST['deviceID']);
chdir("$searchDirRemote/");
file_put_contents($searchDirRemote."/trash_page1",'/');
@chmod($searchDirRemote."/trash_page1",$permissionVal);
$outputArray = deleteItems(REMOVE_FROM_TRASHOP,$searchDirRemote."/trash_page1","");
} else {
$outputArray = remoteInitialSearch("*","/",$searchDirRemote);
}
if($outputArray['DELETEOP']['CONSIDERED'] == 0 || $outputArray['DELETEOP']['HAPPENED'] == 0)
$outputArray['STATUS'] = DELETEOP_FAILED;
else if($outputArray['DELETEOP']['CONSIDERED'] > 1)
{
$outputArray['REMOVE_JS_ARRAY'] = 1;
if($OP != REMOVE_FROM_TRASHOP && $restoreListFolderPath!='/' && $searchDir!='/')
systemCmdExecution("rm -rf '$restoreListFolderPath' '$searchDir' ");
$outputArray['STATUS'] = DELETEOP_SUCCESSFUL;
}
else if($outputArray['DELETEOP']['CONSIDERED'] == 1)
{
$outputArray['REMOVE_JS_ARRAY'] = 0;
$singleItemDelete = $itemsForDelete[0];
$removeFolder = $restoreListFolderPath.$singleItemDelete;
$singleItemDeleteParentFolder = substr($removeFolder, 0, strrpos($removeFolder, "/"));
$listTxt = $singleItemDeleteParentFolder."/list.txt";
if($OP != REMOVE_FROM_TRASHOP && $searchDir!='/' && $removeFolder!='/')
systemCmdExecution("rm -rf '$searchDir' '$removeFolder' '$listTxt' ");
$outputArray['STATUS'] = DELETEOP_SUCCESSFUL;
}
}
header("Content-type:application/json");
echo json_encode($outputArray);
exit;
case "emptyTrashChk":
$outputArray = emptyTrashSearch();
if($outputArray['DELETEOP']['CONSIDERED'] == 0 || $outputArray['DELETEOP']['HAPPENED'] == 0)
$outputArray['STATUS'] = DELETEOP_FAILED;
else if($outputArray['DELETEOP']['CONSIDERED'] > 1)
{
$outputArray['REMOVE_JS_ARRAY'] = 1;
$outputArray['STATUS'] = DELETEOP_SUCCESSFUL;
}
else if($outputArray['DELETEOP']['CONSIDERED'] == 1)
{
$outputArray['REMOVE_JS_ARRAY'] = 0;
$outputArray['STATUS'] = DELETEOP_SUCCESSFUL;
}
if($outputArray['SIZE'] > 0 && $searchDirTrashRemote!='/')
systemCmdExecution("rm -rf '$searchDirTrashRemote'");
header("Content-type:application/json");
echo json_encode($outputArray);
exit;
case "setEncryption":
$encType = ucfirst($_POST['encryptionKey']);
$passwrd = base64_decode($_SESSION['password']);
$pvtKey ='';
if($encType != 'Default')
$pvtKey = rawurldecode($_POST['pvtKey']);
encodePathWrapper($passwrd, $encType, $pvtKey);
$confXmlArray = confAccount($encType, $pvtKey);
$result = (string)$confXmlArray['message'];
if($result == "SUCCESS") {
$dir = getNAShostname();
$dirOutput = createDir($dir, "", $encType);
$_SESSION['configVerified'] = true;
$_SESSION['encType'] = $encType;
$arr = array(TRUE);
} else {
Scheduler::Log("Error in encryption key setup : " . $confXmlArray['desc']);
$arr = array(FALSE, $confXmlArray['desc']);
}
break;
case "validateEncryption":
$encType = 'Private';
$passwrd = base64_decode($_SESSION['password']);
//$pvtKey = rawurldecode($_POST['encryptKey']);
$pvtKey = $_POST['encryptKey'];
encodePathWrapper($passwrd, $encType, $pvtKey);
$serverOutput = getEVSServerAddr(); //Getting & Assigning EVS server address to session variable
if($serverOutput != ''){
if($_SESSION['dedup'])
$dirOutput = getDedupDeviceList();
else {
$dir ='';
if(file_exists($mpc))
$dir = file_get_contents($mpc);
if(empty($dir))
$dir = getNAShostname();
$dirOutput = createDir($dir, "", $encType);
}
if($dirOutput[0] == false && strpos($dirOutput[1], "encryption verification failed") !== false){
$encPvtkeyPath = Scheduler::$user_dir."IDPVT";
$result = "FAIL";
unlink($encPvtkeyPath);
$arr[] = false;
$arr[] = INVALID_PRIVATE_KEY;
}
else if($dirOutput[0] == false && strpos($dirOutput[1], "Proxy Authentication Required") !== false){
$encPvtkeyPath = Scheduler::$user_dir."IDPVT";
$result = "FAIL";
unlink($encPvtkeyPath);
$arr[] = false;
$arr[] = INVALID_PROXY;
} else if(strpos($dirOutput[1], "private encryption key must be between") !== false){
$encPvtkeyPath = Scheduler::$user_dir."IDPVT";
$result = "FAIL";
unlink($encPvtkeyPath);
$arr = array(FALSE, INVALID_PRIVATE_KEY_LENGTH);
} else {
$_SESSION['configVerified'] = true;
$_SESSION['encType'] = $encType;
$arr[] = true;
}
}
else {
$arr[] = false;
$arr[] = NO_EVS_SERVER;
}
break;
case "addToExcludeList": //Added by sajana and modified by Deepak for addToExcludeList option...
$itemName = rtrim(rawurldecode(trim($_REQUEST['itemName'],"\n")),'/');
$itemType = trim($_REQUEST['itemType']);
$itemName = phpRealEscapeString($itemName);
$exludeStatus = addToExcludeList($itemName, $itemType, $excludeFullFile);
$_SESSION['fullEntry'] = file($excludeFullFile, FILE_IGNORE_NEW_LINES);
$arr = array($exludeStatus[0], $exludeStatus[1]);
break;
case "getSharedList";
getSharedList();
break;
case "createDefaultBackupSet";
createDefaultBackupSet();
break;
case "deleteArchive" : // archive cleanup delete call.
$selected_backupset = $_SESSION['manual_backupset'];
$deleteFile = Scheduler::$archiveclean_dir.$selected_backupset."/".ARCHIVERESULT;
$countFile = Scheduler::$archiveclean_dir.$selected_backupset."/".ARCHIVECOUNT;
$not_exit_count = 0;
if(file_exists($countFile)) {
$_SESSION['totalFileToDelete'] = 0;
$_SESSION['countDeleted'] = 0;
$values = file_get_contents($countFile);
$tempval=explode("\n",$values);
$total_count = isset($tempval[2])?$tempval[2]:0;
$not_exit_count = isset($tempval[3])?$tempval[3]:0;
}
$delStatus = deleteItems(ARCHIVEOP,$deleteFile,"", $not_exit_count);
if($delStatus == "")
$arr[0]=true;
else
$arr[0]=$delStatus;
unset($_SESSION['totalFileToDelete']);
unset($_SESSION['countDeleted']);
$arr[1] = $_SESSION['deleteCommand'];
break;
case "deletedArchiveStatus" : // archive cleanup delete call.
$jobName = Scheduler::$manual_dir;
$countFile = Scheduler::$archiveclean_dir.$jobName."/".ARCHIVECOUNT;
$countDeleted = file_get_contents($countFile);
if($countDeleted != '')
$_SESSION['countDeleted'] = $countDeleted;
if($_SESSION['totalFileToDelete'] == 0)
$arr['response'] = 'Deleting...';
else
$arr['response'] = "Deleting... (".$_SESSION['countDeleted']." of ".$_SESSION['totalFileToDelete'].")";
break;
case "archiveStatus" : // archive cleanup file progress.
$jobName = Scheduler::$manual_dir;
$countFile = Scheduler::$archiveclean_dir.$jobName."/".ARCHIVECOUNT;
$cleanupStatusFile = Scheduler::$archiveclean_dir.$jobName."/".CLEANUP_STATUS;
$arr['operation_status'] = "scanning";
if(file_exists($cleanupStatusFile)){
$status = file_get_contents($cleanupStatusFile);
$exp = explode("\n",trim($status));
foreach($exp as $line){
if($line=='progress_stat=1'){
$arr['operation_status'] = "completed";
@unlink($cleanupStatusFile);
} elseif(strstr($line,'ERR=')){
$error = str_replace("ERR=","",$line);
$arr['Error'] = trim($error);
}
}
}
$arr['total_count'] = 0;
if(file_exists($countFile)){
$readCount = file_get_contents($countFile);
$countValues = explode("\n", $readCount);
if(count($countValues)>1){
$arr['files_scanned'] = trim($countValues[1]);
$arr['total_count'] = trim($countValues[2]);
}
}
break;
case "archivePerc" : //archive percentage
$countFile = Scheduler::$archiveclean_dir.$_SESSION['manual_backupset']."/".ARCHIVECOUNT;
$readCount = file_get_contents($countFile);
$countValues = explode("\n", $readCount);
$arr['manualPerc'] = $_SESSION['manual_per'];
$arr['total_count'] = $countValues[2];
$arr['total_del_count'] = $countValues[3];
break;
case "deleteCancel":
$archive_dir = Scheduler::$archiveclean_dir.$_SESSION['manual_backupset']."/";
Scheduler::debug_Log("perlScriptExecution--archivedir " . $archive_dir);
$cmd = phpScriptExecution(JOBTERMINATE,$archive_dir,0);
pclose(popen("$cmd &","r"));
break;
case "deleteAction":
$outputArray = deleteAction();
header("Content-type:application/json");
echo json_encode($outputArray);
exit;
break;
case "checkJobRunning":
$archivePath = Scheduler::$archiveclean_dir;
$jobstatus = checkIfJobRunning($archivePath);
$arr['jobstatus'] = false;
if($jobstatus == 1)
$arr['jobstatus'] = true;
break;
case "deleteOpCancel":
$delete_dir = Scheduler::$delete_dir;
$cmd = phpScriptExecution(JOBTERMINATE,$delete_dir,0);
pclose(popen("$cmd &","r"));
break;
case "startTrashList":
$itemSelected = isset($_GET['fullPath']) ? $_GET['fullPath'] : '';
if(strpos($itemSelected, "/") !== FALSE)
$itemSelected = rtrim($itemSelected, "/");
$fullPath = "$itemSelected/";
if(1 < strlen($fullPath))
$fullPath = substr($fullPath, 0, -1);
if(substr($fullPath, -1)!= "/")
$fullPath.="/";
GLOBAL $trashListPath;
$trashListPath = constructRestoreFileName($fullPath,1);
if(file_exists($trashListPath))
$trashListPathSize = customFileSize($trashListPath);
if(!file_exists($rListPath) || $rListPathSize==0 )
{
if(isset($_SESSION['currentRemoteSearchPath'])) unset($_SESSION['currentRemoteSearchPath']);
$searchKeyword = rawurldecode($fullPath);
$searchKeyword = getSearchPattern($searchKeyword);
$arr[] = trashListing($searchKeyword);
}
else
$arr['Trashlist'] = 1;
break;
case "getTrashRes" :
$Resultcount = $_REQUEST['count'];
$path = $_SESSION['currentRemoteSearchPath'];
if($_REQUEST['path']) $path = $restoreListFolderPath.$_REQUEST['path'];
$page = $path."Trashlist.txt";
$arr = getSearchResult($page,$path."pid.txt",$Resultcount);
if($arr[0]===0) {
if(file_exists($path."pid.txt")) {
$arr[0]=0;
$arr[1]=1;
$arr[2]=$path;
$arr[3]=$Resultcount;
$arr[4]="Result file not found yet. Search script running";
}
}
break;
case "checkWritePermission":
$itemName = $_REQUEST['dirPath'];
$itemName = phpRealEscapeString($itemName);
file_put_contents($temp_file, ISWRITABLE."\n$itemName");
@chmod($temp_file,$permissionVal);
$iswritable = phpScriptExecution(OPERATIONSFILE, scheduler::$user_dir, 1);
if($iswritable == 'writable')
$arr[] = true;
else
$arr[] = false;
break;
case "ScheduledTaskWatcher":
$startPidPath = Scheduler::$backup_dir.DEFAULT_BACKUPSET."/".START_PID;
$userCancelFile = Scheduler::$backup_dir.DEFAULT_BACKUPSET."/".CANCEL_PATH;
$arr[] = file_exists($startPidPath)?true:false;
$arr[] = file_exists($userCancelFile)?true:false;
break;
case "update":
if($machine == 'twotier') {
$output = updateIDriveApp();
header('Location: /' . CONFIG . '/logout.php');
} else if($machine == SYNOLOGY_LOCAL) {
addAppUpdateLockFile();
$output = updateIDriveApp();
# wait a second for the perl to get the execution handle
sleep(5);
while(!clearAppUpdateLock()) {
sleep(1);
}
header('Location: ./logout.php');
}
exit(0);
break;
case "getProxySettings":
$output = getProxySettings();
if(count($output)>0){
$ipAddress = trim($output[0]);
$port = trim($output[1]);
$username = trim($output[2]);
$password = base64_encode(rawurlencode(trim($output[3])));
$arr[] = true;
$arr[] = array('ipAddress'=>$ipAddress,'port'=>$port,'username'=>$username,'password'=>$password);
$arr[] = PROXY_DETECTED;
$_SESSION['proxy_option'] = 'autodetect';
$_SESSION['ipAddress'] = $ipAddress;
$_SESSION['port'] = $port;
$_SESSION['proxyUserName'] = $username;
$_SESSION['proxyPassword'] = $password;
} else {
$arr[] = false;
$arr[] = NO_PROXY;
unsetProxySessions();
}
break;
case "refresh":
$dirName = rawurldecode($_REQUEST['dirName']);
$type = $_REQUEST['type'];
if($type=='restore'){
$rListPath = Scheduler::$restore_list_dir."/$dirName";
if(is_dir($rListPath) && $rListPath!='/'){
removeItems($rListPath);
}
if(file_exists($searchDirRemote) && $searchDirRemote!='/'){
removeItems($searchDirRemote);
}
} else if($type=='backup' || $type=='localBackup'){
getSharedList();
if(file_exists($searchDirLocal) && $searchDirLocal!='/'){
removeItems($searchDirLocal);
}
killSizeFd();
unlink(Scheduler::$nasUser_dir."$username/".SIZEOUTPUT);
autoUpdateBackupset();
}
break;
case "removeArchivePid":
$archive_dir = Scheduler::$archiveclean_dir.$_SESSION['manual_backupset']."/";
$pid = $archive_dir."pid.txt";
@unlink($pid);
$temp = $archive_dir."temp/";
if(is_dir($temp)){
removeItems($temp);
}
break;
case "readErrorInfo":
# Sabin Cheruvattil - log file check here and warn user when they click the send button
$log_rel_path = '.trace/' . LOG_FILE;
$trace_rel_path = '.trace/' . TRACE_LOG_FILE;
$logSendWarning = '';
if($_SESSION['userName'] != '') {
$logSize = file_exists(Scheduler::$user_dir . $log_rel_path)? customFileSize(Scheduler::$user_dir . $log_rel_path):0;
$traceLogSize = file_exists(Scheduler::$user_dir . $trace_rel_path)?customFileSize(Scheduler::$user_dir . $trace_rel_path):0;
$errorInfoPath = Scheduler::$user_dir . 'sendErrorInfo.txt';
if((($logSize + $traceLogSize) / (1024 * 1024)) >= SEND_ERROR_LOG_WARN_SIZE) {
$logSendWarning = 'It may take a while to prepare your error report. Please wait...';
}
}
$arr = array();
if($errorInfoPath != '' && file_exists($errorInfoPath)) {
$arr = file_get_contents($errorInfoPath);
$arr = json_decode($arr, TRUE);
} else {
$arr['username'] = $_SESSION['userName'];
}
$arr['logSendWarning'] = $logSendWarning;
echo json_encode($arr);
break;
case 'getNextScheduledTask':
echo json_encode(getNextScheduledTask());
break;
case "validateRestoreFileChk":
$jobPath = $_POST['jobPath'];
echo validateRestoreFileChk($jobPath);
break;
case "putbackTrashSetItems":
GLOBAL $empty_trash;
$empty_trash = 0;
if(isset($_REQUEST["items"]))$itemsForPutBack = $_REQUEST["items"];
if(!$itemsForPutBack)
{
$outputArray['STATUS'] = NO_ITEMS_FOR_DELETE;
header("Content-type:application/json");
echo json_encode($outputArray);
exit;
}
chdir(Scheduler::$delete_dir);
$deleteFileContent = implode("\n",$itemsForPutBack);
if(!file_put_contents("put_back.txt",$deleteFileContent."\n"))
{
$outputArray['STATUS'] = DELETEOP_FAILED;
header("Content-type:application/json");
echo json_encode($outputArray);
exit;
}
@chmod("put_back.txt", $permissionVal);
$outputArray = deleteItems(PUT_BACKOP,"put_back.txt");
if($outputArray['PUT_BACKOP']['HAPPENED'] > 0 && $outputArray['PUT_BACKOP']['HAPPENED'] == $outputArray['PUT_BACKOP']['CONSIDERED'] ){
$outputArray['STATUS'] = DELETEOP_SUCCESSFUL;
header("Content-type:application/json");
echo json_encode($outputArray);
exit;
}else if($outputArray['PUT_BACKOP']['HAPPENED'] > 0 && $outputArray['PUT_BACKOP']['HAPPENED'] != $outputArray['PUT_BACKOP']['CONSIDERED']){
$outputArray['STATUS'] = "partial";
header("Content-type:application/json");
echo json_encode($outputArray);
exit;
}
break;
case "getSize":
$item = rawurldecode($_REQUEST['item']);
$errorFile = Scheduler::$user_dir."sizeError.txt";
$outputFile = Scheduler::$user_dir.SIZEOUTPUT;
#Scheduler::Log("","Calculating size for $item\n--------------------------------------------------------");
file_put_contents($temp_file, GETFILEFOLDERSIZE."\n$item");
@chmod($temp_file,$permissionVal);
#$cmd = phpScriptExecution(OPERATIONSFILE." ".GETFILEFOLDERSIZE, Scheduler::$user_dir,0);
$cmd = phpScriptExecution(OPERATIONSFILE, Scheduler::$user_dir,0);
pclose(popen("$cmd &","r"));
$arr['retry'] = true;
break;
case "getSizeResult":
$outputFile = Scheduler::$user_dir.SIZEOUTPUT;
//$errorFile = Scheduler::$user_dir."sizeError.txt";
if(isset($_REQUEST['item']) && file_exists($outputFile)){
$lines = file($outputFile);
//$errorContent = file_exists($errorFile)?file_get_contents($errorFile):'';
$i=0;
$item = $_REQUEST['item'];
// What to look for
$item = rawurldecode($item);
$search = "\t$item\n";
$search1 = "\t$item";
// Read from file
foreach($lines as $line)
{
// Check if the line contains the string we're looking for, and print if it does
if(strpos($line, $search) !== false || strpos($line, $search1) !== false){
$exp = explode("\t",$line);
$arr[$i]['size'] = $exp[0]!=''?$exp[0]:0;
$arr[$i]['name'] = rtrim($exp[1],"\n");
$arr[$i]['retry'] = false;
$i++;
break;
}
}
}
else{
$fileSizeRequest = Scheduler::$user_dir."sizepid.txt";
if(!file_exists($fileSizeRequest)){
$arr['retry'] = false;
break;
}
}
if(count($arr) == 0)
$arr['retry'] = true;
break;
case "updateLocalMPC":
$hostName = rawurldecode($_REQUEST['path']);
$dedupBucket = rawurldecode($_REQUEST['dedupBucket']);
$path = json_encode(array('hostName'=>$hostName,'deviceID'=>$dedupBucket));
file_put_contents($localMPCfile,$path);
@chmod($localMPCfile,$permissionVal);
break;
case 'getUsedSize':
$path = rawurldecode($_REQUEST['path']);
$size = 0;
$arr = array(FALSE);
if($_SESSION['dedup']) {
if(file_exists($dedupDetailFile)) {
$deviceJSON = file_get_contents($dedupDetailFile);
$deviceArray = json_decode($deviceJSON, true);
$dedupDeviceID = preg_replace("/^5c0b/", '', trim($deviceArray['deviceID']), 1);
$dedupDeviceID = preg_replace("/4b5z$/", '', $dedupDeviceID, 1);
$dbAppPath = getExpressDBPath($path, $dedupDeviceID);
$size = getUsedSpace($dbAppPath);
}
} else {
$dbAppPath = getExpressDBPath($path);
$size = getUsedSpace($dbAppPath);
}
if($size >= 0) {
$_SESSION['usedSize'][$dbAppPath] = $size;
$arr = array(TRUE, $size);
}
break;
case "reIndex":
$drive = getLocalBackupLocation();
$dedupBucket = '';
if($_SESSION['dedup'] && trim($_REQUEST['dedupBucket']) != '') {
$dedupBucket = trim($_REQUEST['dedupBucket']);
}
$dedupServerRoot = '';
if(file_exists($dedupDetailFile)) {
$dedupServerRoot = '/' . getServerRootByDeviceID($dedupBucket);
}
$dbDriveUserDir = "{$drive}/{$userName}{$dedupServerRoot}";
if(!file_exists($dbDriveUserDir)) {
Scheduler::Log("ReIndex: {$dbDriveUserDir} not found");
$arr = array(FALSE);
break;
}
if(isJobRunning("{$reIndexDirPath}/{$pidPath}")) {
$arr = array(FALSE, REINDEX_INPROGRESS);
break;
}
$localStartPidfilePath = Scheduler::$localbackup_dir . "+ManualTask/{$startPid}";
if(isJobRunning($localStartPidfilePath)) {
$arr = array(FALSE, REINDEX_ERR);
break;
}
if(!file_exists($reIndexDirPath)) {
if(!mkdir($reIndexDirPath, $permissionVal)) {
$arr = array(FALSE, "Failed to create Directory {$reIndexDirPath} : " . customErrorMsg());
break;
}
if($dedupBucket != '') {
file_put_contents($reIndexDirPath . '/' . REINDEXBUCKET, $dedupBucket);
@chmod($reIndexDirPath . '/' . REINDEXBUCKET, 0777);
}
@chmod($reIndexDirPath, $permissionVal);
}
$php = getPhpPath();
$phpPath = "{$appPath}/" . CONFIG;
$cmd = "{$php} {$phpPath}/" . DB_REINDEX_FILE;
$cmd = systemCmdExecution($cmd, 0, $reIndexDirPath);
pclose(popen("{$cmd} &", 'r'));
$arr = array(true);
break;
case "reIndexWatcher":
$reIndexOutput = "$reIndexDirPath/$pidPath";
if(file_exists($reIndexOutput))
$arr[] = 'running';
else
$arr[] = 'completed';
break;
case "checkMountedDrives":
$checkDrive = isset($_REQUEST['driveName'])?rawurldecode($_REQUEST['driveName']):'';
$devicesArr = getMountedDevices();
if(empty($checkDrive)) {
$arr[] = (empty($devicesArr)? FALSE : TRUE);
} else {
$IDriveLocal = '/IDriveLocal';
$checkDrive = str_replace($IDriveLocal, '', $checkDrive);
$arr[] = in_array($checkDrive, $devicesArr);
}
break;
case "logoff":
# unset the username so that app won't be able to figureout the user
unset($_SESSION['userName']);
restartSession();
killSizeFd(); //Killing the getSize process
$arr = array(true, LOGGED_OFF, GUEST_USER);
break;
case "displayArchiveResult":
$resultFile = Scheduler::$archiveclean_dir.$_SESSION['manual_backupset']."/temp/result".$_SESSION['file_offset'].".txt";
if(file_exists($resultFile)){
$deleteFileList = file_get_contents($resultFile);
$arr["data_status"] = "1";
if(count($deleteFileList) == 0)
$arr["data_status"] = "0";
$_SESSION['file_offset'] = $_SESSION['file_offset'] + 1;
$arr["result"] = nl2br($deleteFileList);
}else
$arr["data_status"] = "0";
break;
case "checkActiveJobs":
session_write_close();
if($_SESSION['dedup']){
if(!file_exists($dedupDetailFile)){
exit(header("Location:logout.php"));
}
}
$arr = listOngoingJobs(Scheduler::$backup_dir,Scheduler::$restore_dir);
break;
case "watchManualTaskStatus":
$job_type = $_GET['type'];
$job_name = "+ManualTask";
if($_GET['trash'] == 1)
$job_name = "+TrashManualTask";
echo chkJobInProgress($job_name, ucfirst($job_type));
break;
case "getLocalRestoreSearchList":
$searchStr = $_POST['search_str'];
$searchPath = rawurldecode($_POST['search_path']);
$dedupBucket = trim($_POST['dedupBucket']);
$deviceID = trim($_POST['deviceID']);
if($_POST['page'] > 0) {
$page = $_POST['page'] - 1;
}
$arr = getLocalRestoreSearchList($searchStr, $searchPath, $page, $dedupBucket, $deviceID);
break;
case "bucket":
$operation = isset($_REQUEST['operation'])?rawurldecode($_REQUEST['operation']):'';
$deviceID = isset($_REQUEST['deviceID'])?rawurldecode($_REQUEST['deviceID']):'';
$nickName = isset($_REQUEST['nickName'])?rawurldecode($_REQUEST['nickName']):'';
$oldDeviceID = '';
if($operation=='create')
$op = CREATEBUCKETOP;
else if($operation=='link') {
$op = LINKBUCKETOP;
$dedupHostname = shell_exec("hostname");
$dedupHostname = trim($dedupHostname);
$nickName = $dedupHostname;
$oldDeviceID = $deviceID;
}
else if($operation=='update')
$op = NICKNAMEUPDATEOP;
$arr = bucketOperation($op,$nickName,$deviceID);
if($arr[0] == true) {
if($operation=='link' && isset($_SESSION['deviceList'][$deviceID]['D']))
unset($_SESSION['deviceList'][$deviceID]['D']);
$deviceID = $_SESSION['deviceID'];
$nickName = $_SESSION['nickName'];
$serverRoot = $_SESSION['serverRoot'];
$dedupDetail = json_encode(array('serverRoot' => $serverRoot, 'deviceID' => $deviceID, 'nick_name' => $nickName));
file_put_contents($dedupDetailFile,$dedupDetail);
@chmod($dedupDetailFile, $permissionVal);
file_put_contents($dedupRestoreDeviceID, $deviceID);
@chmod($dedupRestoreDeviceID, $permissionVal);
file_put_contents($mpc,$nickName);
@chmod($mpc, $permissionVal);
$listDevice = array();
if($nickName != '') {
renameExpressNickNameOnBucketUpdate($nickName, $oldDeviceID);
}
$_SESSION['deviceList'][$deviceID]['D'] = $nickName;
updateHostName();
resetLoglistXml();
}
break;
case "removeRestoreSetFiles":
$manulRestoreSetFilePath = Scheduler::$restore_dir.Scheduler::$manual_dir."/".RESTORESETFILEDISPLAY;
@unlink($manulRestoreSetFilePath);
break;
case "installationScript":
executeInstallationScript();
break;
case "checkAppUpdate":
$output = checkAppUpdate();
$arr['response'] = $output;
break;
}
$html_action = array("scheduler_list_table", "log_list_table", "readErrorInfo", 'getNextScheduledTask','watchManualTaskStatus');
if(!in_array($action, $html_action)) {
echo json_encode($arr);
}
exit;
?>