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:
authordiosmosis <benaka@piwik.pro>2015-09-02 00:03:22 +0300
committerdiosmosis <benaka@piwik.pro>2015-09-02 00:03:22 +0300
commitf5ce32a7f7feff1e1cf3c5bb234746617700a17b (patch)
treed531d0d6b643d8e32ba5751a635cd0bbc1d62b0a /plugins/BulkTracking
parentce2dfe180b222176b0c7022a3f024fa2b036d5df (diff)
Only output invalid_indices if bulk tracking request is authenticated.
Diffstat (limited to 'plugins/BulkTracking')
-rw-r--r--plugins/BulkTracking/Tracker/Handler.php31
-rw-r--r--plugins/BulkTracking/Tracker/Response.php24
-rw-r--r--plugins/BulkTracking/tests/Framework/TestCase/BulkTrackingTestCase.php4
-rw-r--r--plugins/BulkTracking/tests/Integration/TrackerTest.php36
-rw-r--r--plugins/BulkTracking/tests/Mock/TrackerResponse.php10
-rw-r--r--plugins/BulkTracking/tests/Unit/ResponseTest.php34
6 files changed, 124 insertions, 15 deletions
diff --git a/plugins/BulkTracking/Tracker/Handler.php b/plugins/BulkTracking/Tracker/Handler.php
index 791b149e3f..81b413c76a 100644
--- a/plugins/BulkTracking/Tracker/Handler.php
+++ b/plugins/BulkTracking/Tracker/Handler.php
@@ -9,7 +9,11 @@
namespace Piwik\Plugins\BulkTracking\Tracker;
+use Piwik\Archiver\Request;
+use Piwik\AuthResult;
+use Piwik\Container\StaticContainer;
use Piwik\Exception\UnexpectedWebsiteFoundException;
+use Piwik\Piwik;
use Piwik\Tracker;
use Piwik\Tracker\RequestSet;
use Piwik\Tracker\TrackerConfig;
@@ -40,6 +44,12 @@ class Handler extends Tracker\Handler
public function process(Tracker $tracker, RequestSet $requestSet)
{
+ $isAuthenticated = $this->isBulkTrackingRequestAuthenticated($requestSet);
+
+ /** @var Response $response */
+ $response = $this->getResponse();
+ $response->setIsAuthenticated($isAuthenticated);
+
$invalidRequests = array();
foreach ($requestSet->getRequests() as $index => $request) {
try {
@@ -49,8 +59,6 @@ class Handler extends Tracker\Handler
}
}
- /** @var Response $response */
- $response = $this->getResponse();
$response->setInvalidRequests($invalidRequests);
}
@@ -96,4 +104,23 @@ class Handler extends Tracker\Handler
return (bool) TrackerConfig::getConfigValue('bulk_requests_use_transaction');
}
+ private function isBulkTrackingRequestAuthenticated(RequestSet $requestSet)
+ {
+ $tokenAuth = $requestSet->getTokenAuth();
+ if (empty($tokenAuth)) {
+ return false;
+ }
+
+ Piwik::postEvent('Request.initAuthenticationObject');
+
+ /** @var \Piwik\Auth $auth */
+ $auth = StaticContainer::get('Piwik\Auth');
+ $auth->setTokenAuth($tokenAuth);
+ $auth->setLogin(null);
+ $auth->setPassword(null);
+ $auth->setPasswordHash(null);
+ $access = $auth->authenticate();
+
+ return $access->getCode() != AuthResult::FAILURE;
+ }
}
diff --git a/plugins/BulkTracking/Tracker/Response.php b/plugins/BulkTracking/Tracker/Response.php
index 6b46fa18f3..1580f1dbce 100644
--- a/plugins/BulkTracking/Tracker/Response.php
+++ b/plugins/BulkTracking/Tracker/Response.php
@@ -20,6 +20,11 @@ class Response extends Tracker\Response
private $invalidRequests = array();
/**
+ * @var bool
+ */
+ private $isAuthenticated = false;
+
+ /**
* Echos an error message & other information, then exits.
*
* @param Tracker $tracker
@@ -62,9 +67,12 @@ class Response extends Tracker\Response
'status' => 'error',
'tracked' => $tracker->getCountOfLoggedRequests(),
'invalid' => count($this->invalidRequests),
- 'invalid_indices' => $this->invalidRequests,
);
+ if ($this->isAuthenticated) {
+ $result['invalid_indices'] = $this->invalidRequests;
+ }
+
// send error when in debug mode
if ($tracker->isDebugModeEnabled()) {
$result['message'] = $this->getMessageFromException($e);
@@ -75,16 +83,26 @@ class Response extends Tracker\Response
private function formatResponse(Tracker $tracker)
{
- return array(
+ $result = array(
'status' => 'success',
'tracked' => $tracker->getCountOfLoggedRequests(),
'invalid' => count($this->invalidRequests),
- 'invalid_indices' => $this->invalidRequests,
);
+
+ if ($this->isAuthenticated) {
+ $result['invalid_indices'] = $this->invalidRequests;
+ }
+
+ return $result;
}
public function setInvalidRequests($invalidRequests)
{
$this->invalidRequests = $invalidRequests;
}
+
+ public function setIsAuthenticated($isAuthenticated)
+ {
+ $this->isAuthenticated = $isAuthenticated;
+ }
}
diff --git a/plugins/BulkTracking/tests/Framework/TestCase/BulkTrackingTestCase.php b/plugins/BulkTracking/tests/Framework/TestCase/BulkTrackingTestCase.php
index 23b96776ae..19788b64ab 100644
--- a/plugins/BulkTracking/tests/Framework/TestCase/BulkTrackingTestCase.php
+++ b/plugins/BulkTracking/tests/Framework/TestCase/BulkTrackingTestCase.php
@@ -80,9 +80,9 @@ class BulkTrackingTestCase extends IntegrationTestCase
return $requestSet;
}
- protected function getDummyRequest($token = null)
+ protected function getDummyRequest($token = null, $idSites = array(1, 2))
{
- $params = array(array('idsite' => '1', 'rec' => '1'), array('idsite' => '2', 'rec' => '1'));
+ $params = array(array('idsite' => $idSites[0], 'rec' => '1'), array('idsite' => $idSites[1], 'rec' => '1'));
$params = array('requests' => $params);
if (!is_null($token)) {
diff --git a/plugins/BulkTracking/tests/Integration/TrackerTest.php b/plugins/BulkTracking/tests/Integration/TrackerTest.php
index d113faca42..a872b0524c 100644
--- a/plugins/BulkTracking/tests/Integration/TrackerTest.php
+++ b/plugins/BulkTracking/tests/Integration/TrackerTest.php
@@ -66,7 +66,7 @@ class TrackerTest extends BulkTrackingTestCase
{
$response = $this->tracker->main($this->getHandler(), $this->getEmptyRequestSet());
- $this->assertSame('{"status":"success","tracked":2,"invalid":0,"invalid_indices":[]}', $response);
+ $this->assertSame('{"status":"success","tracked":2,"invalid":0}', $response);
}
public function test_main_shouldReturnErrorResponse_InCaseOfAnyError()
@@ -79,7 +79,7 @@ class TrackerTest extends BulkTrackingTestCase
$response = $this->tracker->main($handler, $requestSet);
- $this->assertSame('{"status":"error","tracked":0,"invalid":0,"invalid_indices":[]}', $response);
+ $this->assertSame('{"status":"error","tracked":0,"invalid":0}', $response);
}
public function test_main_shouldReturnErrorResponse_IfNotAuthorized()
@@ -91,7 +91,7 @@ class TrackerTest extends BulkTrackingTestCase
$response = $this->tracker->main($handler, $this->getEmptyRequestSet());
- $this->assertSame('{"status":"error","tracked":0,"invalid":0,"invalid_indices":[]}', $response);
+ $this->assertSame('{"status":"error","tracked":0,"invalid":0}', $response);
}
public function test_main_shouldActuallyTrack()
@@ -115,6 +115,30 @@ class TrackerTest extends BulkTrackingTestCase
$this->assertEmpty($this->getIdVisit(3));
}
+ public function test_main_shouldReportInvalidIndices_IfInvalidRequestsIncluded_AndRequestAuthenticated()
+ {
+ $this->injectRawDataToBulk($this->getDummyRequest($token = Fixture::getTokenAuth(), $idSite = array(1, -100)));
+
+ $handler = $this->getHandler();
+ $handler->setResponse(new Response());
+
+ $response = $this->tracker->main($handler, $this->getEmptyRequestSet());
+
+ $this->assertEquals('{"status":"success","tracked":1,"invalid":1,"invalid_indices":[1]}', $response);
+ }
+
+ public function test_main_shouldReportInvalidCount_IfInvalidRequestsIncluded_AndRequestNotAuthenticated()
+ {
+ $this->injectRawDataToBulk($this->getDummyRequest($token = null, $idSite = array(1, -100)));
+
+ $handler = $this->getHandler();
+ $handler->setResponse(new Response());
+
+ $response = $this->tracker->main($handler, $this->getEmptyRequestSet());
+
+ $this->assertEquals('{"status":"success","tracked":1,"invalid":1}', $response);
+ }
+
private function getHandler()
{
return Tracker\Handler\Factory::make();
@@ -130,4 +154,10 @@ class TrackerTest extends BulkTrackingTestCase
return Tracker::getDatabase()->fetchRow("SELECT * FROM " . Common::prefixTable('log_visit') . " WHERE idvisit = ?", array($idVisit));
}
+ protected static function configureFixture($fixture)
+ {
+ parent::configureFixture($fixture);
+
+ $fixture->createSuperUser = true;
+ }
} \ No newline at end of file
diff --git a/plugins/BulkTracking/tests/Mock/TrackerResponse.php b/plugins/BulkTracking/tests/Mock/TrackerResponse.php
index 20ecfff715..9b6f9564d8 100644
--- a/plugins/BulkTracking/tests/Mock/TrackerResponse.php
+++ b/plugins/BulkTracking/tests/Mock/TrackerResponse.php
@@ -14,8 +14,18 @@ class TrackerResponse extends Response
{
private $invalidRequests = array();
+ /**
+ * @var bool
+ */
+ private $isAuthenticated = false;
+
public function setInvalidRequests($invalidRequests)
{
$this->invalidRequests = $invalidRequests;
}
+
+ public function setIsAuthenticated($isAuthenticated)
+ {
+ $this->isAuthenticated = $isAuthenticated;
+ }
} \ No newline at end of file
diff --git a/plugins/BulkTracking/tests/Unit/ResponseTest.php b/plugins/BulkTracking/tests/Unit/ResponseTest.php
index db73ddbe1b..38c3c0cce1 100644
--- a/plugins/BulkTracking/tests/Unit/ResponseTest.php
+++ b/plugins/BulkTracking/tests/Unit/ResponseTest.php
@@ -48,7 +48,7 @@ class ResponseTest extends UnitTestCase
$this->response->outputException($tracker, new Exception('My Custom Message'), 400);
$content = $this->response->getOutput();
- $this->assertEquals('{"status":"error","tracked":5,"invalid":0,"invalid_indices":[]}', $content);
+ $this->assertEquals('{"status":"error","tracked":5,"invalid":0}', $content);
}
public function test_outputException_shouldOutputDebugMessageIfEnabled()
@@ -59,7 +59,7 @@ class ResponseTest extends UnitTestCase
$this->response->outputException($tracker, new Exception('My Custom Message'), 400);
$content = $this->response->getOutput();
- $this->assertStringStartsWith('{"status":"error","tracked":5,"invalid":0,"invalid_indices":[],"message":"My Custom Message\n', $content);
+ $this->assertStringStartsWith('{"status":"error","tracked":5,"invalid":0,"message":"My Custom Message\n', $content);
}
public function test_outputResponse_shouldOutputBulkResponse()
@@ -69,7 +69,7 @@ class ResponseTest extends UnitTestCase
$this->response->outputResponse($tracker);
$content = $this->response->getOutput();
- $this->assertEquals('{"status":"success","tracked":5,"invalid":0,"invalid_indices":[]}', $content);
+ $this->assertEquals('{"status":"success","tracked":5,"invalid":0}', $content);
}
public function test_outputResponse_shouldNotOutputAnything_IfExceptionResponseAlreadySent()
@@ -80,14 +80,38 @@ class ResponseTest extends UnitTestCase
$this->response->outputResponse($tracker);
$content = $this->response->getOutput();
- $this->assertEquals('{"status":"error","tracked":5,"invalid":0,"invalid_indices":[]}', $content);
+ $this->assertEquals('{"status":"error","tracked":5,"invalid":0}', $content);
}
- public function test_outputResponse_shouldOutputInvalidRequests_IfInvalidCountSet()
+ public function test_outputResponse_shouldIncludeInvalidIndices_IfExceptionSet_AndRequestAuthenticated()
+ {
+ $tracker = $this->getTrackerWithCountedRequests();
+
+ $this->response->setInvalidRequests(array(10, 20));
+ $this->response->setIsAuthenticated(true);
+ $this->response->outputException($tracker, new Exception('My Custom Message'), 400);
+ $content = $this->response->getOutput();
+
+ $this->assertEquals('{"status":"error","tracked":5,"invalid":2,"invalid_indices":[10,20]}', $content);
+ }
+
+ public function test_outputResponse_shouldOutputInvalidRequests_IfInvalidIndicesSet_AndRequestNotAuthenticated()
+ {
+ $tracker = $this->getTrackerWithCountedRequests();
+
+ $this->response->setInvalidRequests(array(5, 63, 72));
+ $this->response->outputResponse($tracker);
+ $content = $this->response->getOutput();
+
+ $this->assertEquals('{"status":"success","tracked":5,"invalid":3}', $content);
+ }
+
+ public function test_outputResponse_shouldOutputInvalidRequests_IfInvalidIndicesSet_AndRequestAuthenticated()
{
$tracker = $this->getTrackerWithCountedRequests();
$this->response->setInvalidRequests(array(5, 63, 72));
+ $this->response->setIsAuthenticated(true);
$this->response->outputResponse($tracker);
$content = $this->response->getOutput();