Yanz File Manager
<?php
/*
* BACKUPLY
* https://backuply.com
* (c) Backuply Team
*/
if(!defined('ABSPATH')) {
die('HACKING ATTEMPT!');
}
function backuply_get_protocols(){
$protocols['ftp'] = 'FTP';
$protocols['gdrive'] = 'Google Drive';
$protocols['bcloud'] = 'Backuply Cloud';
if(defined('BACKUPLY_PRO')) {
if(!function_exists('backuply_get_pro_backups') && defined('BACKUPLY_PRO_DIR')) {
include_once(BACKUPLY_PRO_DIR . '/functions.php');
}
$protocols += backuply_get_pro_backups();
}
return $protocols;
}
function backuply_create_backup_folders(){
// Creating Backuply Folder
if(!file_exists(BACKUPLY_BACKUP_DIR)) {
@mkdir(BACKUPLY_BACKUP_DIR, 0755, true);
}
$random_string = wp_generate_password(6, false);
// Creating backups_info folder
if(file_exists(BACKUPLY_BACKUP_DIR . 'backups_info')){
@rename(BACKUPLY_BACKUP_DIR . 'backups_info', BACKUPLY_BACKUP_DIR . 'backups_info-'. $random_string);
}
// Creating backups folder
if(file_exists(BACKUPLY_BACKUP_DIR . 'backups')){
@rename(BACKUPLY_BACKUP_DIR . 'backups', BACKUPLY_BACKUP_DIR . 'backups-'. $random_string);
}
$backup_info = backuply_glob('backups_info');
$backups = backuply_glob('backups');
if(empty($backup_info)){
@mkdir(BACKUPLY_BACKUP_DIR . 'backups_info-' . $random_string, 0755, true);
}
if(empty($backups)){
@mkdir(BACKUPLY_BACKUP_DIR . 'backups-' . $random_string, 0755, true);
}
}
// Add the htaccess file to protect us !
function backuply_add_htaccess(){
if(!file_exists(BACKUPLY_BACKUP_DIR)) {
@mkdir(BACKUPLY_BACKUP_DIR, 0755, true);
}
$htaccess = @fopen(BACKUPLY_BACKUP_DIR . '.htaccess', 'w');
if(!$htaccess) {
return false;
}
@fwrite($htaccess, 'deny from all');
@fclose($htaccess);
return true;
}
// Add the webconfig file to protect us !
function backuply_add_web_config(){
if(file_exists(BACKUPLY_BACKUP_DIR . 'web.config')){
return true;
}
$web_config = @fopen(BACKUPLY_BACKUP_DIR . 'web.config', 'w');
if(!$web_config) {
return false;
}
$web_conf = '<configuration>
<system.webServer>
<authorization>
<deny users="*" />
</authorization>
</system.webServer>
</configuration>';
@fwrite($web_config, $web_conf);
@fclose($web_config);
return true;
}
// Add the htaccess folder to protect us !
function backuply_add_index_files(){
if(!file_exists(BACKUPLY_BACKUP_DIR)) {
@mkdir(BACKUPLY_BACKUP_DIR, 0755, true);
}
$php_protection = '<?php //Backuply';
$html_protection = '<html><body><a href="https://backuply.com" target="_blank">WordPress backups by Backuply</a></body></html>';
@file_put_contents(BACKUPLY_BACKUP_DIR . 'index.html', $html_protection);
@file_put_contents(BACKUPLY_BACKUP_DIR . 'index.php', $php_protection);
$backups = backuply_glob('backups');
if(!empty($backups)){
if(!file_exists($backups . '/index.html')){
@file_put_contents($backups . '/index.html', $html_protection);
}
if(!file_exists($backups . '/index.php')){
@file_put_contents($backups . '/index.php', $php_protection);
}
// Protecting backups-*/tmp folder
if(!file_exists($backups . '/tmp/index.html')){
@mkdir($backups . '/tmp');
@file_put_contents($backups . '/tmp/index.html', $html_protection);
}
if(!file_exists($backups . '/tmp/index.php')){
@file_put_contents($backups . '/tmp/index.php', $php_protection);
}
}
// Protecting backups_info folder
$backups_info = backuply_glob('backups_info');
if(!empty($backups_info)){
if(!file_exists($backups_info . '/index.html')){
@file_put_contents($backups_info . '/index.html', $html_protection);
}
if(!file_exists($backups_info . '/index.php')){
@file_put_contents($backups_info . '/index.php', $php_protection);
}
}
}
function backuply_glob($relative_path){
$glob = glob(BACKUPLY_BACKUP_DIR . $relative_path . '-*', GLOB_ONLYDIR);
if(!empty($glob[0])){
return $glob[0];
}
return false;
}
function backuply_kill_process($is_restore = false) {
delete_option('backuply_status');
update_option('backuply_backup_stopped', true);
if(!empty($is_restore)){
backuply_clean_restoration_file();
}
die();
}
function backuply_clean_restoration_file(){
// Restore is complete now we dont need this
if(file_exists(BACKUPLY_BACKUP_DIR.'/restoration/restoration.php')) {
@unlink(BACKUPLY_BACKUP_DIR.'/restoration/restoration.php');
}
if(is_dir(BACKUPLY_BACKUP_DIR.'/restoration')) {
@rmdir(BACKUPLY_BACKUP_DIR.'/restoration');
}
// Deleting restore index file
if(file_exists(ABSPATH . '/backuply-restore.php')){
unlink(ABSPATH . '/backuply-restore.php');
}
}
// If there is a restore or backup task running
function backuply_active(){
global $backuply;
$backuply['status'] = get_option('backuply_status');
// Nothing there
if(empty($backuply['status']['last_time'])){
return false;
}
// No updates since 5 min
if((time() - BACKUPLY_TIMEOUT_TIME) > $backuply['status']['last_time']){
return false;
}
return true;
}
// Verifies the backuply key
function backuply_verify_self($key, $restore_key = false) {
if(empty($key)) {
return false;
}
$config = backuply_get_config();
if(!empty($restore_key)){
if(!empty($config['RESTORE_KEY']) && urldecode($key) == $config['RESTORE_KEY']) {
return true;
}
return false;
}
if(urldecode($key) == $config['BACKUPLY_KEY']) {
return true;
}
return false;
}
// Wp-Cron handle for timeout check i.e. clean dead processes
// Terminates process if no update for 30 min
function backuply_timeout_check($is_restore) {
global $backuply;
// Is it a restore check ?
if(!empty($is_restore)) {
$file = BACKUPLY_BACKUP_DIR . '/restoration/restoration.php';
if(!file_exists($file)) {
die();
}
$fm_time = filemtime($file);
if((time() - $fm_time) >= BACKUPLY_TIMEOUT_TIME) {
backuply_kill_process(true);
}
// Its a backup process
} else {
if(empty($backuply['status']['last_update'])){
backuply_kill_process();
}
if((time() - $backuply['status']['last_update']) >= BACKUPLY_TIMEOUT_TIME) {
backuply_kill_process();
}
}
// To check after 5 minutes again
wp_schedule_single_event(time() + BACKUPLY_TIMEOUT_TIME, 'backuply_timeout_check', array('is_restore' => $is_restore));
}
// Create a config file and set it with a key
function backuply_set_config() {
$write['BACKUPLY_KEY'] = backuply_csrf_get_token();
// $write['RESTORE_KEY'] = backuply_csrf_get_token();
update_option('backuply_config_keys', $write);
}
function backuply_set_config_file(){
$write = get_option('backuply_config_keys', []);
if(empty($write)){
return false;
}
$config_file = BACKUPLY_BACKUP_DIR . 'backuply_config.php';
$fp = @fopen($config_file, 'w');
if(!is_resource($fp)){
return;
}
@fwrite($fp, "<?php exit();?>\n" . json_encode($write, JSON_PRETTY_PRINT));
@fclose($fp);
@chmod($config_file, 0600);
return true;
}
function backuply_update_restore_key(){
$config = get_option('backuply_config_keys');
if(empty($config)) {
backuply_set_config();
return;
}
$restore_key = backuply_csrf_get_token();
$config['RESTORE_KEY'] = $restore_key;
update_option('backuply_config_keys', $config);
}
// Sets Backup Location details in Restoration File
function backuply_set_restoration_file($loc) {
$write['protocol'] = $loc['protocol'];
$write['name'] = $loc['name'];
$restoration_file = BACKUPLY_BACKUP_DIR . 'restoration/restoration.php';
$fp = @fopen($restoration_file, 'w');
if(!is_resource($fp)){
return;
}
if (0 == filesize($restoration_file)){
// file is empty
@fwrite($fp, "<?php exit();?>\n");
}
@fwrite($fp, json_encode($write, JSON_PRETTY_PRINT));
@fclose($fp);
@chmod($restoration_file, 0600);
}
// Sets Backup Location details in Restoration File
function backuply_get_restoration_data() {
$restoration_file = BACKUPLY_BACKUP_DIR . 'restoration/restoration.php';
$fp = @fopen($restoration_file, 'r');
@fseek($fp, 16);
if(filesize($restoration_file) == 0){
return;
}
$content = @fread($fp, filesize($restoration_file));
@fclose($fp);
if(empty($content)) {
return [];
}
$restro = json_decode($content, true);
return $restro;
}
// Get Config Array
function backuply_get_config() {
$config_file = BACKUPLY_BACKUP_DIR . 'backuply_config.php';
// Fetch keys saved in DB
if(!file_exists($config_file)){
$db_keys = get_option('backuply_config_keys', []);
if(empty($db_keys)){
return [];
}
return $db_keys;
}
if(empty(filesize($config_file))) {
return [];
//backuply_get_config();
}
$fp = @fopen($config_file, 'r');
if(!is_resource($fp)){
return [];
}
@fseek($fp, 16);
$file_size = filesize($config_file);
if(empty($file_size)){
return [];
}
$content = @fread($fp, $file_size);
@fclose($fp);
if(empty($content)) {
return [];
}
$config = json_decode($content, true);
return $config;
}
// Create or updates the log file
function backuply_status_log($log, $status = 'working', $percentage = 0){
$log_file = BACKUPLY_BACKUP_DIR . 'backuply_log.php';
if(!file_exists($log_file) || 0 == filesize($log_file)) {
$log = "<?php exit();?>\n" . $log; //Prepend php exit
}
$this_log = $log . '|' . $status . '|' . $percentage . "\n";
file_put_contents($log_file, $this_log, FILE_APPEND);
}
// Returns array of logs
function backuply_get_status($last_log = 0){
$log_file = BACKUPLY_BACKUP_DIR. 'backuply_log.php';
$logs = [];
if(!file_exists($log_file)){
$logs[] = 'Something went wrong!|error';
delete_option('backuply_status');
update_option('backuply_backup_stopped', 1, false);
return $logs;
}
$fh = fopen($log_file, 'r');
$seek_to = $last_log;
@fseek($fh, $seek_to);
$lines = fread($fh, fstat($fh)['size']);
fclose($fh);
$fh = null;
return $lines;
}
// A compulsory POST which issues a error if the POST[$name] is not there
function backuply_POST($name, $e){
global $error;
//Check the POSTED NAME was posted
if(!isset($_POST[$name]) || strlen(trim($_POST[$name])) < 1){
$error[] = $e;
}else{
return backuply_inputsec(backuply_htmlizer(trim($_POST[$name])));
}
}
// Used for the checkboxes which have the same names (i.e. name=SOMENAME[])
function backuply_POSTmulticheck($name, $value, $default = array()){
if(isset($_POST[$name]) && is_array($_POST[$name])){
if(in_array($value, $_POST[$name])){
return 'checked="checked"';
}
}else{
if(in_array($value, $default)){
return 'checked="checked"';
}
}
return true;
}
// A compulsory REQUEST which issues a error if the REQUEST[$name] is not there
function backuply_REQUEST($name, $e){
global $error;
//Check the POSTED NAME was posted
if(!isset($_REQUEST[$name]) || strlen(trim($_REQUEST[$name])) < 1){
$error[$name] = $e;
}else{
return backuply_inputsec(backuply_htmlizer(trim($_REQUEST[$name])));
}
}
// Check if a field is posted via POST else return default value
function backuply_optpost($name, $default = ''){
if(!empty($_POST[$name])){
return backuply_inputsec(backuply_htmlizer(trim($_POST[$name])));
}
return $default;
}
// Check if a field is posted via GET else return default value
function backuply_optget($name, $default = ''){
if(!empty($_GET[$name])){
return backuply_inputsec(backuply_htmlizer(trim($_GET[$name])));
}
return $default;
}
// Check if a field is posted via GET or POST else return default value
function backuply_optreq($name, $default = ''){
if(!empty($_REQUEST[$name])){
return backuply_inputsec(backuply_htmlizer(trim($_REQUEST[$name])));
}
return $default;
}
function backuply_POSTchecked($name, $default = false, $submit_name = ''){
if(!empty($submit_name)){
$post_to_check = isset($_POST[$submit_name]) ? backuply_optpost($submit_name) : '';
}else{
$post_to_check = $_POST;
}
return (!empty($post_to_check) ? (isset($_POST[$name]) ? 'checked="checked"' : '') : (!empty($default) ? 'checked="checked"' : ''));
}
function backuply_POSTselect($name, $value, $default = false){
if(empty($_POST)){
if(!empty($default)){
return 'selected="selected"';
}
}else{
if(isset($_POST[$name])){
if(trim($_POST[$name]) == $value){
return 'selected="selected"';
}
}
}
}
///TODO:: Not being used
function backuply_POSTradio($name, $val, $default = null){
return (!empty($_POST) ? (@$_POST[$name] == $val ? 'checked="checked"' : '') : (!is_null($default) && $default == $val ? 'checked="checked"' : ''));
}
function backuply_inputsec($string){
$string = addslashes($string);
// This is to replace ` which can cause the command to be executed in exec()
$string = str_replace('`', '\`', $string);
return $string;
}
function backuply_htmlizer($string){
$string = htmlentities($string, ENT_QUOTES, 'UTF-8');
preg_match_all('/(&#(\d{1,7}|x[0-9a-fA-F]{1,6});)/', $string, $matches);//backuply_print($matches);
foreach($matches[1] as $mk => $mv){
$tmp_m = backuply_entity_check($matches[2][$mk]);
$string = str_replace($matches[1][$mk], $tmp_m, $string);
}
return $string;
}
function backuply_entity_check($string){
//Convert Hexadecimal to Decimal
$num = ((substr($string, 0, 1) === 'x') ? hexdec(substr($string, 1)) : (int) $string);
//Squares and Spaces - return nothing
$string = (($num > 0x10FFFF || ($num >= 0xD800 && $num <= 0xDFFF) || $num < 0x20) ? '' : '&#'.$num.';');
return $string;
}
// Check if a checkbox is selected
function backuply_is_checked($post){
if(!empty($_POST[$post])){
return true;
}
return false;
}
// A Function that lists files and folders in a folder.
function backuply_sfilelist($startdir='./', $searchSubdirs=1, $directoriesonly=0, $maxlevel='all', $level=1){
return backuply_filelist_fn($startdir, $searchSubdirs, $directoriesonly, $maxlevel, $level);
}
// The below function will list all folders and files within a directory. It is a recursive function that uses a global array.
function backuply_filelist_fn($startdir='./', $searchSubdirs=1, $directoriesonly=0, $maxlevel='all', $level=1, $reset = 1){
//list the directory/file names that you want to ignore
$ignoredDirectory = array();
$ignoredDirectory[] = '.';
$ignoredDirectory[] = '..';
$ignoredDirectory[] = '_vti_cnf';
global $directorylist; //initialize global array
if(substr($startdir, -1) != '/'){
$startdir = $startdir.'/';
}
if (is_dir($startdir)) {
if ($dh = opendir($startdir)) {
while (($file = readdir($dh)) !== false) {
if (!(array_search($file,$ignoredDirectory) > -1)) {
if (@filetype($startdir . $file) == 'dir') {
//build your directory array however you choose;
//add other file details that you want.
$directorylist[$startdir . $file]['level'] = $level;
$directorylist[$startdir . $file]['dir'] = 1;
$directorylist[$startdir . $file]['name'] = $file;
$directorylist[$startdir . $file]['path'] = $startdir;
if ($searchSubdirs) {
if ((($maxlevel) == 'all') or ($maxlevel > $level)) {
backuply_filelist_fn($startdir . $file . "/", $searchSubdirs, $directoriesonly, $maxlevel, ($level + 1), 0);
}
}
} else {
if (!$directoriesonly) {
//if you want to include files; build your file array
//however you choose; add other file details that you want.
$directorylist[$startdir . $file]['level'] = $level;
$directorylist[$startdir . $file]['dir'] = 0;
$directorylist[$startdir . $file]['name'] = $file;
$directorylist[$startdir . $file]['path'] = $startdir;
}
}
}
}
closedir($dh);
}
}
if(!empty($reset)){
$r = $directorylist;
$directorylist = array();
return($r);
}
}
// Report an error
function backuply_report_error($error = array()){
if(empty($error)){
return true;
}
$error_string = '<b>Please fix the below error(s) :</b> <br />';
foreach($error as $ek => $ev){
$error_string .= '* '.$ev.'<br />';
}
echo '<div id="message" class="error"><p>'. wp_kses_post($error_string). '</p></div><br>';
}
// Report a success
function backuply_report_success($msg){
if(empty($msg)){
return true;
}
echo '<div id="message" class="notice updated is-dismissible"><p>'. wp_kses_post($msg) . '</p></div><br />';
}
// Generate a random string
function backuply_random_string($length = 10){
$characters = '0123456789abcdefghijklmnopqrstuvwxyz';
$charactersLength =
YANZ File Manager Version 1.0, Coded By YANZ MUAHCH