Throws error when endpoint method is not found

This commit is contained in:
Vlad
2017-08-31 15:18:22 -04:00
parent 5b8b8c8441
commit cc8b7b45ed
2 changed files with 24 additions and 0 deletions

View File

@ -130,6 +130,10 @@ class API {
$endpoint = new $this->_request_endpoint_class(); $endpoint = new $this->_request_endpoint_class();
if(!method_exists($endpoint, $this->_request_method)) {
throw new \Exception(__('Invalid API endpoint method.', 'mailpoet'));
}
// check the accessibility of the requested endpoint's action // check the accessibility of the requested endpoint's action
// by default, an endpoint's action is considered "private" // by default, an endpoint's action is considered "private"
if(!$this->validatePermissions($this->_request_method, $endpoint->permissions)) { if(!$this->validatePermissions($this->_request_method, $endpoint->permissions)) {

View File

@ -221,6 +221,26 @@ class APITest extends \MailPoetTest {
expect($api->validatePermissions('test', $permissions))->true(); expect($api->validatePermissions('test', $permissions))->true();
} }
function testItThrowsExceptionWhenInvalidEndpointMethodIsCalled() {
$this->api = API::JSON(new AccessControl());
$namespace = array(
'name' => 'MailPoet\API\JSON\v2',
'version' => 'v2'
);
$this->api->addEndpointNamespace($namespace['name'], $namespace['version']);
$data = array(
'endpoint' => 'a_p_i_test_namespaced_endpoint_stub_v2',
'api_version' => 'v2',
'method' => 'fakeMethod'
);
$this->api->setRequestData($data);
$response = $this->api->processRoute();
expect($response->status)->equals(Response::STATUS_BAD_REQUEST);
expect($response->errors[0]['message'])->equals('Invalid API endpoint method.');
}
function _after() { function _after() {
WPHooksHelper::releaseAllHooks(); WPHooksHelper::releaseAllHooks();
wp_delete_user($this->wp_user_id); wp_delete_user($this->wp_user_id);