REST API: Ensure proper namespacing when registering routes.
The PR will corerce routes that have a leading slash and throwing a `_doing_it_wrong` notice while ensuring a proper namespace. Fixes #49749. Props TimothyBlynJacobs, skarabeq, afercia. git-svn-id: https://develop.svn.wordpress.org/trunk@47842 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
3fe58b173f
commit
3ab28fd579
@ -44,6 +44,12 @@ function register_rest_route( $namespace, $route, $args = array(), $override = f
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$clean_namespace = trim( $namespace, '/' );
|
||||||
|
|
||||||
|
if ( $clean_namespace !== $namespace ) {
|
||||||
|
_doing_it_wrong( __FUNCTION__, __( 'Namespace must not start or end with a slash.' ), '5.4.2' );
|
||||||
|
}
|
||||||
|
|
||||||
if ( ! did_action( 'rest_api_init' ) ) {
|
if ( ! did_action( 'rest_api_init' ) ) {
|
||||||
_doing_it_wrong(
|
_doing_it_wrong(
|
||||||
'register_rest_route',
|
'register_rest_route',
|
||||||
@ -84,8 +90,8 @@ function register_rest_route( $namespace, $route, $args = array(), $override = f
|
|||||||
$arg_group['args'] = array_merge( $common_args, $arg_group['args'] );
|
$arg_group['args'] = array_merge( $common_args, $arg_group['args'] );
|
||||||
}
|
}
|
||||||
|
|
||||||
$full_route = '/' . trim( $namespace, '/' ) . '/' . trim( $route, '/' );
|
$full_route = '/' . $clean_namespace . '/' . trim( $route, '/' );
|
||||||
rest_get_server()->register_route( $namespace, $full_route, $args, $override );
|
rest_get_server()->register_route( $clean_namespace, $full_route, $args, $override );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -985,6 +985,26 @@ class Tests_REST_API extends WP_UnitTestCase {
|
|||||||
$this->assertEquals( $expected, rest_filter_response_by_context( $data, $schema, 'view' ) );
|
$this->assertEquals( $expected, rest_filter_response_by_context( $data, $schema, 'view' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 49749
|
||||||
|
*/
|
||||||
|
public function test_register_route_with_invalid_namespace() {
|
||||||
|
$this->setExpectedIncorrectUsage( 'register_rest_route' );
|
||||||
|
|
||||||
|
register_rest_route(
|
||||||
|
'/my-namespace/v1/',
|
||||||
|
'/my-route',
|
||||||
|
array(
|
||||||
|
'callback' => '__return_true',
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$routes = rest_get_server()->get_routes( 'my-namespace/v1' );
|
||||||
|
$this->assertCount( 2, $routes );
|
||||||
|
|
||||||
|
$this->assertTrue( rest_do_request( '/my-namespace/v1/my-route' )->get_data() );
|
||||||
|
}
|
||||||
|
|
||||||
public function _dp_rest_filter_response_by_context() {
|
public function _dp_rest_filter_response_by_context() {
|
||||||
return array(
|
return array(
|
||||||
'default' => array(
|
'default' => array(
|
||||||
|
Loading…
Reference in New Issue
Block a user