1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87:
<?php
namespace VSP;
defined( 'ABSPATH' ) || exit;
use Varunsridharan\WordPress\Ajaxer;
final class Ajax extends Ajaxer {
protected $action_prefix = 'vsp';
protected $actions = array(
'addon_action' => false,
'download_log' => true,
);
public function addon_action() {
if ( $this->has_request( 'hook_slug' ) ) {
$this->validate_request( 'addon_action', esc_html__( 'Addon Action Not Provided', 'vsp-framework' ) );
$this->validate_request( 'addon', esc_html__( 'Unable To Process Your Request', 'vsp-framework' ) );
do_action( $_REQUEST['hook_slug'] . '/addon/ajax/handle/request', $this );
}
$this->json_error();
}
public function download_log() {
if ( ! isset( $_REQUEST['_wpnonce'] ) ) {
$this->error( esc_html__( 'Invalid Nonce', 'vsp-framework' ) );
}
if ( ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'download_log' ) ) {
$this->error( esc_html__( 'Nonce Expired', 'vsp-framework' ) );
}
if ( isset( $_REQUEST['handle'] ) && ! empty( $_REQUEST['handle'] ) ) {
$file = $_REQUEST['handle'];
$ff_regx = '/\.([^.]+)$/';
$ff_types = array( 'log', 'txt' );
if ( preg_match( $ff_regx, $file, $m ) && in_array( $m[1], $ff_types, true ) ) {
$files = vsp_list_log_files();
foreach ( $files as $f ) {
if ( preg_match( $ff_regx, $f, $m2 ) && in_array( $m2[1], $ff_types, true ) ) {
if ( $f === $file && file_exists( VSP_LOG_DIR . $f ) ) {
header( 'Cache-Control: private' );
header( 'Content-Type: application/stream' );
$size = filesize( VSP_LOG_DIR . $f );
header( "Content-Disposition: attachment; filename=$f" );
header( 'Content-Length: ' . $size );
readfile( VSP_LOG_DIR . $f );
wp_die();
}
}
}
$this->error( esc_html__( 'Log File Not Found !', 'vsp-framework' ) );
} else {
$this->error( esc_html__( 'Invalid Log File Extension', 'vsp-framework' ) );
}
} else {
$this->error( esc_html__( 'Invalid Log File', 'vsp-framework' ) );
}
wp_die();
}
}
return new Ajax();