diff options
author | diosmosis <benaka@piwik.pro> | 2015-09-02 00:03:22 +0300 |
---|---|---|
committer | diosmosis <benaka@piwik.pro> | 2015-09-02 00:03:22 +0300 |
commit | f5ce32a7f7feff1e1cf3c5bb234746617700a17b (patch) | |
tree | d531d0d6b643d8e32ba5751a635cd0bbc1d62b0a /plugins/BulkTracking | |
parent | ce2dfe180b222176b0c7022a3f024fa2b036d5df (diff) |
Only output invalid_indices if bulk tracking request is authenticated.
Diffstat (limited to 'plugins/BulkTracking')
-rw-r--r-- | plugins/BulkTracking/Tracker/Handler.php | 31 | ||||
-rw-r--r-- | plugins/BulkTracking/Tracker/Response.php | 24 | ||||
-rw-r--r-- | plugins/BulkTracking/tests/Framework/TestCase/BulkTrackingTestCase.php | 4 | ||||
-rw-r--r-- | plugins/BulkTracking/tests/Integration/TrackerTest.php | 36 | ||||
-rw-r--r-- | plugins/BulkTracking/tests/Mock/TrackerResponse.php | 10 | ||||
-rw-r--r-- | plugins/BulkTracking/tests/Unit/ResponseTest.php | 34 |
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(); |