Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Giehl <stefan@matomo.org>2021-02-05 02:33:00 +0300
committerGitHub <noreply@github.com>2021-02-05 02:33:00 +0300
commita2fd1e52fa34a241bf3b4d83114863418cf6742a (patch)
tree0b4eca2fa4c27a8d09f42679de8cb145be305a53 /plugins/BulkTracking
parent490dc3a1a09e4263b4893cbbbf600ba505d9add4 (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.php9
-rw-r--r--plugins/BulkTracking/Tracker/Requests.php11
-rw-r--r--plugins/BulkTracking/Tracker/Response.php20
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;