APIv4 - Fix HTTP status code selection
authorTim Otten <totten@civicrm.org>
Thu, 4 Feb 2021 21:15:17 +0000 (13:15 -0800)
committerTim Otten <totten@civicrm.org>
Thu, 4 Feb 2021 21:15:17 +0000 (13:15 -0800)
This is a follow-up to #19526 which addresses a typo that causes a misbehavior in reporting the HTTP status code.

Before
------

If an API request encounters an exception, then it always returns HTTP 403.

After
-----

If an API request encounters an exception, then:

* It may return HTTP 403 (for an authorization exception)
* It may return HTTP 500 (for any other/unrecognized exception)

CRM/Api4/Page/AJAX.php

index 58400510f72edc2617d69a4854399af739ee0c39..a368b20c4c8382c54ba3f0818e2393412048e36f 100644 (file)
@@ -84,7 +84,7 @@ class CRM_Api4_Page_AJAX extends CRM_Core_Page {
       $statusMap = [
         \Civi\API\Exception\UnauthorizedException::class => 403,
       ];
-      http_response_code($statusMap[get_class($e) ?? 500]);
+      http_response_code($statusMap[get_class($e)] ?? 500);
       $response = [];
       if (CRM_Core_Permission::check('view debug output')) {
         $response['error_code'] = $e->getCode();