diff options
author | Stefan Giehl <stefan@matomo.org> | 2021-02-05 02:33:00 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-05 02:33:00 +0300 |
commit | a2fd1e52fa34a241bf3b4d83114863418cf6742a (patch) | |
tree | 0b4eca2fa4c27a8d09f42679de8cb145be305a53 /plugins/BulkTracking | |
parent | 490dc3a1a09e4263b4893cbbbf600ba505d9add4 (diff) |
Send 204 response for bulk requests to avoid possible CORB issue (#17180)
* Send 204 response for bulk tracking requests that were send with send_image=0
and automatically add that for all bulk requests sent be piwik.js
* rebuilt piwik.js
Co-authored-by: sgiehl <sgiehl@users.noreply.github.com>
Diffstat (limited to 'plugins/BulkTracking')
-rw-r--r-- | plugins/BulkTracking/BulkTracking.php | 9 | ||||
-rw-r--r-- | plugins/BulkTracking/Tracker/Requests.php | 11 | ||||
-rw-r--r-- | plugins/BulkTracking/Tracker/Response.php | 20 |
3 files changed, 40 insertions, 0 deletions
diff --git a/plugins/BulkTracking/BulkTracking.php b/plugins/BulkTracking/BulkTracking.php index 89d0093187..011fce127b 100644 --- a/plugins/BulkTracking/BulkTracking.php +++ b/plugins/BulkTracking/BulkTracking.php @@ -62,6 +62,7 @@ class BulkTracking extends \Piwik\Plugin if ($this->isUsingBulkRequest()) { $handler = new Handler(); + $handler->getResponse()->setShouldSendResponse($this->shouldSendResponse()); } } @@ -73,6 +74,14 @@ class BulkTracking extends \Piwik\Plugin return $requests->isUsingBulkRequest($rawData); } + private function shouldSendResponse(): bool + { + $requests = $this->buildBulkRequests(); + $rawData = $requests->getRawBulkRequest(); + + return $requests->shouldSendResponse($rawData); + } + private function buildBulkRequests() { if (!is_null($this->requests)) { diff --git a/plugins/BulkTracking/Tracker/Requests.php b/plugins/BulkTracking/Tracker/Requests.php index 7df53df0dc..4eff7b9023 100644 --- a/plugins/BulkTracking/Tracker/Requests.php +++ b/plugins/BulkTracking/Tracker/Requests.php @@ -82,6 +82,17 @@ class Requests return array($requests, $tokenAuth); } + public function shouldSendResponse($rawData): bool + { + $rawData = trim($rawData); + $rawData = Common::sanitizeLineBreaks($rawData); + + // POST data can be array of string URLs or array of arrays w/ visit info + $jsonData = json_decode($rawData, $assoc = true); + + return !!Common::getRequestVar('send_image', true, 'string', $jsonData); + } + public function initRequestsAndTokenAuth($rawData) { list($requests, $tokenAuth) = $this->getRequestsArrayFromBulkRequest($rawData); diff --git a/plugins/BulkTracking/Tracker/Response.php b/plugins/BulkTracking/Tracker/Response.php index d32ee6e8ff..d75b8b25e0 100644 --- a/plugins/BulkTracking/Tracker/Response.php +++ b/plugins/BulkTracking/Tracker/Response.php @@ -25,6 +25,11 @@ class Response extends Tracker\Response private $isAuthenticated = false; /** + * @var bool + */ + private $shouldSendResponse = true; + + /** * Echos an error message & other information, then exits. * * @param Tracker $tracker @@ -48,6 +53,11 @@ class Response extends Tracker\Response return; } + if (!$this->shouldSendResponse()) { + Common::sendResponseCode(204); + return; + } + $result = $this->formatResponse($tracker); echo json_encode($result); @@ -92,6 +102,16 @@ class Response extends Tracker\Response return $result; } + public function setShouldSendResponse(bool $shouldSendResponse) + { + $this->shouldSendResponse = $shouldSendResponse; + } + + public function shouldSendResponse(): bool + { + return $this->shouldSendResponse; + } + public function setInvalidRequests($invalidRequests) { $this->invalidRequests = $invalidRequests; |