File "class-directory-structure.php"
Full Path: /home/refref/public_html/string-locator-20250409154331/includes/REST/class-directory-structure.php
File size: 1.54 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace StringLocator\REST;
use StringLocator\Base\REST;
use StringLocator\Directory_Iterator;
use StringLocator\String_Locator;
class Directory_Structure extends REST {
protected $rest_base = 'get-directory-structure';
public function __construct() {
parent::__construct();
}
public function register_rest_route() {
register_rest_route(
$this->namespace,
$this->rest_base,
array(
'methods' => 'POST',
'callback' => array( $this, 'get_structure' ),
'permission_callback' => array( $this, 'permission_callback' ),
)
);
}
public function permission_callback() {
return current_user_can( String_Locator::$search_capability );
}
public function get_structure( \WP_REST_Request $request ) {
$short_circuit = apply_filters( 'string_locator_directory_iterator_short_circuit', array(), $request );
if ( ! empty( $short_circuit ) ) {
return $short_circuit;
}
$data = json_decode( $request->get_param( 'data' ) );
$directory = $data->directory;
$search = $data->search;
$regex = $data->regex;
// Validate the search path to avoid unintended directory traversal.
if ( 0 !== validate_file( $directory ) ) {
return new \WP_REST_Response(
array(
'success' => false,
'data' => __( 'Invalid search source provided.', 'string-locator' ),
),
400
);
}
$iterator = new Directory_Iterator(
$directory,
$search,
$regex
);
return array(
'success' => true,
'data' => $iterator->get_structure(),
);
}
}
new Directory_Structure();