Automattic\WooCommerce\Internal\Admin

SiteHealth::is_uploads_directory_protectedprivateWC 1.0

Check if the WooCommerce uploads directory is protected from directory browsing.

Method of the class: SiteHealth{}

No Hooks.

Returns

true|false|Array{unverified:. true}

Usage

// private - for code of main (parent) class only
$result = $this->is_uploads_directory_protected();

SiteHealth::is_uploads_directory_protected() code WC 11.0.0

private function is_uploads_directory_protected() {
	$cache_key = '_woocommerce_upload_directory_status';
	$status    = get_transient( $cache_key );

	if ( false !== $status ) {
		if ( 'unverified' === $status ) {
			return array( 'unverified' => true );
		}

		return 'protected' === $status;
	}

	$uploads  = wp_get_upload_dir();
	$response = wp_safe_remote_get(
		esc_url_raw( $uploads['baseurl'] . '/woocommerce_uploads/' ),
		array(
			'redirection' => 0,
		)
	);

	if ( is_wp_error( $response ) ) {
		set_transient( $cache_key, 'unverified', HOUR_IN_SECONDS );
		return array( 'unverified' => true );
	}

	$response_code = intval( wp_remote_retrieve_response_code( $response ) );

	if ( 0 === $response_code ) {
		set_transient( $cache_key, 'unverified', HOUR_IN_SECONDS );
		return array( 'unverified' => true );
	}

	$response_content = wp_remote_retrieve_body( $response );
	$is_protected     = ( 200 === $response_code && empty( $response_content ) ) || ( 200 !== $response_code );

	set_transient( $cache_key, $is_protected ? 'protected' : 'unprotected', DAY_IN_SECONDS );

	return $is_protected;
}