cloud->apiSecret = self::API_SECRET; } public function testSuccessfulNotificationSignatureVerification() { $signatureTestValues = [ ['timestamp' => self::$timestamp, 'validFor' => self::$validFor], ['timestamp' => (string)self::$timestamp, 'validFor' => (string)self::$validFor], ]; foreach ($signatureTestValues as $value) { $result = SignatureVerifier::verifyNotificationSignature( self::$notificationBody, $value['timestamp'], self::$notificationSignature, $value['validFor'] ); self::assertTrue($result); } } public function testFailedNotificationSignatureVerification() { $signatureTestValues = [ [ 'body' => '{' . self::$notificationBody . '}', 'timestamp' => self::$timestamp, 'signature' => self::$notificationSignature, ], [ 'body' => self::$notificationBody, 'timestamp' => self::$timestamp - 1, 'signature' => self::$notificationSignature, ], [ 'body' => self::$notificationBody, 'timestamp' => self::$timestamp, 'signature' => self::$notificationSignature . 'a', ], ]; foreach ($signatureTestValues as $value) { $result = SignatureVerifier::verifyNotificationSignature( $value['body'], $value['timestamp'], $value['signature'] ); self::assertFalse($result); } } public function testDefaultValidFor() { $result = SignatureVerifier::verifyNotificationSignature( self::$notificationBody, self::$timestamp, self::$notificationSignature ); self::assertTrue($result); } public function testExpiredTimestamp() { $reducedValidFor = self::$validFor - 1; $result = SignatureVerifier::verifyNotificationSignature( self::$notificationBody, self::$timestamp, self::$notificationSignature, $reducedValidFor ); self::assertFalse($result); } /** * @expectedException InvalidArgumentException * @expectedExceptionMessage API Secret is invalid */ public function testNotificationMissingApiSecret() { Configuration::instance()->cloud->apiSecret = null; SignatureVerifier::verifyNotificationSignature( self::$notificationBody, self::$timestamp, self::$notificationSignature ); } public function testNotificationInvalidParameter() { $invalidValues = [ [ 'body' => null, 'timestamp' => self::$timestamp, 'signature' => self::$notificationSignature, ], [ 'body' => self::$notificationBody, 'timestamp' => null, 'signature' => self::$notificationSignature, ], [ 'body' => self::$notificationBody, 'timestamp' => self::$timestamp, 'signature' => null, ], [ 'body' => [self::$notificationBody], 'timestamp' => self::$timestamp, 'signature' => self::$notificationSignature, ], [ 'body' => self::$notificationBody, 'timestamp' => [self::$timestamp], 'signature' => self::$notificationSignature, ], [ 'body' => self::$notificationBody, 'timestamp' => self::$timestamp, 'signature' => [self::$notificationSignature], ], ]; foreach ($invalidValues as $value) { $success = false; try { SignatureVerifier::verifyNotificationSignature( $value['body'], $value['timestamp'], $value['signature'] ); } catch (InvalidArgumentException $e) { $success = true; } self::assertTrue($success); } } public function testSuccessfulApiResponseSignatureVerification() { $signatureTestValues = [self::TEST_VERSION, (string)self::TEST_VERSION]; foreach ($signatureTestValues as $value) { $result = SignatureVerifier::verifyApiResponseSignature( self::$publicId, $value, self::$apiResponseSignature ); self::assertTrue($result); } } public function testFailedApiResponseSignatureVerification() { $signatureTestValues = [ [ 'publicId' => self::$publicId . 'a', 'version' => self::TEST_VERSION, 'signature' => self::$apiResponseSignature, ], [ 'publicId' => self::$publicId, 'version' => self::TEST_VERSION + 1, 'signature' => self::$apiResponseSignature, ], [ 'publicId' => self::$publicId, 'version' => self::TEST_VERSION, 'signature' => self::$apiResponseSignature . 'a', ], ]; foreach ($signatureTestValues as $value) { $result = SignatureVerifier::verifyApiResponseSignature( $value['publicId'], $value['version'], $value['signature'] ); self::assertFalse($result); } } /** * @expectedException InvalidArgumentException * @expectedExceptionMessage API Secret is invalid */ public function testApiResponseMissingApiSecret() { Configuration::instance()->cloud->apiSecret = null; SignatureVerifier::verifyApiResponseSignature( self::$publicId, self::TEST_VERSION, self::$apiResponseSignature ); } } namespace Cloudinary; use Cloudinary\Test\Unit\Utils\SignatureVerifierTest; /** * Mock for time() function * * FIXME: use mock instead * * @return int With test timestamp associated with the signature in the notifications test */ function time() { return SignatureVerifierTest::$mockedNow ?: \time(); }