delete(); } /** * reset all ajax action * * the output must be json */ public static function ajax_reset_all() { ob_start(); try { DUP_Handler::init_error_handler(); if (!check_ajax_referer('duplicator_reset_all_settings', 'nonce', false)) { DUP_LOG::Trace('Security issue'); throw new Exception('Security issue'); } DUP_Util::hasCapability('export', DUP_Util::SECURE_ISSUE_THROW); /** Execute function * */ $error = false; $result = array( 'data' => array(), 'html' => '', 'message' => '' ); $nonce = sanitize_text_field($_POST['nonce']); if (!wp_verify_nonce($nonce, 'duplicator_reset_all_settings')) { DUP_Log::trace('Security issue'); throw new Exception('Security issue'); } DUP_Package::by_status_callback(array(__CLASS__, 'package_delete_callback'), array( array('op' => '<', 'status' => DUP_PackageStatus::COMPLETE) )); /** reset active package id * */ DUP_Settings::Set('active_package_id', -1); DUP_Settings::Save(); /** Clean tmp folder * */ DUP_Package::not_active_files_tmp_cleanup(); //throw new Exception('force error test'); } catch (Exception $e) { $error = true; $result['message'] = $e->getMessage(); } /** Intercept output * */ $result['html'] = ob_get_clean(); /** check error and return json * */ if ($error) { wp_send_json_error($result); } else { wp_send_json_success($result); } } public static function duplicator_download() { $error = false; if (!isset($_GET['id']) || !isset($_GET['hash']) || !isset($_GET['file'])) { $error = true; } $packageId = (int) $_GET['id']; $hash = sanitize_text_field($_GET['hash']); $file = sanitize_text_field($_GET['file']); if ($error || ($package = DUP_Package::getByID($packageId)) == false) { $error = true; } if ($error || $hash !== $package->Hash) { $error = true; } switch ($file) { case 'sql': $fileName = "{$package->NameHash}_database.sql"; break; case 'archive': $format = strtolower($package->Archive->Format); $fileName = "{$package->NameHash}_archive.{$format}"; break; case 'installer': $fileName = $package->NameHash.'_installer.php'; break; default: $error = true; } $filepath = DUPLICATOR_SSDIR_PATH.'/'.$fileName; // Process download if (!$error && file_exists($filepath)) { // Clean output buffer if (ob_get_level() !== 0 && @ob_end_clean() === FALSE) { @ob_clean(); } header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.$fileName.'"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: '.filesize($filepath)); flush(); // Flush system output buffer try { $fp = @fopen($filepath, 'r'); if (false === $fp) { throw new Exception('Fail to open the file '.$filepath); } while (!feof($fp) && ($data = fread($fp, DUPLICATOR_BUFFER_READ_WRITE_SIZE)) !== FALSE) { echo $data; } @fclose($fp); } catch (Exception $e) { readfile($filepath); } exit; } else { // if the request is wrong wait to avoid brute force attack sleep(2); wp_die('Invalid request'); } } }